April 11

Быстрый поиск аномалий в числовых рядах без сложных моделей: метод Хампеля

Аномалии — они повсюду вокруг нас!

В этой статье:

Автоматизируя обработку числовых данных в датасайенсе, трейдинге и кибербезопасности, мы часто сталкиваемся с задачей нахождения выбросов — «аномальных» значений, которые нарушают общую картину. Выбросы в реальных данных встречаются постоянно: ошибки измерений, сетевые сбои, редкие пики цен или всплески активности на рынках. Всё это создаёт аномалии, которые искажают результаты анализа, могут ухудшать обучение моделей и приводить к неверным выводам.

Прежде чем строить сложные модели машинного обучения или принимать торговые решения, важно очистить данные от очевидных выбросов. Чтобы быстро и надёжно фильтровать аномалии без использования сложных моделей, применяют метод Хампеля — простой способ автоматической очистки данных. В этой статье объясняем, как он работает, и как использовать его на практике.

Идея метода Хампеля для борьбы с выбросами

Почему обычные методы плохо справляются с выбросами? Часто для анализа числовых рядов используют среднее значение и стандартное отклонение (показатель разброса данных). Однако даже один большой выброс может сильно сместить среднее и увеличить разброс, делая всю статистику ненадёжной.

Пример: ряд чисел [10, 10, 10, 10, 1000].

Среднее: 208, хотя 4 из 5 значений — 10. Это происходит потому, что среднее чувствительно к выбросам.

Чтобы бороться с ними, Хампель предложил использовать устойчивую меру: медиану — значение, которое делит упорядоченный ряд пополам.

  • Пример: в ряду [1, 3, 6] медиана = 3.

Также используется медианное абсолютное отклонение (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ₙ.

Суть метода Хампеля

Базовый алгоритм:

  1. Для каждого элемента ряда берём соседей в скользящем окне (например, из 5 элементов).
  2. Вычисляем медиану и MAD среди этих соседей.
  3. Если отклонение текущего элемента от медианы больше порогового значения (обычно 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):

Фильтрация списка чисел с окном 5

Примеры входных данных и результатов фильтрации, HampelFilter(window=3, sigma=3, scaleFactor=1.4826):

Фильтрация списка чисел с окном 3

Поиск индекса первого аномального элемента

На практике часто бывает нужно определить только первый аномальный или первый среди наибольших в числовом ряду элемент. Для этого используется функция HampelAnomalyDetection(). Она возвращает минимальный индекс элемента в списке найденных аномалий или индекс первого максимального элемента во входном ряду, если его индекс меньше индекса аномального элемента. Если в числовом ряду нет аномалий или все элементы равны (нет максимумов), то значение функции не определено (None).

Проще говоря, функция ищет самую первую «подозрительную» точку в ряду.

Примеры входных данных и результатов, HampelAnomalyDetection():

Поиск аномалий с помощью функции HampelAnomalyDetection() со значениями по умолчанию

Где применяется метод Хампеля

В кибербезопасности

При мониторинге сетевых событий метод Хампеля помогает обнаруживать подозрительные скачки активности без необходимости предварительного обучения моделей. Это полезно для систем раннего предупреждения о возможных атаках.

В анализе данных (Data Science)

Фильтр позволяет очищать обучающие выборки для машинного обучения: автоматически удалять выбросы, которые портят модели. Это особенно важно, если данные собираются в реальном времени и могут содержать ошибки ввода, сетевые аномалии или сбои сенсоров.

В алгоритмическом трейдинге

Метод Хампеля используется для фильтрации аномалий в потоках биржевых данных (ценах, объёмах сделок, параметрах свечей OHLCV). Это позволяет автоматически исключать случайные выбросы — например, редкие пики цены из-за ошибки брокера или ложные всплески объёма — до передачи сигналов в торговый алгоритм. Фильтрация помогает торговому роботу избегать ложных входов и уменьшает количество ошибочных сделок.

Этот метод применяется в реальном времени для быстрой предобработки потоков котировок, подготовки данных для алгоритмов оценки вероятности достижения цены и для фильтрации аномалий перед построением торговых сигналов.

В нашем проекте по автоматизации трейдинга и выдаче торговых сигналов он используется как базовый фильтр:

  • очищает поток цен от случайных выбросов, ищет аномалии в биржевом стакане;
  • очищает исторические данные для оценки вероятности достижения целей;
  • позволяет алгоритмам работать более устойчиво в реальных рыночных условиях.
Фильтрация аномальных OHLCV-свечей модифицированным методом Хампеля и выявление аномалий в стакане цен

Таким образом, модифицированный метод Хампеля — это простой и эффективный инструмент для быстрого поиска аномалий в реальных числовых рядах. Этот метод — проверенное временем решение в инженерии обработки данных, которое помогает построить надёжный фундамент для более сложной обработки числовых рядов. Он прост в реализации, легко настраивается по чувствительности, адаптируется и масштабируется на большие объёмы данных. Это делает его отличным выбором для задач автоматического анализа биржевых цен, обработки временных рядов и предиктивной аналитики без необходимости строить сложные прогнозные модели.

Метод Хампеля — это не замена машинному обучению, а базовый фильтр, который улучшает качество любых моделей, работающих с данными. Его применение позволяет значительно повысить качество анализа автоматизированными системами и точность детекта аномалий в данных.


🔗 Полезные ссылки

Дополнительные материалы к статье