Машинное обучение
Обнаружение аномалий
Каждую секунду Visa обрабатывает 1700 транзакций, и среди них скрываются мошеннические - менее 0.1% от общего потока. Как найти иголку в стоге сена, если вы даже не знаете, как эта иголка выглядит? Обнаружение аномалий - это искусство находить то, что не похоже на всё остальное, не имея заранее описания того, что именно искать.
- **Visa и Mastercard** используют anomaly detection для блокировки мошеннических транзакций за 50 мс - системы анализируют сумму, геолокацию, время и паттерн покупок, предотвращая потери в 30+ млрд ежегодно
- **NASA** применяет автоэнкодеры для мониторинга телеметрии космических аппаратов - обнаружение аномальных показаний сенсоров до того, как отклонение приведёт к аварии, спасло несколько миссий
- **Amazon и Google Cloud** детектируют DDoS-атаки с помощью Isolation Forest, анализируя паттерны сетевого трафика - аномальный всплеск запросов с одного IP-диапазона выявляется за секунды
От контрольных карт к Isolation Forest
Охота за выбросами старше машинного обучения. В 1924 году Уолтер Шухарт, инженер Bell Labs, набросал первую контрольную карту на одной странице служебной записки своему руководителю. Его идея была в том, что у любого процесса есть естественная вариация, и точка, выходящая за три стандартных отклонения, скорее всего сигнализирует о реальном сбое, а не о случайности - то самое правило трёх сигм, которое и сегодня стоит за z-score. Контрольные карты стали опорой промышленного контроля качества на весь оставшийся век. Эпоха машинного обучения принесла другую идею: вместо того чтобы моделировать норму, моделировать, насколько легко точку отделить от всего остального. В 2008 году Фэй Тони Лю, Кай Мин Тин и Чжи-Хуа Чжоу опубликовали Isolation Forest, который изолирует аномалии случайными разбиениями, и ему нужно лишь несколько разрезов, чтобы отгородить выброс. Метод масштабировался на миллионы строк и быстро стал инструментом по умолчанию, но его родословная тянется прямиком к нарисованной от руки карте Шухарта в заводском цеху.
Предварительные знания
Isolation Forest
Представьте, что вы пытаетесь описать, где на карте находится конкретный дом. Если дом стоит в густом жилом квартале, вам понадобится много уточнений: «улица такая-то, между домами 12 и 14, третий подъезд». Но если дом стоит посреди пустого поля - одного указания «вон тот дом в поле» достаточно. **Isolation Forest** работает по тому же принципу: аномалии *легко изолировать*, потому что они далеко от остальных данных.
Алгоритм строит **ансамбль случайных деревьев** (обычно 100). Каждое дерево рекурсивно разбивает пространство: случайно выбирает признак и случайную точку разбиения в диапазоне значений этого признака. Аномальная точка, находящаяся далеко от остальных, будет отсечена ближе к корню дерева - ей нужно **меньше разбиений для изоляции**. Нормальная точка, окружённая соседями, потребует много разбиений, прежде чем окажется в листе одна.
Ключевая метрика - **anomaly score**, основанный на средней глубине изоляции точки по всем деревьям ансамбля. Формула нормализует глубину относительно ожидаемой глубины в случайном бинарном дереве. Score близок к 1 для аномалий (короткий путь) и к 0 для нормальных точек (длинный путь). Порог 0.5 - граница: выше - аномалия.
**Почему Isolation Forest так популярен:** - **Скорость:** O(n * log(n)) - линейно-логарифмическая, работает на миллионах строк - **Не требует расстояний:** в отличие от методов на основе плотности, не считает попарные расстояния - **Устойчив к высокой размерности:** каждое дерево работает со случайным подмножеством признаков - **Не нужны метки:** полностью unsupervised, не требует размеченных аномалий - **Единственный гиперпараметр:** `contamination` - ожидаемая доля аномалий (остальные параметры работают хорошо по умолчанию)
**Подбор `contamination`:** этот параметр критически влияет на результат. Если задать 0.01 (1%), а реальных аномалий 5% - модель пропустит часть аномалий. Если задать 0.1 (10%), а аномалий лишь 1% - будет много ложных срабатываний. Начинайте с реалистичной оценки (для fraud detection обычно 0.001-0.01) и настраивайте по precision/recall.
Почему аномальные точки в Isolation Forest имеют короткий средний путь в деревьях?
One-Class SVM
Isolation Forest изолирует аномалии случайными разбиениями. Но что если нам нужен более строгий подход - **построить явную границу** вокруг нормальных данных? **One-Class SVM** делает именно это: обучаясь *только на нормальных данных*, он находит гиперповерхность, которая охватывает нормальную область и отсекает всё, что за её пределами.
Идея исходит из классического SVM. Обычный SVM разделяет два класса максимальным зазором. One-Class SVM решает другую задачу: **отделить данные от начала координат** в пространстве признаков. Все обучающие точки (нормальные) должны оказаться по одну сторону от гиперплоскости, а начало координат - по другую. В результате получается «пузырь» в пространстве признаков, внутри которого - норма, снаружи - аномалия.
**RBF kernel** (Radial Basis Function) позволяет One-Class SVM строить нелинейные границы. Данные проецируются в пространство более высокой размерности, где линейная гиперплоскость может описать сложную форму «нормальной области». Параметр **gamma** контролирует радиус влияния каждой точки: высокий gamma - граница плотно облегает данные (риск переобучения), низкий gamma - граница более гладкая и обобщённая.
**Параметр `nu` - ключевой гиперпараметр One-Class SVM:** - Устанавливает **верхнюю границу доли ошибок** на обучающих данных - Одновременно **нижнюю границу доли опорных векторов** - `nu=0.05` означает: допускаем, что до 5% обучающих данных могут оказаться за границей - Чем меньше `nu` - тем шире граница, меньше ложных срабатываний, но больше пропущенных аномалий - Чем больше `nu` - тем теснее граница, больше срабатываний, но выше risk false positives
**Когда One-Class SVM работает хуже Isolation Forest:** - **Большие датасеты:** O(n^2) - O(n^3) по памяти и времени из-за kernel matrix. На 100K+ точек становится непрактичным - **Высокая размерность:** RBF kernel плохо работает при сотнях признаков без feature selection - **Обязателен preprocessing:** StandardScaler критичен, без него SVM работает некорректно Используйте One-Class SVM, когда данных немного (до 50K), размерность умеренная, и важна чёткая граница решения.
В чём главное отличие One-Class SVM от обычного (двухклассового) SVM в контексте обнаружения аномалий?
Автоэнкодер для аномалий
Isolation Forest и One-Class SVM отлично справляются с табличными данными. Но что если данные - это изображения с камер видеонаблюдения или временные ряды с тысяч сенсоров? Здесь на сцену выходит **автоэнкодер** - нейросеть, которая учится *сжимать* данные и *восстанавливать* их обратно. Идея гениально проста: если автоэнкодер обучен на нормальных данных, он хорошо реконструирует норму, но **плохо реконструирует аномалию**, потому что никогда не видел ничего подобного.
Процесс обнаружения аномалий состоит из двух этапов. **Этап 1 (обучение):** автоэнкодер обучается *только на нормальных данных*, минимизируя ошибку реконструкции. Сеть запоминает паттерны нормальности и учится их воспроизводить. **Этап 2 (детекция):** для каждой новой точки считаем ошибку реконструкции. Если она превышает порог (threshold) - точка аномальна. Порог обычно выбирают как 95-й или 99-й перцентиль ошибки на обучающей выборке.
**Преимущества автоэнкодера перед Isolation Forest и One-Class SVM:** - **Сложные данные:** работает с изображениями, аудио, временными рядами - где IF и OC-SVM малоэффективны - **Масштабируемость:** обучается на GPU, обрабатывает миллионы точек - **Гибкость архитектуры:** свёрточные слои для изображений, LSTM для временных рядов, attention для последовательностей - **Интерпретируемость:** можно визуализировать, *какие именно* признаки плохо реконструированы - это указывает на тип аномалии
**Выбор порога (threshold)** - критический шаг. Самый распространённый подход - **процентильный метод**: вычисляем reconstruction error на обучающей выборке и берём 95-й или 99-й перцентиль как порог. Более продвинутые методы: подгонка распределения ошибок (часто log-normal) и выбор порога по заданному уровню значимости. На практике порог часто подбирают вручную, анализируя гистограмму ошибок и балансируя precision/recall.
**Ловушки автоэнкодера для аномалий:** - Если bottleneck слишком широкий - автоэнкодер запомнит ВСЕ данные, включая аномалии, и ошибка реконструкции будет низкой для всех - Если bottleneck слишком узкий - ошибка будет высокой даже для нормальных данных, и порог станет бесполезным - Тренировочные данные должны быть **чистыми** - даже 1-2% аномалий в обучающей выборке могут испортить модель - Автоэнкодер может научиться реконструировать *типичные* аномалии, если они появляются часто
Как автоэнкодер определяет, является ли новая точка аномалией?
Статистические методы
Мы рассмотрели три ML-метода обнаружения аномалий. Но иногда для решения задачи не нужна артиллерия - достаточно статистики. **Z-score**, **IQR** и **расстояние Махаланобиса** - классические методы, которые работают быстро, не требуют обучения и прозрачны в интерпретации. Они идеальны как первый шаг анализа и baseline для сравнения с ML-моделями.
**Z-score** измеряет, на сколько стандартных отклонений точка удалена от среднего. Формула: z = (x - mean) / std. Правило: если |z| > 3, точка считается аномалией. Это работает при **нормальном распределении** данных - в этом случае за пределами 3 сигм находится лишь 0.27% значений. Метод прост и быстр, но хрупок: одна сильная аномалия сдвигает mean и std, маскируя другие аномалии.
**Расстояние Махаланобиса** - это многомерное обобщение z-score. Оно учитывает **корреляции между признаками**, чего не умеют z-score и IQR, работающие с каждым признаком отдельно. Формула: D = sqrt((x - mean)^T * S^(-1) * (x - mean)), где S - ковариационная матрица. Точка с большим расстоянием Махаланобиса аномальна, даже если по каждому отдельному признаку она в норме.
**Практическое правило выбора метода.** Начинайте с простого: IQR для первичного анализа одномерных признаков. Если данные многомерные и коррелированные - Mahalanobis. Для табличных данных средней сложности - Isolation Forest (быстрый, универсальный, не требует настройки). Для данных с чёткой «нормой» и без примеров аномалий - One-Class SVM. Для изображений, временных рядов и сложных структур - автоэнкодер. И помните: комбинация методов (ensemble) часто работает лучше любого одного.
Для обнаружения аномалий достаточно z-score с порогом |z| > 3 - это универсальный и надёжный метод
Z-score предполагает нормальное распределение и чувствителен к выбросам. Для реальных данных нужно выбирать метод под задачу: IQR для робастности, Mahalanobis для многомерных корреляций, Isolation Forest для табличных данных, автоэнкодер для сложных структур
Реальные данные редко имеют нормальное распределение. Экстремальные аномалии искажают mean и std, маскируя менее выраженные аномалии. Многомерные аномалии (нормальные по каждому признаку отдельно, но аномальные в комбинации) z-score вообще не детектирует. Метод - это инструмент, и для разных задач нужны разные инструменты.
Почему IQR обнаружил обе аномалии (250 и 2000 мс), а z-score - только одну (2000 мс)?
Ключевые идеи
- **Isolation Forest** изолирует аномалии случайными разбиениями - чем короче путь в дереве, тем вероятнее аномалия. Быстрый, масштабируемый, универсальный для табличных данных
- **One-Class SVM** строит явную границу вокруг нормальных данных в пространстве признаков. Обучается без примеров аномалий, но ограничен по масштабируемости (до ~50K точек)
- **Автоэнкодер** детектирует аномалии по высокой ошибке реконструкции - идеален для сложных данных: изображений, временных рядов, аудио
- **Статистические методы** (z-score, IQR, Mahalanobis) - быстрый baseline, но z-score чувствителен к выбросам, а Mahalanobis учитывает корреляции. Как и Visa, блокирующая мошенничество за миллисекунды, правильный выбор метода зависит от типа данных и масштаба задачи - иногда достаточно IQR, а иногда нужен ансамбль моделей
Связанные темы
Обнаружение аномалий пересекается с кластеризацией, опорными векторами и автоэнкодерами. Вот ключевые связи для углубления:
- Кластеризация K-Means — K-Means группирует данные в кластеры - точки, не попавшие ни в один кластер или далёкие от центроидов, можно считать аномалиями. Это простейший способ anomaly detection через кластеризацию
- DBSCAN — DBSCAN явно выделяет точки-шум (noise points), не принадлежащие ни одному кластеру - это прямой метод обнаружения аномалий через плотность, в отличие от расстояния (IF) или границы (OC-SVM)
- Support Vector Machines — One-Class SVM - это адаптация классического SVM для задачи с одним классом. Понимание kernel trick и максимального зазора помогает настраивать и интерпретировать OC-SVM
- Автоэнкодеры — Полный разбор архитектуры автоэнкодеров: variational autoencoder, denoising autoencoder, выбор bottleneck - фундамент для глубокого понимания anomaly detection через реконструкцию
Вопросы для размышления
- Если аномалии в вашей системе со временем становятся «новой нормой» (например, растущий трафик сервиса), как нужно адаптировать модель обнаружения аномалий? Какие из четырёх методов проще всего переобучить на новых данных?
- Мошенники постоянно меняют паттерны поведения, чтобы обойти детекцию. Какой из рассмотренных подходов наиболее устойчив к адаптивным противникам и почему?
- В медицинской диагностике пропущенная аномалия (false negative) может стоить жизни, а ложное срабатывание (false positive) - лишь дополнительное обследование. Как бы вы настроили threshold и contamination, учитывая эту асимметрию ошибок?
Связанные уроки
- ml-16-clustering-kmeans — Расстояние до центров кластеров выявляет аномалии
- ml-18-dbscan — Точки-шум плотности - естественные выбросы
- ml-47-model-monitoring — Детекция дрейфа и выбросов защищает модели в проде
- prob-11-normal — Хвосты нормального закона задают пороги выбросов
- stat-05-hypothesis — Пометка выброса - отклонение гипотезы о норме
- stat-11-bayesian