Anomaly detection на собеседовании Data Scientist
Карьерник — 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) > 3IQR (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.
Алгоритм:
- Случайно выбираем feature.
- Случайно выбираем split value.
- Повторяем — строим tree.
- 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²) — медленный на больших данных.
Autoencoders
DL подход. Тренируем autoencoder на normal data → не reconstructs anomalies хорошо.
encoded = encoder(x)
decoded = decoder(encoded)
reconstruction_error = mse(x, decoded)
anomaly = reconstruction_error > thresholdVariants:
- 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 меняется со временем — пороги устаревают.
Связанные темы
- Class imbalance на собесе DS
- Clustering k-means DBSCAN на собесе DS
- ROC-AUC vs PR-AUC на собесе DS
- Data drift на собесе DS
- Подготовка к собесу Data Scientist
FAQ
Если есть labels — supervised лучше?
Часто да (XGBoost / LightGBM на binary fraud). Но labels часто incomplete — нужно гибрид.
Это официальная информация?
Нет. Статья основана на классических работах (Liu 2008 IF, Breunig 2000 LOF) и документации scikit-learn.
Тренируйте Data Science — откройте тренажёр с 1500+ вопросами для собесов.