Аномалії без розмітки: як виявити викиди серед 10 млн записів
Зазначимо: коли supervised-моделі з accuracy 99.9% не знаходять жодної аномалії — проблема в дисбалансі класів. Ми будуємо unsupervised-пайплайни на Isolation Forest, Autoencoder та One-Class SVM, які виявляють викиди без ручної розмітки. Такі моделі в 10 разів швидше навчаються, ніж semi-supervised, і не вимагають pre-labeled даних. Однак вибір правильного методу критичний: непідходящий алгоритм може давати до 80% хибних спрацьовувань. Саме тому ми починаємо кожен проєкт з глибокого аналізу структури даних та бізнес-контексту.
Unsupervised підходи дають детекцію без витрат на розмітку: достатньо одного інженера на налаштування. У фінтехі ми використовували Isolation Forest для первинного скринінгу транзакцій — latency p99 < 10 мс, а Autoencoder для фінальної верифікації. У підсумку detection rate зріс на 40% порівняно з rule-based системою, а false positive rate впав у 2 рази. Аномалії становлять менше 0.1% даних, тому accuracy не показова — ми орієнтуємося на Precision/Recall/F1 та AUCPR.
Як вибрати метод детекції аномалій?
| Доступні дані | Рекомендований підхід | Приклад часу навчання (100k записів) |
|---|---|---|
| Розмічені аномалії (< 1%) | Imbalanced supervised (LightGBM з scale_pos_weight) | 2-5 хвилин |
| Тільки нормальні дані | One-Class SVM / Autoencoder / Deep SVDD | 10-30 хвилин |
| Немає розмітки взагалі | Unsupervised: Isolation Forest, LOF | < 1 хвилини |
| Часові ряди з сезонністю | STL + residual detection | 5-10 хвилин |
| Послідовності подій | LSTM Autoencoder | 30-60 хвилин |
Коли використовувати Autoencoder замість Isolation Forest?
Autoencoder краще підходить для складних, багатовимірних даних, де аномалії проявляються в нелінійних залежностях. Наприклад, у кібербезпеці при детекції атак на основі логів подій — Isolation Forest показує низьку точність, а Autoencoder навчається за 1-2 години і дає AUCPR > 0.9. Для простих табличних даних з чіткими викидами Isolation Forest працює швидше та інтерпретованіше. Ми часто комбінуємо їх: первинний скринінг Isolation Forestом (low latency), потім верифікація Autoencoderом.
Як ми будуємо production-ready pipeline
На практиці ми комбінуємо кілька методів для підвищення стійкості. Наприклад, у проєкті для фінтех-клієнта з 50 млн транзакцій на день: Isolation Forest використовувався для первинної фільтрації (latency p99 < 10 мс), Autoencoder — для глибокої перевірки підозрілих записів. Результат: detection rate зріс на 40% порівняно з правилами, false positive rate знизився в 2 рази.
Реалізація ключових методів
Приклади коду для Isolation Forest та Autoencoder:
import numpy as np from sklearn.ensemble import IsolationForest from sklearn.metrics import average_precision_score def train_isolation_forest(X, contamination=0.01): """Базовий Isolation Forest з автоматичним підбором порогу""" model = IsolationForest(contamination=contamination, random_state=42) model.fit(X) scores = model.score_samples(X) # чим нижче, тим аномальніше return model, scores # Autoencoder на PyTorch import torch.nn as nn class AnomalyAutoencoder(nn.Module): def __init__(self, input_dim, latent_dim=32): super().__init__() self.encoder = nn.Sequential( nn.Linear(input_dim, 128), nn.ReLU(), nn.Linear(128, 64), nn.ReLU(), nn.Linear(64, latent_dim) ) self.decoder = nn.Sequential( nn.Linear(latent_dim, 64), nn.ReLU(), nn.Linear(64, 128), nn.ReLU(), nn.Linear(128, input_dim) ) def anomaly_score(self, x, reduction='mean'): with torch.no_grad(): z = self.encoder(x) x_rec = self.decoder(z) re = torch.mean((x - x_rec)**2, dim=1) return re Для production ми пакуємо модель у ONNX Runtime та розгортаємо на Triton Inference Server — це дає мінімальну затримку та високу пропускну здатність.
Оцінка та continuous learning
Правильні метрики для незбалансованого класу:
def evaluate_aupr(y_true, y_scores): return average_precision_score(y_true, y_scores) Порівняння метрик для датасету з 0.1% аномалій:
| Метрика | Типове значення | Чому важлива |
|---|---|---|
| Accuracy | 99.9% | Вводить в оману — модель не знаходить аномалій |
| AUCPR | 0.85-0.95 | Показує якість ранжування аномалій |
| Fβ-score | 0.75-0.90 | Враховує дисбаланс, налаштовується під бізнес-пріоритети |
Ми використовуємо MLflow для відстеження експериментів: параметри (contamination, latent_dim), метрики (AUCPR, FPR), артефакти (моделі, PR-криві). Feedback loop донавчає модель кожні 1000 міток від інженерів.
Приклад налаштування MLflow-експерименту
mlflow experiments create --experiment-name anomaly-detection mlflow run . -P model=isolation_forest -P contamination=0.01 Процес роботи над проєктом
- Аналітика — вивчення даних, виявлення сезонності та типів аномалій.
- Проєктування — вибір стеку та архітектури pipeline.
- Реалізація — навчання baseline та підбір гіперпараметрів.
- Тестування — валідація на історичних даних з A/B-тестом.
- Деплой — контейнеризація, моніторинг, CI/CD.
Що входить в роботу
- Навчена модель з документацією по метриках та порогах.
- REST API для інференсу (FastAPI або Triton).
- MLflow дашборд з історією експериментів.
- Feedback loop для донавчання за мітками операторів.
- Навчання вашої команди (2-3 години воркшопу).
- Технічна підтримка на 30 днів після деплою.
Терміни орієнтовно
Базова модель (Isolation Forest + оцінка) — від 2 до 3 тижнів. Повний pipeline з Autoencoder, feedback loop та production deployment — від 6 до 8 тижнів. Вартість розраховується індивідуально, виходячи з обсягу даних та необхідної точності. Окупність рішення настає протягом 2-3 місяців за рахунок скорочення часу на аналіз інцидентів.
Гарантуємо якість: всі моделі проходять валідацію на відкладеній вибірці. У нас більше 5 років досвіду в MLOps та 20+ реалізованих проєктів з детекції аномалій у фінтехі, телекомі та промисловості. Для оцінки вашого кейсу зв'яжіться з нами — оцінимо задачу за 2 дні та запропонуємо рішення під ключ. Отримайте консультацію з детекції аномалій на ваших даних.







