Классификация последовательностей поведения в социальных сетях для поиска учетных записей ботов

Идея этого поста взята из статьи Social Fingerprinting: обнаружение групп спам-ботов с помощью поведенческого моделирования на основе ДНК.

Используя методы, аналогичные секвенированию ДНК с использованием алфавита G, C, A и T, мы можем аналогичным образом определить алфавит для различных событий, создаваемых пользователем, например. «загрузить изображение» = A, «посетить страницу профиля» = B и так далее. Если у нас есть инфраструктура для сбора этой временной последовательности событий (что сегодня довольно распространено, обычно с Apache Kafka), мы можем сравнить эту строковую последовательность событий среди всех пользователей и найти кластеры с различным поведением. Если мы исторически идентифицировали автоматических ботов на сайте, мы можем определить, к какому кластеру они принадлежат, и для будущих учетных записей предсказать, насколько вероятно, что новая учетная запись является ботом или нет, на основе сходства кластеров.

В этом примере предположим, что мы собираем следующие типы событий в социальной сети:

  • Пользователь загрузил изображение (имя события ‘user.image.upload’),
  • Пользователь, зарегистрированный на сайте (имя события «user.register»),
  • Пользователь прокомментировал обновление статуса другого пользователя (название события ‘user.feed.comment’),
  • Пользователь оценил загруженное другим пользователем изображение (название события «user.rate»),
  • Пользователь отправляет запрос на добавление в друзья другому пользователю (название события «user.friend.request»).

Разумным выбором схемы при сборе событий (особенно в социальных доменах) является формат Потоки активности (полезнее иметь уже задокументированный стандарт, чем определять свой). Для простоты мы будем использовать версию 1.0 (намного более строгую, но для иллюстрации это не имеет значения). Запрос может выглядеть примерно так:

{
    "id": "<server-generated UUID>",
    "published": "<server-generated timestamp, RFC3339 format>",
    "object": {
        "id": "<id of the image that was rated>"
    },
    "verb": "image.rate",
    "actor": {
        "id": "<ID of the user who rated the image>"\
    }
}

Создадим алфавит из вышеперечисленных событий:

  • user.image.upload = a,
  • user.register = b
  • user.feed.comment = c,
  • user.rate = d,
  • user.friend.request = e,
  • user.login = f.

Поток этих событий от нового зарегистрированного пользователя может выглядеть примерно так, преобразованный в наш алфавит:

  • bdddfcacfaaffde

Вышеупомянутая «последовательность» вполне типична в нашем случае для обычной последовательности событий для вновь созданной учетной записи. С другой стороны, мы наблюдали обычную последовательность из спам-аккаунта, которая в большинстве случаев выглядит примерно так:

  • baaacdadadadada

С некоторыми вариациями обычно между учетными записями ботов обнаруживалась более длинная общая последовательность, чем между учетными записями людей. Нахождение самой длинной общей подпоследовательности (LCS) является NP-сложной задачей, но при ограничении количества сравниваемых примеров и длины сравниваемых последовательностей решение становится жизнеспособным.

Сравнивая случайную учетную запись бота с другой случайной учетной записью бота, а затем с двумя другими учетными записями ботов, затем с тремя и так далее, мы можем построить график зависимости LCS от количества сравниваемых учетных записей. Для наших данных, выбирая случайную учетную запись бота от 2 до 30 учетных записей других ботов без замены, усредняя более 100 прогонов и сравнивая полученный график с эквивалентным сравнением учетных записей людей, мы получили следующий график:

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

Результат весьма многообещающий:

f1 score: 0.945750452079566

Может помочь игра с другими алгоритмами и ансамблями или настройка типа событий, которые вы включаете в свой алфавит, изменение длины последовательности для ожидания, включение пола и возраста в качестве признаков и т. д.

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