Anomaly detection на собеседовании Data Scientist

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.

Зачем разбирать на собесе

Anomaly detection — fraud, network security, equipment monitoring. На собесе DS: «отличие методов», «когда unsupervised, когда supervised».

Виды аномалий

Point anomaly. Одна точка отличается (transaction $1M на счёте с обычными $50).

Contextual anomaly. Нормальна сама по себе, но в context — нет (high temperature in winter).

Collective anomaly. Ничего необычного в одной точке, но pattern строки нет (DDoS — все запросы валидны, но слишком много).

Detection mode:

  • Unsupervised. Без labels (большинство случаев).
  • Supervised. Labeled fraud / non-fraud.
  • Semi-supervised. Только normal labeled, найти отклонения.

Statistical methods

Z-score. (x - mean) / std. |z| > 3 → anomaly.

z = (x - x.mean()) / x.std()
anomalies = abs(z) > 3

IQR (interquartile range). Outlier если < Q1 - 1.5*IQR or > Q3 + 1.5*IQR.

Mahalanobis distance. Учитывает covariance. Multivariate.

Простые, но:

  • Только univariate (z-score) или линейные (Mahalanobis).
  • Чувствительны к outliers сами.
  • Предполагают распределение.

Isolation Forest

Идея (Liu 2008). Аномалии «изолируются быстрее» random splits.

Алгоритм:

  1. Случайно выбираем feature.
  2. Случайно выбираем split value.
  3. Повторяем — строим tree.
  4. Anomaly score = средняя длина пути до листа.

Аномалии быстрее изолируются (короткий путь) → low score.

from sklearn.ensemble import IsolationForest
clf = IsolationForest(contamination=0.05).fit(X)
preds = clf.predict(X)  # -1 anomaly, 1 normal

Свойства:

  • Не предполагает distribution.
  • Линейная сложность по N.
  • Работает в high dimensions.
  • Стандарт unsupervised.

LOF

Local Outlier Factor. Density-based — точки с низкой плотностью соседей — аномалии.

from sklearn.neighbors import LocalOutlierFactor
clf = LocalOutlierFactor(n_neighbors=20)
preds = clf.fit_predict(X)

Особенности:

  • Local — учитывает плотность вокруг точки.
  • Подходит для случаев с разной плотностью кластеров.
  • Сложность O(N²) — медленный на больших данных.
Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Autoencoders

DL подход. Тренируем autoencoder на normal data → не reconstructs anomalies хорошо.

encoded = encoder(x)
decoded = decoder(encoded)
reconstruction_error = mse(x, decoded)
anomaly = reconstruction_error > threshold

Variants:

  • Denoising AE — добавляем шум к input.
  • VAE — probabilistic.
  • Sequential AE для time series.

Подходит для high-dimensional (images, sequences). Требует обучения, дольше Isolation Forest.

Метрики оценки

При наличии labels.

  • Precision / Recall / F1.
  • ROC-AUC, PR-AUC (PR обычно полезнее на сильно дисбалансированных).
  • Precision @ K (если capacity manual review = K).

Без labels. Сложно. Manual review топ-N кандидатов. Сравнение с baseline.

Частые ошибки

Train на mixed normal+anomaly. Модель учится считать аномалии «нормой». Train только на normal где возможно.

Threshold выбран случайно. Tune на validation — балансируем precision/recall.

Univariate когда multivariate. Каждая фича в norma, но combination — anomaly. Z-score не словит.

Игнорировать context. Friday night transaction differ from Monday. Time / context features важны.

Без monitoring drift. Normal distribution меняется со временем — пороги устаревают.

Связанные темы

FAQ

Если есть labels — supervised лучше?

Часто да (XGBoost / LightGBM на binary fraud). Но labels часто incomplete — нужно гибрид.

Это официальная информация?

Нет. Статья основана на классических работах (Liu 2008 IF, Breunig 2000 LOF) и документации scikit-learn.


Тренируйте Data Science — откройте тренажёр с 1500+ вопросами для собесов.