Какие методы обнаружения аномалий во временных рядах вы знаете?

«Какие методы обнаружения аномалий во временных рядах вы знаете?» — вопрос из категории Временные ряды, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

1. Статистические методы (пороговые)

  • Z-score (стандартизованная оценка): Помечает точки, отклоняющиеся более чем на N стандартных отклонений от среднего. Эффективен для стационарных рядов.
    from scipy import stats
    z_scores = np.abs(stats.zscore(series))
    anomalies = z_scores > 3
  • Межквартильный размах (IQR): Устойчив к выбросам. Аномалии — точки за пределами [Q1 - 1.5IQR, Q3 + 1.5IQR].

2. Методы на основе скользящего окна Сравнение текущего значения со статистиками (среднее, медиана) в окне и порогом, основанным на стандартном отклонении.

window_size = 24  # например, сутки для почасовых данных
rolling_mean = series.rolling(window=window_size).mean()
rolling_std = series.rolling(window=window_size).std()
threshold = rolling_mean + 3 * rolling_std
anomalies = series > threshold

3. Методы машинного обучения

  • Isolation Forest: Изолирует аномалии за счет случайного разделения данных, требуя меньше разделений.
    from sklearn.ensemble import IsolationForest
    model = IsolationForest(contamination=0.01, random_state=42)
    preds = model.fit_predict(series.values.reshape(-1, 1))
    anomalies = preds == -1
  • One-Class SVM: Строит границу, охватывающую "нормальные" данные.

4. Прогнозные модели (глубокое обучение)

  • LSTM/GRU сети: Обучаем модель предсказывать следующее значение. Высокая ошибка предсказания (MSE) указывает на аномалию.
  • Автоэнкодеры: Обучаем сеть восстанавливать исходный ряд. Высокая ошибка реконструкции сигнализирует об аномалии.

5. Специализированные библиотеки

  • Facebook Prophet: Модель прогнозирования со встроенным обнаружением выбросов.
  • PyOD: Обширная библиотека для обнаружения аномалий, включающая десятки алгоритмов.

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