Вопрос или проблема
Мои данные – это статистика использования/игры для игроков конкретной игры. Одна точка данных для пользователя – это агрегированная статистика за одну неделю.
Цель заключается в следующем:
обнаружить, когда аккаунт игрока был украден/взломан/что-то пошло не так.
Так что моя идея заключается в следующем:
для каждого игрока иметь точки данных, каждая из которых представляет одну неделю, а затем проверить, является ли последняя неделя выбросом в кластере. Если да – что-то не так с аккаунтом.
Я хорошо знаком с кластеризацией и такими вещами, как автоэнкодеры, но это кажется не очень подходящим для моей проблемы, потому что:
- У меня есть немного образцов для каждого пользователя, т.е. мы можем посмотреть на 25 недель назад, так что только 25 образцов того, что является ‘правильным‘.
- Мне не нужно обнаружение выбросов для всех данных. Мне нужно определить, является ли последний образец выбросом относительно других точек данных.
Мой вопрос:
какой алгоритм/метод будет подходить для такой ситуации?
В настоящее время у меня есть две идеи:
- Тест Q Диксона.
- Просто измерить, является ли последний образец дальше от центра кластера, чем все другие образцы.
Они могут сработать, но обе идеи звучат немного «вспомогательно». Мне кажется, что должно быть более элегантное решение для такой относительно простой проблемы, но мой разум просто пуст. Какой подход вы бы порекомендовали?
Для меня это звучит как обнаружение аномалий временных рядов. Вы можете ознакомиться с примером здесь: https://towardsdatascience.com/time-series-anomaly-detection-with-pycaret-706a6e2b2427.
В Pycaret есть более 10 алгоритмов обнаружения аномалий (обертка библиотеки pyod). Вам следует использовать несколько из них, поиграть с долей (порогом) и проверить, какая комбинация работает лучше для ваших данных. В случае, если у вас есть коллекция аномалий, вы можете использовать классификацию (если у вас есть несколько входов в вашем наборе данных, которые могут описать аномалии, или если можно создать входные данные самостоятельно).
Вы можете рассмотреть возможность использования модели временных рядов Холта-Уинтерса. Она поддерживает определение тенденций (как вы описываете) и, в свою очередь, помогает интерпретировать сезонный компонент. Она является частью пакета statsmodels
.
Отлично работает при сравнении временных рядов так называемый “динамический временной варп” (вы можете использовать вывод этой процедуры для кластеризации ваших данных). Это стоит посмотреть.
Что также кажется хорошо работающим – это автоэнкодеры (также GAN). Основная идея заключается в том, чтобы обучить автоэнкодер и использовать функцию потерь в качестве оценки аномалии.
Кластеры могут работать хорошо, но вам нужно выбрать один метод кластеризации, который подходит вашим данным. Это может быть сложно с точки зрения обнаружения аномалий, потому что вы, возможно, не знаете, как ваши данные будут кластеризоваться. Если ваши данные и аномалии кластеризуются в шарах, вы можете использовать евклидово расстояние, применяя K-Means или более общие метрики расстояния, применяя K-Medoid Clusters. Вы можете посмотреть здесь, какие есть типы кластеров и как они могут проваливаться.
Ответ или решение
Детектирование аномалий в режиме реального времени
Ваша задача по определению аномалий в статистике использования игроков в игре весьма актуальна, особенно в свете потенциальных угроз безопасности, таких как взлом аккаунтов. Вы упомянули, что у вас есть 25 недель данных о каждом пользователе, и задача заключается в том, чтобы проверить, является ли последняя неделя аномальной по сравнению с предыдущими данными. Я предлагаю рассмотреть несколько подходов, которые могут оказаться полезными для этой конкретной задачи:
1. Устойчивые статистические тесты
Один из простых и эффективных подходов к детектированию аномалий — это использование статистических тестов, таких как тест Диксона. Этот метод позволяет определить, является ли наблюдаемая точка (в вашем случае – данные последней недели) статистически значимой аномалией по сравнению с ранее собранными данными, однако он имеет свои ограничения, особенно при малом объеме выборки.
2. Метод удаления выбросов
Другим простым методом является оценка расстояния последнего образца от центра кластера, используя, например, среднее или медиану. Если данное расстояние превышает определенный порог, можно считать его аномалией. Этот подход, хоть и интуитивно понятный, требует установки адекватного порога и может давать ложные срабатывания при наличии незначительных колебаний.
3. Модели временных рядов
Так как у вас есть временные метки, использование методов анализа временных рядов может быть весьма продуктивным. Рассмотрите возможность применения модели Хольта-Уинтерса, которая позволяет учитывать тренды и сезонные колебания. Это даст возможность лучше понять нормальные колебания данных и выявить отклонения.
4. Автоэнкодеры и GAN
Автоэнкодеры могут быть использованы для извлечения более сложных признаков и оценки анормалий. Обучите автоэнкодер на ваших данных, а затем рассматривайте ошибку восстановления как показатель аномалии. Генеративные состязательные сети (GAN) также могут быть полезны для создания синтетических примеров нормальных и аномальных данных, что позволит улучшить классификацию.
5. Алгоритмы классификации и ансамбли
Также возможно использовать ансамблевые методы, такие как случайные леса или бустинг, если есть доступ к дополнительной информации, которая может помочь дифференцировать аномалии. Это может включать в себя информацию о самой игре, например, изменение часовой активности игроков.
6. Поиск аномалий с помощью PyCaret
Использование библиотек, таких как PyCaret, может значительно упростить процесс. Она включает в себя множество алгоритмов детекции аномалий и позволяет экспериментировать с различными методами. Это может помочь вам определить, какие алгоритмы работают лучше для вашей конкретной задачи, с учетом особенностей данных.
Заключение
Каждый из предложенных подходов имеет свои преимущества и недостатки. Я рекомендую рассмотреть комбинированный подход, который будет включать несколько методов. Используйте статистические тесты для быстрой предварительной оценки, а затем применяйте более сложные модели для глубокого анализа. Это даст возможность вам повысить точность детекции аномалий и обеспечить безопасность аккаунтов игроков.