Еще весной 2021 года мы оценивали примерно половину трафика через наш рекламный продукт как мошенничество.
Мы использовали сторонний инструмент для его фильтрации, но сами были недовольны этим решением — мы были вынуждены платить за его использование, но не могли повлиять на «волшебство», происходящее под капотом.
Взяв дело в свои руки, мы разобрались в деталях и разработали собственную систему фильтров.
После отключения партнёров, подавляющая часть трафика от которых принадлежала ботам, мы снизили долю входящего фрода до 10%.
И с помощью этой доли мы легко сможем бороться с ловушками в реальном времени.
Под катом мы не будем раскрывать все секреты, но расскажем о подходе.
Коротко о решении
Ранее мы писали, что разрабатываем собственную Ad Exchange, которая помогает перепродавать трафик.В состав продукта входит так называемый Менеджер кампаний — инструмент, который помогает рекламодателям настраивать кампании, устанавливая бюджеты и трафик, который должен поступать на их сайт из нашей рекламной сети.
В Campaign Manager мы работаем с push-рекламой — как классическими push-уведомлениями, отображаемыми операционной системой, так и внутристраничными push-уведомлениями, которые появляются на странице в браузере в iframe. Пользователь просматривает рекламу, кликает, если она его интересует, и попадает на наш бэкенд. Далее нам необходимо перенаправить его на сайт рекламодателя, но это не так просто.
Почему необходимо бороться с мошенничеством?
По идее, мы должны просто показать рекламу пользователю, запросившему рекламу (регистрируя клик через промежуточный редирект).Но на практике мы вынуждены оценивать качество трафика и отфильтровывать огромную долю мошенничества, чтобы деньги рекламодателей не пропадали зря.
Есть две большие проблемы с трафиком, которые снижают конверсию рекламодателей (а значит, и их мотивацию использовать наши инструменты):
- Трафик от ботов, которые никогда ничего не купят у рекламодателя.
Условно мы делим ботов на два типа:
- автоматизированные скрипты, созданные инструментами тестирования браузеров — phantomjs, selenium, puppeteer, драматург и другие.
С их помощью браузер сам «нажимает» определенные кнопки, имитируя просмотр пользователем рекламы;
- Код JavaScript, встроенный в законную страницу, которую просматривает пользователь (код создает впечатление, что пользователь загрузил рекламу и нажал на нее, перейдя на сайт рекламодателя).
- автоматизированные скрипты, созданные инструментами тестирования браузеров — phantomjs, selenium, puppeteer, драматург и другие.
- Трафик не в ценовом диапазоне.
Пуш-трафик стоит дорого, и за него платят рекламодатели.
Но бывает, что какой-то источник приводит к нам трафик с другого вида рекламы, чтобы взять больше денег с наших рекламодателей.
Мы отфильтровываем таких паблишеров, защищая интересы рекламодателя, несмотря на то, что по такому каналу к нам могут прийти вполне легитимные пользователи.
В конце концов, наш клиент должен получить то, за что заплатил.
На практике это означает низкий коэффициент конверсии и огромную дополнительную нагрузку на наши серверы.
Изначально мы использовали сторонний инструмент фильтрации, чтобы быстро выйти на рынок.
Но для нас это оказался плохой выбор по нескольким причинам:
- во время работы инструмент стучал на свои сервера,
- под капотом было какое-то неясное волшебство,
- это загрузка другой внешней зависимости,
- инструмент привел к значительной потере трафика,
- у него были ложные срабатывания,
- В процессе работы мы столкнулись с ошибками, которые на некоторое время отключили фильтрацию.
По сути, оно давало оценку, является ли пользователь ботом, но не более того.
Пытаясь найти лучшую альтернативу, мы пробовали разные решения, но подходящего не нашли.
В конце концов, нам пришлось погрузиться в эту тему самостоятельно.
Далее поговорим о том, как мы организовали фильтрацию.
Редиректы и промежуточные страницы
Мы оцениваем и фильтруем мошенничество с помощью промежуточной страницы, на которую попадает пользователь, запрашивающий рекламу.
На этой странице мы собираем параметры браузера и другие доступные данные — они отправляются на бэкенд, где мы решаем, показывать ли рекламу от нашего рекламодателя в ответ на этот запрос.
Тем, кому отказывают, показываем заглушку, остальным — настоящую рекламу.
Рекламодатель видит высокую конверсию и ценит инструмент за качественный трафик.
В ходе экспериментов мы реализовали несколько вариантов промежуточной страницы:
- Минимальный — страница, которая ничего не собирает и нормально не используется (т.е.
на нее отправляется 0% кликов).
Он был реализован, чтобы понять, как сам факт «лишнего» редиректа на промежуточную страницу влияет на процесс перехода пользователя на сайт рекламодателя.
Оказалось, что каждый редирект устраняет около 5-7% кликов.
Увы, при установке фильтрации мы вынуждены с этим мириться.
- Свет — страница, которая используется большую часть времени (на нее направляется 95% трафика).
На этой версии промежуточной страницы, собирающей только основные параметры, мы теряем около 16% пользователей.
Это чистые потери - тех, кто не преодолевает эту страницу по неизвестным нам причинам.
Это могут быть боты, которые не могут выполнять JavaScript, или люди с мобильными устройствами и плохим подключением к Интернету, которые просто не могут дождаться загрузки и обслуживания промежуточной страницы.
К этим потерям мы относимся спокойно, так как ни первое, ни второе не принесут рекламодателю никакой прибыли.
Как и при редиректе, они просто не ждут загрузки целевой страницы.
- Нормальный — страница, на которой мы собираем около 140 различных параметров — кто откуда пришел, какой браузер использовал, какую рекламу запрашивал и т. д. С ее помощью мы отслеживаем трафик от партнеров в режиме реального времени и выявляем мошенничество.
Раньше на этой странице у нас также была внешняя система обнаружения мошенничества.
С его помощью мы проверили некоторые наши гипотезы.
Сбор такого количества параметров и работа сторонней системы с точки зрения потери трафика не бесплатны; около 32% пользователей не одолевают эту страницу.
В обычном режиме мы используем Light. Нам нужно провести эксперимент с новой ловушкой – подключить Нормальный.
И в некоторых исключительных ситуациях мы возвращаем Minimal.
Как работает фильтрация
Мы фильтруем входящий трафик с помощью разработанных ловушек, оценивающих один или несколько собираемых параметров.Для каждого вида мошенничества мы постепенно разрабатываем свои ловушки – отслеживаем параметры, строим гипотезы, тестируем их на небольшой части пользователей и реализуем, если тест прошел успешно – если фильтр по этому правилу действительно улучшает качество трафик.
Каждая ловушка позволяет отсекать определенную долю мошенничества, но ее работа «небесплатна» с точки зрения производительности.
Поэтому мы отдаем приоритет тем, у кого более высокая эффективность.
Выявить все ловушки — значит дать ботам инструмент для обхода нашей антифрод-системы.
Но мы можем привести несколько примеров, которые прояснят подход.
Мало времени для нажатия
Мы отслеживаем время, которое проходит между действиями пользователя с одним и тем же IP-адресом и UserAgent. Легальные пользователи не могут при незначительной разнице во времени нажать на несколько рекламных объявлений или нажать на рекламу сразу после загрузки значка (время между загрузкой значка и кликом не должно быть коротким).Если ловушка «срабатывает» на определенной доле трафика от партнера, это повод обратить на него внимание.
Ловушка высокого CTR
CTR (кликабельность) — известный параметр анализа эффективности рекламных кампаний, равный отношению количества кликов к количеству показов.Как правило, он измеряется в процентах, отражая, какой процент показов объявления привел к кликам и переходу на сайт рекламодателя.
Измеряем эту величину и сравниваем ее с ранее зафиксированными.
Такая ловушка имеет смысл не для конкретного посетителя, а для источника трафика.
Обычно CTR невысокий, не более нескольких процентов.
Слишком высокое значение является признаком мошенничества.
Ловушка по размеру окна
Логика подсказывает, что окно с документом для легального пользователя должно быть адекватного размера.Мы отфильтровываем весь трафик, у которого window.innerWidth меньше 200 и window.innerHeight меньше 100. Это очень скромно даже для современных мобильных телефонов; у ботов эти параметры обычно выставлены на 0. Любопытно, что в этом правиле мы тоже столкнулись с ошибками — когда параметры равны 0, но пользователь заходит на сайт рекламодателя и совершает целевые действия.
Позже мы нашли объяснение — появилось новое поколение ботов, которые периодически посещают сайт рекламодателя, чтобы инструменты ML их не обнаружили.
Нам нужно их запретить, но велика вероятность ложных срабатываний на законных пользователях.
Поэтому у нашей команды пока нет четкого мнения по поводу этого правила — мы продолжаем эксперименты.
Ловушка для предметов
Большинство пользователей используют браузер Chrome, поэтому мы можем позволить себе устанавливать ловушки для конкретного браузера.И этот пример – один из них.
Легальный пользователь должен иметь в своем окне объект window.chrome (то есть он не должен быть неопределенным).
При этом многие боты скрывают браузер и по каким-то причинам удаляют этот объект. Так мы фильтруем трафик, если в ответ на запрос этого объекта получаем undefined. Ловушка упоминается здесь в качестве примера, поскольку в настоящее время она отключена (она начала давать много ложных срабатываний в Firefox).
Не все правила поступают в производство.
Например, мы предполагали, что для легального пользователя должен совпадать User Agent запроса, клик и иконка той картинки, которая ему в итоге показывается.
Мы установили такую ловушку, но получили слишком много ложных срабатываний.
Оказалось, что многие партнеры допускают различные вольности при передаче строк User Agent через параметры запросов.
Контроль качества фильтрации
Мы достаточно лояльно подходим к фильтрации — фильтруем трафик только в том случае, если уверены на 99%, что это мошенничество.Выше мы уже упоминали, что прежде чем вводить очередную ловушку, мы проверяем, насколько хорошо она работает. Вот как это происходит. Самый простой подход — посмотреть Clickhouse и оценить глазами параметры отфильтрованного трафика.
В ручном режиме заметны различные отклонения трафика, что дает идеи для новых ловушек.
Также мы можем посмотреть на качество трафика со стороны рекламодателя — оценить конверсию, когда пользователь нажимает на рекламу и совершает определенные действия на сайте.
Когда целевое действие выполнено, рекламодатель уведомляет нас об этом.
Мы уже собрали достаточно данных и можем проанализировать, какой трафик не приносит конверсий.
Зачастую это указывает на то, что трафик генерируют боты.
И это помогает нам искать новые ловушки или проверять, насколько эффективно работают старые.
Мы можем анализировать не только запросы одного пользователя, но и весь трафик, поступающий от конкретного партнера.
И мы действительно столкнулись с тем, что некоторые издатели в основном получают мошенничество.
Включаем такие сайты в черный список и более детально разбираемся в происходящем.
Для анализа доли трафика, выделяемой на определенные параметры, мы используем CatBoost. Это достаточно эффективный классификатор от Яндекса, который хорошо работает с категориальными признаками.
Мы кидаем в него данные о трафике, а на выходе получаем список значимых параметров, на основе которых можно создавать новые правила.
Кроме того, CatBoost умеет создавать матрицу значимости признаков, поэтому мы получаем из нее много интересного (в частности, какие свойства этой доли трафика выявляют в ней мошенничество).
Но помимо этого никакой автоматической работы нет – вопросы с партнерами решаются на уровне руководства.
И у нас были прецеденты отключения партнёров, которые поставляли много мусорного трафика, особенно в начале.
После такой «чистки» списка партнеров доля мошенничества снизилась с 50% до 10%, что мы и ловим с помощью правил.
Недавно мы одновременно пошли по другому пути — стали смотреть на инструменты автоматизации, с помощью которых создаются боты.
Например, анализируя исходный код продукта и его плагинов, мы обнаружили в Puppeteer несколько маркеров.
Проблема в том, что инструмент недавно подвергся полному рефакторингу и появились пул-реквесты, исправляющие найденные нами «дыры» в скриптах бота.
Теперь нам предстоит изучить новую версию системы, чтобы понять, как ее поймать.
Точно так же мы изучаем новые версии браузеров — в них появляются новые свойства, на основании которых можно делать выводы о качестве трафика.
В целом борьба с мошенничеством оказалась интересной задачей, которая постоянно вызывает новые вопросы.
P.S. Мы публикуем наши статьи на нескольких сайтах Рунета.
Подпишитесь на нашу страницу по адресу ВК или в Telegram-канал узнать обо всех публикациях и других новостях Максилекта.
Теги: #adtech #антифрод #антифрод-фильтр #Высокая эффективность #Реклама в СМИ #Контекстная реклама
-
Шпаргалка По Собеседованию В .Net
19 Oct, 24 -
Как Программист Искал Демократию
19 Oct, 24 -
Микро Мировая Война
19 Oct, 24 -
Dvb-S2 На Ваших Пальцах
19 Oct, 24