Как боты рисуют “живое” поведение мыши и зачем это ломает антифрод
Давайте поднимем логи и посмотрим правде в глаза. Поведенческий фрод давно ушёл от тупых кликов: скрипт имитирует не просто переход, а траекторию, задержки, скролл, паузы на видимых зонах и даже микродрожание курсора. На стороне браузера это выглядит как «человек изучает страницу», а в сырых событиях — как слишком ровная статистика.
Признаки обычно лежат в данных, а не в эмоциях:
— движения курсора с одинаковой скоростью и предсказуемой кривизной;
— время между событиями без естественных всплесков;
— scroll depth растёт линейно, без возвратов и зависаний;
— смена вкладок и blur/focus отсутствуют или идут по шаблону;
— viewport и pointer events есть, а реальная работа страницы — нет.
Ботнеты эволюционируют, но паттерны их поведения остаются прежними. У живого пользователя есть шум: ускорения, промахи, нелогичные остановки, пересечения с интерактивными зонами. У фрода — оптимизированная симуляция без когнитивной нагрузки. Особенно палится связка: ровный mousemove + одинаковая длительность сессии + отсутствие взаимодействия с DOM-элементами, кроме целевого.
Вот технический разбор того, как именно уплывает ваш рекламный бюджет: если фильтр смотрит только на факт клика и общий session time, бот проходит. Нужен скоринг по последовательности событий: entropy по траектории, variance интервалов, depth of engagement, число возвратов к предыдущим блокам, несоответствие между visibility events и pointer activity. Чем меньше корреляция между этими рядами, тем выше шанс, что перед вами не человек, а аккуратно собранный симулятор.
Не верьте красивой анимации курсора. Смотрите на распределения, а не на одиночные сессии: фрод ломается там, где его поведение сравнивают с нормой по тысячам событий, а не по одному «похожему на пользователя» визиту.
Защита от фрода в рекламе
@ad_fraud_shield_arb
Как боты рисуют “живое” поведение мыши и зачем это ломает антифрод
Этот пост опубликован в Telegram-канале Защита от фрода в рекламе. Подписаться можно по ссылке: @ad_fraud_shield_arb.