Вопрос или проблема
Я немного запутался, как эффективно смоделировать обнаружение аномалий для следующей проблемы, вероятно, из-за отсутствия опыта в моделировании временных рядов:
- Я получаю рыночные данные, отсортированные по временной метке, содержащие ID ценных бумаг и соответствующую пару временной метки/цены для каждой транзакции. Это также означает, что этап предварительной обработки, связанный с преобразованием данных в временные ряды (каждый из которых соответствует одной ценной бумаге), будет затратным, поскольку обычно происходит несколько миллионов транзакций в день.
- Это делается над очень большим набором ценных бумаг, обычно за один день. Количество транзакций по одной ценной бумаге может варьироваться от одной сделки в день/неделю/месяц до нескольких раз в секунду.
- Цель состоит в том, чтобы обнаружить выбросы/аномалии, касающиеся ценового развития отдельных ценных бумаг, т.е. попытка с помощью метода кластеризации может не обнаружить выбросы внутри кластеров, но “снаружи” их соответствующих временных рядов.
- Я планирую превратить это в код в реальном времени/онлайн, поэтому было бы очень удобно, если бы методология от оффлайн случая (с использованием архивных данных несколько дней назад) могла быть перенесена. Оперативная память не должна вызывать беспокойства.
- Бонусные очки, если подход не использует временные ряды явно, т.е. я могу использовать данные, которые у меня есть под рукой, без/с минимальной дальнейшей дорогой предварительной обработки (я знаю, что это звучит маловероятно). Дополнительные бонусные очки, если доступна реализация на Python, но это только для удобства тестирования.
Я уже пробовал наметить методы с использованием AR(I)MA, агломеративной кластеризации по временным шагам, DWT и LOF, но они всегда терпят неудачу хотя бы на одном этапе своего концепта (высокая стоимость, отсутствие канонического способа объединения кластеров по временным шагам, слишком много предварительной обработки).
Какой подход максимизирует компромисс между эффективностью и точностью для этой проблемы? Существует ли соответствующее название для алгоритма, описывающего этот подход?
Звучит как суперинтересная проблема. Один алгоритм обнаружения, который я использовал недавно с некоторым успехом для попытки найти “неартефактные” аномалии в данных ЭЭГ, – это “спектральный остаток” из Сервиса обнаружения аномалий временных рядов в Microsoft.
По сути, он выполняет некоторые хитрые манипуляции с данными, преобразованными с помощью преобразования Фурье, чтобы выделить новшества/аномалии. Математика довольно проста, и мне удалось реализовать это несколькими строками кода на numpy. Я могу выложить код, если вам интересно.
Чтобы вписать это в онлайн-контекст, я рассчитывал карты значимости на 200 секундах образцов с частотой 128 Гц (аналогично обучению модели). Я вводил эти точки данных как приоритеты для алгоритма обнаружения точек изменения на основе Байеса, который я затем использовал, чтобы вычислить вероятность того, что данные из следующей секунды карт значимости были “точкой изменения”.
Конечно, эта последняя часть немного отклоняется от того, что вы хотите достичь, но я думаю, что даже простое сравнение скользящего среднего сделает свое дело.
Ответ или решение
Эффективное обнаружение аномалий в неупорядоченных рыночных данных — это задача, требующая комплексного подхода к обработке данных и алгоритмам машинного обучения. Давайте детально рассмотрим, как можно реализовать эту задачу, принимая во внимание указанные вами параметры и ограничения.
1. Постановка задачи
Основные цели, которые вы стремитесь достичь, заключаются в обнаружении аномалий в ценах на отдельные ценные бумаги, при этом нужно минимизировать затраты на предварительную обработку данных. Это связано со значительным объемом транзакций, которые могут варьироваться от единичных сделок до многотысячных операций в секунду. Вы также хотите, чтобы внедренный алгоритм работал в реальном времени с возможностью масштабирования.
2. Подход к решению
Поскольку требуется минимизировать предварительную обработку данных, я рекомендую следующие шаги:
Шаг 1: Агрегация данных
Вместо того чтобы обрабатывать каждый отдельный транзакционный запрос, агрегируйте данные в более крупные временные окна (например, каждые 5 секунд или 1 минуту). Это поможет снизить объем данных и упростить процесс анализа. Вы можете создать структуру данных, которая будет содержать усреднённую цену и общее количество сделок за временной интервал.
Шаг 2: Алгоритм обнаружения аномалий
Предлагаю рассмотреть использование алгоритмов, основанных на методах, не требующих явного учета временных рядов. Одним из таких методов является алгоритм, использующий лес решающих деревьев (Isolation Forest). Он работает по следующему принципу:
- Деревья создаются путем случайного разделения выбрасываемых данных на подгруппы.
- Аномалии, как правило, будут легче «изолировать» из-за их редкости.
- Этот метод требует минимальных затрат на предварительную обработку и может работать с высокоразреженными данными.
Форма вашего алгоритма будет включать в себя следующие этапы:
- Построение структуры данных, агрегирующей ключевые метрики (цену, объем торгов).
- Применение Isolation Forest для анализа аномальных отклонений.
- Настройка гиперпараметров через кросс-валидацию для повышения точности обнаружения.
Шаг 3: Реализация в реальном времени
Для реализации в реальном времени вы можете использовать потоковую обработку данных с помощью библиотек, таких как Apache Kafka или Apache Flink. Эти технологии облегчают обработку данных в реальном времени и позволяют легко интегрировать модели машинного обучения.
Шаг 4: Оценка и оптимизация
Для оценки корректности работы алгоритма используйте метрики, такие как F1-score или Area Under the Curve (AUC). Это поможет вам тестировать и улучшать алгоритм на основе полученных данных.
3. Заключение
Итак, подход к эффективному обнаружению аномалий в неупорядоченных рыночных данных доступен, и он включает в себя разумную агрегацию данных, использование алгоритмов, которые не зависят от временных рядов, и адаптацию для работы в режиме реального времени. Этот процесс может привести к значительному улучшению качества анализа и минимизации затрат на обработку данных.
Для реализации вы можете воспользоваться такими библиотеками Python, как sklearn
для Isolation Forest и pandas
для управления данными. Если у вас есть интерес, я могу помочь с примерами кода или более глубоким техническим объяснением выбранных методов.
Применение этих рекомендаций позволит вам эффективно обнаруживать аномалии в рыночных данных с минимальными затратами.