Dive into Time-Series Anomaly Detection: A Decade Review (link)📌 Обзорная статья, которая собрала ключевые наработки в области поиска аномалий за последние 10 лет. Так как по работе пришлось плотнее заняться временными рядами, думаю написать несколько постов по этой теме.
📈
Что такое временные ряды и аномалии? -
Временные ряды 𝑋(𝑡) это данные, в которых значения зависят от времени. Пример – курс валют
-
Поиск аномалий – это обнаружение отклонений, при которых временной ряд ведёт себя существенно иначе, чем ожидается. Это полезно для:
• Мониторинга и прогнозирования технического обслуживания оборудования.
• Выявления мошенничества (fraud detection).
• Обнаружения DDoS-атак через анализ сетевого трафика
🏷
Виды аномалий- Точечные выбросы (point anomalies) – одиночные аномальные значения
- Контекстные аномалии (contextual anomalies) – выбросы, которые кажутся аномальными только в определённом окне (например, аномально высокая температура зимой)
- Sequence-based аномалии – аномальные последовательности данных
📊
Типы и особенности временных рядов- Univariate vs Multivariate – одиночный или множественные временные ряды
- Тренды и сезонность
- Циклические флуктуации (Cyclical fluctuations)
- Шумы (Irregular variations)
🔬
Виды детекции аномалий- Supervised – обучающая выборка содержит стандартные и аномальные кейсы
- Unsupervised – обучение без разметки
- Semi-supervised – известны только стандартные временные ряды, без аномалий
- Self-supervised – используются дополнительные сигналы для обучения без явной разметки
В целом все методы стремятся спрогнозировать ожидаемое значение в данный момент и, если оно сильно отличается от фактического, то можно говорить об аномалии.
📌
Подходы к детекции аномалийКлассические методыИспользуются прогнозирующие модели для дальнейшего сравнения план/факт:
- Деревья решений и бустинг (например, LightGBM, XGBoost)
- Рекуррентные сети (RNN) с LSTM и трансформерами
- Методы SVM (вспомнили даже его 🫡)
- Скользящее среднее 😐
Нестандартные методы🔹 Reconstruction-based методы. Используют автоэнкодеры, где временной ряд:
1. Сжимается в латентное пространство энкодером
2. Восстанавливается декодером
3. Если получившиеся временной ряд сильно отличается от ожидаемого => аномалия
Популярные методы:
- Autoencoder-based (Buzz, EncDec-AD и т. д.).
- GANs и диффузионные сети (в статье почему-то забыты, хотя, например, в статье Time Series Anomaly Detection using Diffusion-based Models утверждают, что они SOTA - верим?)
🔹 Clustering-based методы. Как можно догадаться аномалии ищутся с помощью кластеризации:
- Distance-based (по расстоянию).
- Density-based (по плотности).
В статье упоминается 10+ примеров, но суть одна:
1. Временной ряд разбивается скользящим окном.
2. Каждый кусок сравнивается с остальными.
3. Используется кластеризация (например, DAG, деревья).
Популярные методы:
- Discord Detection using Matrix Profile (DAD).
- Adjacent Mean Difference (AMD).
- KNN – за счёт малого количества гиперпараметров оказался одним из лучших. Проверил на игрушечных кейсах (см. пример ниже)
📏
МетрикиЧасто используются адаптированные метрики классификации:
- ROC AUC и его вариации, есть свои адаптации под каждый тип аномалий
- Precision и Recall
- True Positive Rate (TPR) и другие
📊
Бенчмарки. Популярные датасеты:
- NAB, KDD21, TODS, TimeEval и другие.
Однако в статье не приводится, какие методы лучшие
🎯
Рекомендация. Лучше строить бейзлайны на скользящих средних и бустингах и только потом пробовать deep learning