Собственная фильтрация трафика на ClickHouse и Python: схема без магии и лишних потерь
Когда антифрод «из коробки» начинает резать и живых, и мусор, единственный рабочий путь — поднять свой контур. База проста: собираем сырые события клика, визита, лид-статуса, IP, UA, referrer, time-to-action и связываем их в одну цепочку. ClickHouse держит поток и делает агрегации, Python — оркеструет правила, обновляет списки и принимает решение на уровне сессии.
Дальше строим фильтр не по одному признаку, а по набору:
— частота кликов с одного IP / подсети;
— повторяемость UA и одинаковые заголовки;
— нулевая энтропия по referrer и path;
— аномально короткий time-to-conversion;
— расхождение гео IP и гео лендинга.
Логи надо хранить в разрезе сессии, а не «по клик ID вообще». Иначе вы увидите красивую статистику, но не поймёте, где именно рвётся цепочка. В ClickHouse удобно держать материализованные представления для быстрых срезов: по ASN, по subnet, по device fingerprint, по окнам 5–15 минут. Python поверх этого гоняет скоринг: если триггеров больше порога — статус «suspicious», дальше либо жёсткий reject, либо карантин.
Самая частая ошибка — пытаться ловить фрод одним if-ом в трекере. Ботнеты эволюционируют, но паттерны их поведения остаются прежними: повторяемость, синхронность, предсказуемые интервалы. Давайте поднимем логи и посмотрим правде в глаза: нормальная фильтрация — это не один фильтр, а конвейер с накоплением доказательств.
Начните с 5–7 сигналов, а затем измеряйте false positive на реальных лидах. Если правило нельзя объяснить по логам за 30 секунд, его надо переписывать.
Защита от фрода в рекламе
@ad_fraud_shield_arb
Собственная фильтрация трафика на ClickHouse и Python: схема без магии и лишних потерь
Этот пост опубликован в Telegram-канале Защита от фрода в рекламе. Подписаться можно по ссылке: @ad_fraud_shield_arb.