Быстрый поиск аномалий в числовых рядах без сложных моделей: метод Хампеля
Автоматизируя обработку числовых данных в датасайенсе, трейдинге и кибербезопасности, мы часто сталкиваемся с задачей нахождения выбросов — «аномальных» значений, которые нарушают общую картину. Выбросы в реальных данных встречаются постоянно: ошибки измерений, сетевые сбои, редкие пики цен или всплески активности на рынках. Всё это создаёт аномалии, которые искажают результаты анализа, могут ухудшать обучение моделей и приводить к неверным выводам.
Прежде чем строить сложные модели машинного обучения или принимать торговые решения, важно очистить данные от очевидных выбросов. Чтобы быстро и надёжно фильтровать аномалии без использования сложных моделей, применяют метод Хампеля — простой способ автоматической очистки данных. В этой статье объясняем, как он работает, и как использовать его на практике.
Идея метода Хампеля для борьбы с выбросами
Почему обычные методы плохо справляются с выбросами? Часто для анализа числовых рядов используют среднее значение и стандартное отклонение (показатель разброса данных). Однако даже один большой выброс может сильно сместить среднее и увеличить разброс, делая всю статистику ненадёжной.
Пример: ряд чисел [10, 10, 10, 10, 1000].
Среднее: 208, хотя 4 из 5 значений — 10. Это происходит потому, что среднее чувствительно к выбросам.
Чтобы бороться с ними, Хампель предложил использовать устойчивую меру: медиану — значение, которое делит упорядоченный ряд пополам.
Также используется медианное абсолютное отклонение (MAD) — медиана отклонений элементов ряда от его медианы.
- Пример: для ряда [1, 3, 6] — медиана = 3, отклонения [2, 0, 3], медиана отклонений равна 2 (упорядочиваем отклонения [0, 2, 3] и берём центральный элемент).
Более формально значение MAD определяется так:
MAD(X) = Median(|x₁ − Median(X)|, …, |xₙ − Median(X)|),
где X — выборка из n наблюдений x₁, …, xₙ.
Суть метода Хампеля
- Для каждого элемента ряда берём соседей в скользящем окне (например, из 5 элементов).
- Вычисляем медиану и MAD среди этих соседей.
- Если отклонение текущего элемента от медианы больше порогового значения (обычно 3 × MAD), элемент считается выбросом.
Более формально, по Хампелю: выброс (outlier) определяется как число x из выборки X, модуль разности которого и медианы выборки больше, чем MAD выборки, умноженное на специальный коэффициент k (scale factor), зависящий от распределения (≈1.4826 для нормального).
На практике для построения фильтра выбросов Хампеля это определение модифицируется с использованием скользящих окон (sliding windows) и параметра s (sigma), порогового количества стандартных отклонений. Это значит, что медиана и MAD вычисляются для всех скользящих окон, состоящих из элементов выборки. Далее все модули разности элементов выборки и медианы сравниваются с MAD, умноженный на коэффициент k и умноженный на параметр s. Более высокий порог s стандартного отклонения делает фильтр более щадящим, более низкий порог идентифицирует больше чисел как выбросы.
Проверка элемента ряда на аномальность
Под аномалией (anomaly) числового ряда понимается такое число x из ряда X, которое по модулю отличается от медианы скользящего окна более чем в s раз от MAD этого окна, умноженного на коэффициент k.
Все аномалии ряда образуют некоторое его подмножество A:
A = {a | |a − Median(Xᵢ)| > s ∙ k ∙ MAD(Xᵢ)},
где a — аномальный элемент из X, Х — исходный числовой ряд, Xᵢ — ряд чисел i-го скользящего окна, всего окон: (n − w + 1), где w — размер окна.
Иными словами: ищем точки, которые сильно выбиваются из локальной медианы.
Фильтр аномалий числового ряда определяется как функция:
F: X → {True, False}. F (xᵢ) = True, если xᵢ ∈ A; False, если xᵢ ∉ A.
Здесь Х — исходный числовой ряд, состоящий из n элементов xᵢ, A — множество аномалий.
Простыми словами, проверка элемента ряда на аномальность выполняется так:
- сначала считаем «типичное» значение точек (медиану) в соседях.
- сравниваем, насколько далеко от медианы расположена текущая точка, чем её соседи.
- если далеко — это аномалия.
Как работает модифицированный метод Хампеля
Метод Хампеля был адаптирован для реальных практических задач:
- используются скользящие окна фиксированного размера w для локальной оценки;
- добавлен настраиваемый порог s — сколько отклонений считать допустимыми;
- введён масштабирующий коэффициент k для нормализации MAD;
- метод адаптирован для возможности детекта аномалий в первом и последнем элементах числового ряда.
Всё это реализовано на языке Python в функции фильтрации HampelFilter() и в функции детекта аномалий HampelAnomalyDetection() из библиотеки TradeRoutines платформы ⚙️TKSBrokerAPI.
Примеры работы фильтра Хампеля
Фильтр-функция HampelFilter() обнаруживает аномалии, определяемые согласно определению выше. Настраиваемые параметры в ней:
- window (переменная w из формул выше) — размер скользящего окна (по умолчанию 5);
- sigma (переменная s) — пороговое количество стандартных отклонений (по умолчанию 3);
- scaleFactor (переменная k) — специальный коэффициент, зависящий от распределения ряда (по умолчанию 1.4826).
Функция фильтрации возвращает новый ряд F, состоящий из значений True или False, где True означает наличие аномального элемента на соответствующей позиции в исходном списке чисел.
Например, в списке чисел [10, 10, 10, 10, 1000]:
- Медиана = 10;
- MAD = 0;
- 1000 — явный выброс;
- Фильтр корректно определит это число как аномалию: F = [False, False, False, False, True] — True на последней позиции говорит именно об этом.
Примеры входных данных и результатов фильтрации, HampelFilter(window=5, sigma=3, scaleFactor=1.4826):
Примеры входных данных и результатов фильтрации, HampelFilter(window=3, sigma=3, scaleFactor=1.4826):
Поиск индекса первого аномального элемента
На практике часто бывает нужно определить только первый аномальный или первый среди наибольших в числовом ряду элемент. Для этого используется функция HampelAnomalyDetection(). Она возвращает минимальный индекс элемента в списке найденных аномалий или индекс первого максимального элемента во входном ряду, если его индекс меньше индекса аномального элемента. Если в числовом ряду нет аномалий или все элементы равны (нет максимумов), то значение функции не определено (None).
Проще говоря, функция ищет самую первую «подозрительную» точку в ряду.
Примеры входных данных и результатов, HampelAnomalyDetection():
Где применяется метод Хампеля
При мониторинге сетевых событий метод Хампеля помогает обнаруживать подозрительные скачки активности без необходимости предварительного обучения моделей. Это полезно для систем раннего предупреждения о возможных атаках.
В анализе данных (Data Science)
Фильтр позволяет очищать обучающие выборки для машинного обучения: автоматически удалять выбросы, которые портят модели. Это особенно важно, если данные собираются в реальном времени и могут содержать ошибки ввода, сетевые аномалии или сбои сенсоров.
Метод Хампеля используется для фильтрации аномалий в потоках биржевых данных (ценах, объёмах сделок, параметрах свечей OHLCV). Это позволяет автоматически исключать случайные выбросы — например, редкие пики цены из-за ошибки брокера или ложные всплески объёма — до передачи сигналов в торговый алгоритм. Фильтрация помогает торговому роботу избегать ложных входов и уменьшает количество ошибочных сделок.
Этот метод применяется в реальном времени для быстрой предобработки потоков котировок, подготовки данных для алгоритмов оценки вероятности достижения цены и для фильтрации аномалий перед построением торговых сигналов.
В нашем проекте по автоматизации трейдинга и выдаче торговых сигналов он используется как базовый фильтр:
- очищает поток цен от случайных выбросов, ищет аномалии в биржевом стакане;
- очищает исторические данные для оценки вероятности достижения целей;
- позволяет алгоритмам работать более устойчиво в реальных рыночных условиях.
Таким образом, модифицированный метод Хампеля — это простой и эффективный инструмент для быстрого поиска аномалий в реальных числовых рядах. Этот метод — проверенное временем решение в инженерии обработки данных, которое помогает построить надёжный фундамент для более сложной обработки числовых рядов. Он прост в реализации, легко настраивается по чувствительности, адаптируется и масштабируется на большие объёмы данных. Это делает его отличным выбором для задач автоматического анализа биржевых цен, обработки временных рядов и предиктивной аналитики без необходимости строить сложные прогнозные модели.
Метод Хампеля — это не замена машинному обучению, а базовый фильтр, который улучшает качество любых моделей, работающих с данными. Его применение позволяет значительно повысить качество анализа автоматизированными системами и точность детекта аномалий в данных.
🔗 Полезные ссылки
- 🌐 Полный FAQ по сигналам и описание методик FMA: fuzzy-technologies.github.io/FMA
- ⚙️ Платформа TKSBrokerAPI: fuzzy-technologies.github.io/TKSBrokerAPI
- 📡 Подписка на биржевые сигналы: web.tribute.tg/s/nub
Дополнительные материалы к статье
- «Быстрый поиск аномалий в числовых рядах при помощи модифицированного метода Хампеля» (2023).
- Исследование на Kaggle (2023).
- Генератор тестовых биржевых данных PriceGenerator.
- Лабораторная работа по фильтрации аномалий методом Хампеля в Jupyter Notebook.
- Код функции фильтрации аномалий методом Хампеля из библиотеки платформы ⚙️ TKSBrokerAPI.