Аномалии без разметки: как выявить выбросы среди 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 дня и предложим решение под ключ. Получите консультацию по детекции аномалий на ваших данных.







