Собственная фильтрация трафика: как связать ClickHouse и Python без потери сигналов
Давайте поднимем логи и посмотрим правде в глаза. Если у вас фильтр живёт в Excel и ручных выгрузках, вы уже проигрываете: ботнеты эволюционируют, но паттерны их поведения остаются прежними — одинаковые UA, всплески по ASN, нереалистичная склейка кликов и конверсий.
Схема рабочая и приземлённая: Python принимает сырой поток событий, нормализует IP, user_agent, click_id, referrer, пишет всё в ClickHouse. Дальше в CH строятся окна по 1–5 минут: uniqExact по click_id, count() по повторным заходам, latency между кликом и постбеком, доля пустых рефереров, распределение по подсетям /24. Не ищите «магический антифрод» — ищите аномалии, которые ломают статистику.
Фильтр должен быть не бинарным, а скоринговым: 0–30 — пропуск, 31–70 — карантин, выше — резка. В Python удобно держать правила как набор функций: совпадение fingerprints, слишком ровный интервал между запросами, невозможная география по IP и Accept-Language, повторяющиеся цепочки редиректов. ClickHouse тут нужен не для красоты, а для быстрой агрегации и дешёвого ретроспективного пересчёта подозрительных сегментов.
SELECT
subnet,
count() AS hits,
uniqExact(click_id) AS u,
avg(postback_delay) AS d
FROM traffic
GROUP BY subnet
HAVING hits > 50 AND u = 1
Финальный совет простой: сначала собирайте сырые события, потом стройте скоринг, и только затем режьте трафик. Иначе вы будете фильтровать не ботов, а собственную слепоту.
Защита от фрода в рекламе
@ad_fraud_shield_arb
Собственная фильтрация трафика: как связать ClickHouse и Python без потери сигналов
Этот пост опубликован в Telegram-канале Защита от фрода в рекламе. Подписаться можно по ссылке: @ad_fraud_shield_arb.