Обучение модели детекции аномалий на данных без разметки

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1564 услуг
Обучение модели детекции аномалий на данных без разметки
Средний
~5 дней
Часто задаваемые вопросы

Направления AI-разработки

Этапы разработки AI-решения

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1348
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1247
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    949
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1183
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    642
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    921

Аномалии без разметки: как выявить выбросы среди 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

Процесс работы над проектом

  1. Аналитика — изучение данных, выявление сезонности и типов аномалий.
  2. Проектирование — выбор стека и архитектуры pipeline.
  3. Реализация — обучение baseline и подбор гиперпараметров.
  4. Тестирование — валидация на исторических данных с A/B-тестом.
  5. Деплой — контейнеризация, мониторинг, 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 дня и предложим решение под ключ. Получите консультацию по детекции аномалий на ваших данных.

Детекция аномалий: автоэнкодеры, Isolation Forest, PyOD

Мы сталкиваемся с этой болью постоянно: мониторинг сервера показывает CPU 85%, память 91% — это норма в час пик или начало атаки? Классификатор здесь не поможет: аномалии по определению редки, разнообразны и заранее не размечены. Supervised learning требует примеров аномалий в обучающей выборке — а значит, не работает для того, о чём вы ещё не знаете. Наш опыт показывает: без unsupervised-подхода детекция превращается в гадание.

Почему детекция аномалий требует unsupervised подхода?

Главная проблема — отсутствие разметки и дисбаланс классов в экстремальной форме. Фрод-транзакции составляют 0.01–0.1% от общего объёма. Производственный дефект — 0.5–3%. При таком соотношении даже наивный классификатор «всё нормально» даст accuracy 99.9% и precision/recall для аномального класса, близкие к нулю. Supervised-модели здесь бессильны.

Вторая проблема — «нормальность» всегда контекстна. Нормально ли, что пользователь логинится в 3 часа ночи? Зависит от его истории и временной зоны. Нормально ли вибрация подшипника 2.3 мм/с? Зависит от режима работы станка и его возраста. Поэтому мы встраиваем контекст в модель через feature engineering и временные окна.

Третья — оценка качества. Нет стандартного test set, AUC-ROC считается только если есть хотя бы немного размеченных примеров. На полностью неразмеченных данных — только domain expert validation и косвенные метрики.

Как отличить аномалию от шума в реальном времени?

Ответ — адаптивные пороги и мониторинг статистик модели. В разделе кейса покажем, как это работает.

Методы и инструменты

Метод Тип данных Скорость обучения Типичное применение
Isolation Forest Табличные, категориальные Высокая Baseline для первых гипотез
Autoencoder Изображения, временные ряды, логи Средняя Неструктурированные данные
LSTM-AE Многомерные временные ряды Низкая Промышленная телеметрия
PyOD (ансамбль) Табличные Высокая Быстрое сравнение 40+ методов

Isolation Forest — стандартный baseline для табличных данных. Идея: аномалии изолируются быстрее при случайном разбиении пространства признаков. Работает хорошо при contamination 0.01–0.1, устойчив к масштабу признаков, не требует нормализации. Реализация в sklearn.ensemble.IsolationForest.

Типичная ошибка: ставить contamination='auto' без понимания данных. Auto-режим предполагает порог -0.5, что не всегда соответствует реальной доле аномалий. Лучше: оцените ожидаемый процент аномалий через domain knowledge и задайте явно. Мы гарантируем подбор contamination под ваш кейс.

PyOD (Python Outlier Detection) — библиотека с 40+ алгоритмами под единым API. Включает: OCSVM, LOF, COPOD, ECOD, DeepSVDD, AutoEncoder. Удобно для быстрого сравнения методов на одних данных.

Автоэнкодеры — основной метод для неструктурированных данных (временные ряды, изображения, логи). Идея: обучаем сеть восстанавливать нормальные данные, аномалии дают высокую ошибку реконструкции. Порог аномальности — 95-й или 99-й процентиль ошибки на validation set из нормальных данных.

Практическая проблема автоэнкодеров: переобучение на «нормальных» паттернах, которые всё равно встречаются редко. Если в train set есть хоть несколько аномалий, модель может научиться их хорошо восстанавливать. Решение: тщательная очистка training data или использование Variational Autoencoder (VAE), который лучше обобщает.

LSTMAE для временных рядов — LSTM-автоэнкодер захватывает временные зависимости лучше, чем обычный AE. Особенно эффективен для мультивариантных временных рядов (10+ сенсоров одновременно). Реализация через PyTorch, обучение с MSELoss на скользящих окнах.

Детально: детекция аномалий в промышленных временных рядах

Задача: вибрационные датчики на 12 насосах химического предприятия, 6 сенсоров на насос, частота 100 Гц. Нужно предупредить о надвигающейся поломке за 4–24 часа.

Архитектура решения:

Сырые данные → feature extraction (RMS, кэртозис, пиковый фактор, FFT-амплитуды на резонансных частотах) → нормализация по скользящему окну 24ч → LSTMAE → reconstruction error → пороговая логика + алертинг.

Размер окна LSTM: 60 секунд (6000 точек на 100 Гц). Слишком маленькое окно — не захватывает медленные паттерны. Слишком большое — теряет чувствительность к быстрым изменениям.

Порог аномальности: не фиксированный, а адаптивный. threshold = mean(errors_last_7d) + 3 * std(errors_last_7d). При дрейфе нормального состояния (плановый износ) порог адаптируется, избегая false positives.

Результат на 6-месячном пилоте: обнаружено 4 из 5 реальных предотказных состояний (recall 0.8), 2 ложных тревоги за 6 месяцев (precision 0.67). До внедрения: 3 незапланированных остановки по $40k каждая. Экономия после внедрения — $120k за полгода (отчёт о пилоте на объекте клиента).

Фрод-детекция: специфика финансовых данных

Финансовые транзакции имеют несколько особенностей, усложняющих детекцию:

  • Concept drift: паттерны фрода меняются быстрее нормального поведения. Модель, обученная полгода назад, устаревает.
  • Adversarial adaptation: продвинутые мошенники адаптируются к обнаружению — делают транзакции похожими на нормальные.
  • Временная зависимость: серия нормальных транзакций, а потом один необычный перевод — это аномалия последовательности, а не одиночной точки.

Практический стек для фрод-детекции: LightGBM с SMOTE-oversampling для supervised части (по известным фрод-кейсам) + Isolation Forest для unsupervised (новые паттерны). Оба сигнала объединяются в ансамбль, финальное решение — через пороги, настроенные на приемлемый FPR (0.1–1% от транзакций на ручную проверку).

Как оценить качество без разметки?

Когда ground truth нет, для оценки используем:

  • Synthetic anomaly injection: добавляем искусственные аномалии (spike, level shift, point outlier) и смотрим, обнаруживает ли их модель
  • Expert validation: случайная выборка топ-K аномалий от модели → review эксперта → precision
  • Business metric: снизилось ли количество пропущенных инцидентов / ложных тревог после внедрения
Техническая деталь: настройка адаптивного порога

Порог вычисляется как mean(errors) + k * std(errors) на скользящем окне 7 дней. Коэффициент k подбирается на validation set с синтетическими аномалиями для достижения FPR < 0.1%. При дрейфе признаков окно автоматически сдвигается.

Процесс работы

  1. Интервью с доменными экспертами — понимаем, что такое «нормальность» и какие инциденты уже были.
  2. EDA и подготовка данных — очистка, создание признаков, временные окна.
  3. Baseline (Isolation Forest) — быстрая валидация на известных инцидентах.
  4. Выбор и кастомизация модели — Autoencoder / LSTM-AE / ансамбль.
  5. Обучение, валидация с синтетическими аномалиями.
  6. Развёртывание в production — пайплайн на Kafka + Flink / Airflow, алертинг в Telegram/Slack, мониторинг дрифта.
  7. Post-deployment сопровождение — мониторинг метрик модели, обновление порогов.

Что входит в работу

  • Аудит текущих данных и процессов
  • Разработка и обучение моделей (Isolation Forest / Autoencoder / LSTM-AE / ансамбль)
  • Настройка адаптивных порогов и алертинга
  • Панель мониторинга аномалий (Grafana / Streamlit)
  • Документация model card и pipeline
  • Обучение вашей команды (2–3 сессии)
  • Гарантийная поддержка 3 месяца

Сроки: baseline-система с одним методом — 2–4 недели. Production-система с адаптивными порогами, алертингом и мониторингом — 2–5 месяцев. Стоимость рассчитывается индивидуально под ваш кейс.

Наша команда имеет 8+ лет опыта в промышленной аналитике и 15+ успешных проектов по детекции аномалий в телеметрии, финансах и IT-мониторинге. Получите консультацию — расскажем, как решить вашу задачу.