Определение ботов на сайте с помощью нейронных сетей

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Пару лет назад, как и многие другие владельцы сайтов в рунете, я столкнулся с резким ростом посетителей из социальных сетей. Поначалу это радовало, пока дело не дошло до детального изучения поведения таких “пользователей” - оказалось что это боты. Мало того, они еще и сильно портили поведенческие факторы, которые критически важны для хорошего ранжирования в Яндексе, да и в Гугле. 

Изучая ТГ каналы, посвященным накрутке поведенческих факторов (а большинство ботов используется для этого), пришла в голову мысль, что наверняка же разработчики ботов где-то ошибаются, где-то упираются в невозможность реализовать полноценную эмуляцию параметров настоящих браузеров и поведение реальных посетителей. На основании двух этих гипотез и возникла идея создать 2 нейросети. Первая из них должна определять бота по многочисленным параметрам браузера. А вторая - по поведению на сайте - по тому, как пользователь скроллит, кликает и совершает другие действия.

Сбор базы

Первое, что нужно для обучения нейронной сети - достаточное количество обучающих примеров - визитов, о которых мы достоверно знаем, что это боты и визитов, о которых точно известно, что это реальные люди.  Для такого отбора было использовано три параметра:

  1. Скоринг Recapcha V3.

  2. Залогинен ли посетитель в сервисах Google, Yandex, VK.

  3. Уникальность Canvas Hash.

Суть  последнего параметра в том, что на элементе HTML “холст” рисуется картинка, далее вычисляется md5 хэш этого изображения. В зависимости от операционной системы, ее версии, версии браузера, устройства, изображение чуть отличается и хэш получается разным. Боты, как правило, накладывают случайный шум на изображение, чтобы затруднить их детектирование, и в результате у них хэш получается уникальным. У реальных людей уникальных хэшей не бывает. 

Итак, реальный посетитель, если:

  1. Скоринг  Recapcha V3 >=0.9.

  2. Залогинен в Яндексе и в одном из: Google либо VK.

  3. Canvas Hash неуникальный.

Бот, если:

  1. Скоринг  Recapcha V3<=0.3

  2. Нигде не залогинен, либо залогинен только в Яндекс. Боты для накрутки поведенческих факторов очень часто ходят под профилем Яндекса.

  3. Уникальный Canvas Hash.

Данные брались с трех информационных сайтов за период в 1 месяц. В базу попало чуть больше сорока тысяч визитов, 75% из которых это боты и 25% реальные люди. Что именно собиралось будет описано далее.

Определение бота по параметрам браузера

Хотя боты и работают на браузерных движках, но это далеко не полноценный Google Chrome, за который они себя хотят выдать. Многие параметры им приходится эмулировать, чтобы выглядеть как настоящий пользовательский браузер. Вот и попробуем обучить нейронную сеть находить несоответствия эмулированных параметров реальным. Для этого соберем максимальное количество информации о браузере, а именно:

  • ОС, версия ОС, название браузера, версия браузера, модель гаджета, если есть возможность ее получить.

  • Параметры соединения - тип сети, скорость.

  • Разрешение экрана, размер окна отображения, есть ли полоса прокрутки и другие параметры, связанные с отображением.

  • Параметры webGL (модель видеокарты, размер памяти и т.п.).

  • Виды медиа контента, который может воспроизвести браузер.

  • Какие шрифты поддерживает браузер (анализируются 300 самых распространенных шрифтов).

  • Параметры WebRTC.

Получилось несколько десятков параметров

Следующее, что нужно решить - какую архитектуру нейронной сети использовать. Поскольку база несколько не сбалансирована, первое, что пришло в голову - попробовать автокодировщик. Обучить его на ботах(их 75%), а выбросы трактовать как реальных людей. Была использована следующая архитектура:

Результат получился такой:

Суммарная ошибка великовата. Надо попробовать обычный классифиукатор на полносвязанных слоях. Была подобрана следующая архитектура:

Что получилось:

Результат отличный! И для отсеивания большинства ботов, которые используются для накрутки ПФ, такая нейронка подходит.

Но что если бюджет позволяет использовать ботов не просто на браузерном движке, а на реальном Google Chrome? Это требует значительно больше ресурсов, но технически легко реализуемо. Для такого случая эта нейронная сеть не подойдет. Но можно попробовать проанализировать поведение бота и сравнить с поведением реальных людей.

Определение бота по поведению на сайте

Хорошие боты эмулируют поведение реального человека - они кликают, скроллят, двигают мышкой по траектории, похожей на человеческую и т.п. Но наверняка где-то ошибаются - может быть у них немного другое распределение событий, другие задержки, места клика и т.д. Попробуем собрать как можно больше данных о поведении посетителей. Для этого проанализируем следующие события:

  1. Движение мыши.

  2. Прокрутка колесика.

  3. Нажатие на сенсорный экран.

  4. Прокрутка на странице.

Для каждого события соберем следующие параметры:

  1. Длительность.

  2. Изменения по оси X и Y.

  3. Скорость изменения по оси X и Y.

  4. Число элементарных событий, которые получил браузер.

События укладываются во временной ряд, а значит имеет смысл использовать одномерные сверточные сети. Оптимальной получилась такая архитектура:

А результат следующий:

Результат тоже вполне хороший. К минусам можно отнести то, что требуется не меньше 20-ти секунд нахождения на странице, чтобы произошло достаточное количество действий. Поэтому нельзя применять для фильтрации траффика на этапе загрузки.

Вывод

Плюсы и минусы каждого метода приведены на картинке:

Что дальше

На данный момент функционал реализован в виде Wordpress плагина и работает в тестовом режиме на одном из сайтов. Его код можно посмотреть здесь.

В дальнейшем планируется все довести до "ума" и запустить в виде сервиса.

Источник: https://habr.com/ru/post/686572/


Интересные статьи

Интересные статьи

В этом руководстве мы научимся устанавливать PostgreSQL с помощью Docker. Обычно мы запускаем контейнер Docker, используя публичный образ Docker, или берём предварительно настроенные Docker-образы с...
Создание ботов - довольно заезжанная тема, но все уроки, статьи и различного рода документация дают информацию только о том, как построить одноуровневого бота без возможности создания древа из различн...
В этой статье мы расскажем, как промышленный интернет вещей и искусственный интеллект (Industrial IoT + AI) позволяют автоматизировать традиционный бизнес — торговлю, сельское хозяйство, деревообработ...
Разработчик из Facebook Джордан Элдридж (Jordan Eldredge) создал виртуальный музей Winamp в память о любимом плеере. На площадке можно бесконечно скроллить темы и ностальгировать по уше...
(с) Каждый год около тысячи команд со всей Японии вступают в ожесточенное сражение на турнире роботов. В этом состязании вы не увидите бензопил, факелов и электрических разрядов ...