Собственная фильтрация трафика на ClickHouse и Python — без магии и самообмана
Давайте поднимем логи и посмотрим правде в глаза. Если у вас есть raw events, но нет жёсткой фильтрации, бюджет утекает в шум: дата-центры, повторные клики, пустые сессии, псевдоустройства. ClickHouse здесь нужен не для «аналитики», а как быстрый детектор аномалий на миллионах строк.
Схема рабочая и простая: Python собирает поток, нормализует user_agent, ip, referer, click_id, timestamp; ClickHouse хранит сырые события и агрегаты по окнам 1m/5m/1h. Дальше считаем признаки: частоту кликов, уникальность IP на user_id, время до конверсии, долю одинаковых UA, цепочки редиректов. Ботнеты эволюционируют, но паттерны их поведения остаются прежними.
Фильтры лучше делать в три слоя:
— синтаксический: битые заголовки, нулевые referer, невозможные комбинации;
— поведенческий: слишком ровные интервалы, сверхкороткие сессии, массовые повторы;
— сетевой: ASN, /24-пулы, ротация прокси, всплески из одного источника.
В Python не пытайтесь «угадывать» фрод по одной метрике: собирайте score из нескольких слабых сигналов и храните причину бана в отдельном поле.
Вот технический разбор того, как именно уплывает ваш рекламный бюджет: плохой трафик почти всегда оставляет след в распределениях. Если медиана времени до клика стабильна, а хвост внезапно уплощается — это не рост качества, это механика. В ClickHouse это ловится запросами по quantile, uniqExact и window functions без тяжёлых ETL.
Правило одно: сначала логируйте всё, потом режьте по объяснимым правилам. Иначе вы построите красивый фильтр, который будет блокировать живых пользователей и пропускать скрипты с одинаковым fingerprints.
Защита от фрода в рекламе
@ad_fraud_shield_arb
Собственная фильтрация трафика на ClickHouse и Python — без магии и самообмана
Этот пост опубликован в Telegram-канале Защита от фрода в рекламе. Подписаться можно по ссылке: @ad_fraud_shield_arb.