Перейти к содержимому

Глава 223: Робастные торговые модели

1. Введение

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

Робастные торговые модели разработаны для поддержания приемлемой производительности в широком диапазоне рыночных условий, включая условия, явно не представленные в обучающих данных. Вместо оптимизации средней производительности на исторических данных, робастные модели учитывают наихудшие сценарии, сдвиги распределений и состязательные условия. Эта глава исследует математические основы, практические техники и стратегии реализации для построения ML-торговых систем, которые выживают и процветают, когда рыночная погода меняется.

Потребность в робастности в торговле — не просто академический вопрос. Мгновенные обвалы, кризисы ликвидности, геополитические шоки и структурные изменения рынка (такие как рост самой алгоритмической торговли) создают среды, где стандартные модели ломаются. Робастная модель не обещает идеальную производительность везде; вместо этого она гарантирует, что её производительность в наихудшем случае остаётся в допустимых пределах.

Мы рассмотрим дистрибуционно робастную оптимизацию (DRO), диверсификацию ансамблей, обучение с возмущением входных данных, оценку с учётом режимов и практическую реализацию на Rust с интеграцией живых рыночных данных Bybit.

2. Математические основы

2.1 Стандартная минимизация эмпирического риска

Традиционные ML-модели обучаются через минимизацию эмпирического риска (ERM). Для набора данных из N образцов, взятых из некоторого распределения P, ERM находит параметры theta, минимизирующие:

min_theta (1/N) * sum_{i=1}^{N} L(f_theta(x_i), y_i)

где L — функция потерь. Неявное предположение состоит в том, что будущие данные будут взяты из того же распределения P. На финансовых рынках это предположение регулярно нарушается.

2.2 Дистрибуционно робастная оптимизация (DRO)

DRO заменяет одно распределение P множеством неопределённости Q распределений и оптимизирует для наихудшего случая:

min_theta max_{Q in U(P)} E_{(x,y)~Q} [L(f_theta(x), y)]

где U(P) — множество неоднозначности, центрированное вокруг эмпирического распределения P. Ключевой вопрос — как определить U(P).

2.3 Вассерштейновская робастность

Один принципиальный способ определения множества неоднозначности использует расстояние Вассерштейна. p-расстояние Вассерштейна между распределениями P и Q:

W_p(P, Q) = ( inf_{gamma in Pi(P,Q)} E_{(x,y)~gamma} [d(x,y)^p] )^{1/p}

где Pi(P,Q) — множество всех совместных распределений с маргиналами P и Q. Задача DRO Вассерштейна:

min_theta max_{Q: W_p(Q, P_hat) <= epsilon} E_{Q} [L(f_theta(x), y)]

Эта задача имеет элегантную двойственную формулировку. Для случая p=1 двойственная задача сводится к регуляризованной ERM:

min_theta (1/N) * sum_{i=1}^{N} L(f_theta(x_i), y_i) + lambda * Lip(f_theta)

где Lip(f_theta) — константа Липшица модели. Это даёт прямую связь: контроль константы Липшица модели делает её робастной к возмущениям распределения.

2.4 Минимизация риска наихудшего случая

Альтернативный подход — оптимизация условной стоимости под риском (CVaR). Вместо минимизации средних потерь мы минимизируем средние потери по наихудшей alpha-доле образцов:

CVaR_alpha(L) = (1/alpha) * integral_0^alpha VaR_u(L) du

На практике это означает увеличение весов образцов с высокими потерями при обучении, заставляя модель обращать внимание на сложные случаи — именно те рыночные условия, где робастность важнее всего.

2.5 Робастная статистика для конструирования признаков

Робастные оценки заменяют стандартную статистику альтернативами, менее чувствительными к выбросам:

  • Медианное абсолютное отклонение (MAD) вместо стандартного отклонения: MAD = median(|x_i - median(x)|)
  • Винсоризованные средние вместо арифметических средних: обрезка экстремальных значений перед усреднением
  • Потери Хубера вместо квадратичной ошибки: квадратичные для малых ошибок, линейные для больших
L_Huber(r) = { r^2/2 если |r| <= delta
{ delta*|r| - delta^2/2 иначе

3. Измерения робастности

3.1 Робастность к возмущениям входных данных

Малые изменения входных признаков не должны вызывать больших изменений в выходе модели. В торговле возмущения входных данных возникают из-за:

  • Шум данных: отскок бид-аск, ошибки измерения в данных OHLCV
  • Джиттер времени: небольшие различия во времени выборки данных
  • Вариации расчёта признаков: разные окна ретроспективного анализа, дающие немного разные индикаторы

Модель, робастная к возмущениям входных данных, имеет ограниченную константу Липшица: для близких входов x и x’, |f(x) - f(x’)| также мало.

3.2 Сдвиг распределения

Совместное распределение P(X, Y) изменяется со временем. Это можно разложить на:

  • Ковариатный сдвиг: P(X) изменяется, но P(Y|X) остаётся прежним. Пример: режимы волатильности меняются, но связь между признаками и доходностью стабильна.
  • Сдвиг меток: P(Y) изменяется, но P(X|Y) остаётся прежним. Пример: базовая частота положительных доходностей изменяется.
  • Дрейф концепции: P(Y|X) сам изменяется. Пример: сигнал моментума, работавший в 2020 году, разворачивается в 2022 году.

3.3 Дрейф концепции

Дрейф концепции — наиболее сложная форма сдвига распределения, потому что фундаментальная моделируемая зависимость изменилась. Стратегии включают:

  • Обнаружение дрейфа: мониторинг производительности модели на предмет статистически значимого ухудшения
  • Адаптивное окно: использование только недавних данных с размером окна, адаптированным на основе обнаруженного дрейфа
  • Онлайн-обучение: непрерывное обновление параметров модели по мере поступления новых данных

3.4 Состязательная манипуляция

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

  • Охота за стопами: движение цены для срабатывания кластеров стоп-лосс ордеров
  • Спуфинг: размещение и отмена крупных ордеров для манипулирования книгой ордеров
  • Фронтраннинг сигналов: обнаружение и торговля впереди алгоритмических сигналов

Состязательная робастность требует, чтобы модель нельзя было легко «обмануть» намеренно созданными рыночными условиями.

4. Торговые приложения

4.1 Обобщение между режимами

Наиболее важное применение робастности в торговле — построение моделей, работающих в разных рыночных режимах. Типичный рынок проходит через:

  • Бычьи рынки: устойчивые восходящие тренды с низкой или умеренной волатильностью
  • Медвежьи рынки: устойчивые нисходящие тренды с растущей волатильностью
  • Боковые/диапазонные рынки: нет чёткого тренда, поведение с возвратом к среднему
  • Режимы обвала: внезапные, резкие просадки с экстремальной волатильностью и скачками корреляции

Робастная модель должна сохранять прибыльность (или хотя бы ограничивать убытки) во всех этих режимах. Это достигается через:

  1. Обучение с балансировкой режимов: обеспечение наличия достаточных образцов из всех режимов в обучающих данных
  2. Оптимизация наихудшего режима: явная оптимизация для наименее эффективного режима
  3. Модели, обусловленные режимом: использование обнаружения режима для выбора подходящих подмоделей

4.2 Робастная оптимизация портфеля

Классическая оптимизация среднего-дисперсии печально хрупка, потому что зависит от оценённых средних и ковариаций, которые сами являются шумными оценками. Робастная оптимизация портфеля решает это путём:

  • Использования множеств неопределённости вокруг оценённых параметров
  • Минимизации дисперсии портфеля в наихудшем случае: min_w max_{Sigma in U} w^T Sigma w
  • Применения оценок со сжатием для ковариационных матриц (Ледуа-Вольф)
  • Использования пересемплированных эффективных границ

4.3 Стресс-тестирование

Робастные модели должны быть валидированы через строгое стресс-тестирование:

  • Исторические стресс-тесты: воспроизведение модели через известные кризисные периоды (финансовый кризис 2008, обвал COVID 2020, криптозима 2022)
  • Синтетические стресс-тесты: генерация искусственных, но правдоподобных неблагоприятных сценариев
  • Анализ чувствительности: измерение изменения выхода модели при возмущении отдельных входов
  • Тесты перехода режимов: оценка поведения модели при переходах между режимами

5. Техники

5.1 Диверсификация ансамблей

Стандартные ансамбли (бэггинг, бустинг) улучшают точность, но могут не улучшать робастность, если все базовые модели отказывают в одних и тех же условиях. Ансамбли с поощрением разнообразия явно штрафуют корреляцию между предсказаниями базовых моделей:

L_ensemble = sum_i L(f_i(x), y) - lambda * sum_{i<j} corr(f_i, f_j)

Техники включают:

  • Обучение на разных подмножествах признаков
  • Обучение на данных из разных временных периодов
  • Использование разных архитектур моделей
  • Обучение с отрицательной корреляцией

5.2 Предобработка входных данных для робастности

  • Ранговое преобразование: замена сырых значений признаков их рангами устраняет чувствительность к выбросам
  • Адаптивная нормализация: z-нормализация с скользящей статистикой адаптируется к изменяющимся распределениям
  • Обрезка: ограничение признаков фиксированным диапазоном предотвращает доминирование экстремальных значений
  • Дифференцирование: использование доходностей вместо цен устраняет нестационарность

5.3 Калибровка выходов

Уверенность модели должна отражать истинную вероятность. Техники калибровки включают:

  • Масштабирование Платта: подгонка сигмоида к сырым выходам модели
  • Изотоническая регрессия: непараметрический метод калибровки
  • Температурное масштабирование: деление логитов на обучаемый параметр температуры
  • Конформное предсказание: предоставление интервалов предсказания с гарантированным покрытием

5.4 Рандомизация домена

Заимствованная из робототехники, рандомизация домена обучает модели на искусственно варьируемых средах:

  • Инъекция шума: добавление случайного шума к обучающим признакам
  • Генерация синтетических режимов: создание искусственных рыночных данных с варьируемыми статистическими свойствами
  • Аугментация данных: применение преобразований, сохраняющих семантику меток (например, деформация времени, масштабирование амплитуды)

6. Реализация на Rust

Наша реализация на Rust предоставляет полный фреймворк для построения и оценки робастных торговых моделей. Ключевые компоненты:

6.1 Симулятор рыночных режимов

Мы моделируем четыре рыночных режима с различными статистическими свойствами:

  • Бычий: положительный дрифт (0.001 за шаг), низкая волатильность (0.01), лёгкая положительная автокорреляция
  • Медвежий: отрицательный дрифт (-0.001), высокая волатильность (0.02), лёгкая отрицательная автокорреляция
  • Боковой: почти нулевой дрифт, очень низкая волатильность (0.005), сильный возврат к среднему
  • Обвал: большой отрицательный дрифт (-0.005), экстремальная волатильность (0.05), эффекты моментума/каскада

Каждый режим генерирует синтетические ценовые данные с реалистичными статистическими свойствами.

6.2 Стандартное vs робастное обучение

Стандартная модель использует простую ERM на исторических данных. Робастная модель включает три улучшения:

  1. Перевзвешивание образцов: увеличение весов образцов с высокими потерями (вдохновлено CVaR)
  2. Инъекция шума во входные данные: обучение с добавлением гауссовского шума к признакам
  3. Разнообразие ансамбля: обучение нескольких моделей и поощрение разнообразия предсказаний

6.3 Оценка робастности

Мы измеряем робастность по нескольким осям:

  • Чистая точность: производительность на невозмущённых тестовых данных
  • Точность при возмущениях: производительность при повреждении входных признаков шумом
  • Межрежимная точность: средняя производительность по всем рыночным режимам
  • Точность в наихудшем режиме: производительность в самом сложном режиме
  • Разрыв робастности: разница между чистой и наихудшей точностью (меньше — лучше)

6.4 Базовые структуры данных

Библиотека определяет чёткие структуры данных для рыночных данных, параметров модели, конфигураций режимов и результатов оценки. Все компоненты спроектированы для компонуемости и тестируемости.

Смотрите rust/src/lib.rs для полной реализации с встроенной документацией и rust/examples/trading_example.rs для полного рабочего примера.

7. Интеграция данных Bybit

Реализация включает клиент API Bybit, который получает реальные данные OHLCV (Open, High, Low, Close, Volume) для любой торговой пары. Ключевые аспекты:

7.1 Интеграция API

Мы используем публичный эндпоинт Bybit V5 API для свечных данных (klines):

GET https://api.bybit.com/v5/market/kline

Параметры:

  • category: “spot” или “linear” (бессрочные фьючерсы)
  • symbol: торговая пара (например, “BTCUSDT”)
  • interval: интервал свечи (например, “60” для 1 часа)
  • limit: количество свечей для получения

7.2 Конструирование признаков из рыночных данных

Из сырых данных OHLCV мы вычисляем робастные признаки:

  • Логарифмические доходности: ln(close_t / close_{t-1}) — более стационарны, чем сырые цены
  • Волатильность: скользящее стандартное отклонение логарифмических доходностей
  • Моментум: сумма недавних логарифмических доходностей за окно ретроспективного анализа
  • Коэффициент объёма: текущий объём, делённый на скользящий средний объём
  • Диапазон максимум-минимум: (high - low) / close — мера внутридневной волатильности

Все признаки ранг-преобразуются для дополнительной робастности против выбросов.

7.3 Маркировка режимов

Мы используем простую, но эффективную схему маркировки режимов, основанную на скользящей доходности и волатильности:

  • Бычий: положительная скользящая доходность И волатильность ниже медианы
  • Медвежий: отрицательная скользящая доходность И волатильность выше медианы
  • Обвал: отрицательная скользящая доходность И экстремальная волатильность (верхний квартиль)
  • Боковой: всё остальное

8. Ключевые выводы

  1. Стандартные ML-модели хрупки на финансовых рынках, потому что оптимизируют среднюю производительность на одном распределении, тогда как рынки проходят через смены режимов и сдвиги распределений.

  2. Дистрибуционно робастная оптимизация (DRO) предоставляет принципиальный фреймворк для оптимизации наихудшего случая, а DRO Вассерштейна предлагает элегантную связь с регуляризацией Липшица.

  3. Робастность многомерна: модели должны быть робастны к возмущениям входных данных, сдвигам распределений, дрейфу концепции и состязательной манипуляции одновременно.

  4. Обобщение между режимами — основная практическая задача. Модель, работающая только на бычьих рынках, — это обязательство, а не актив.

  5. Простые техники мощны: инъекция шума при обучении, перевзвешивание образцов к сложным случаям и диверсификация ансамблей могут значительно улучшить робастность при минимальных дополнительных затратах на сложность.

  6. Робастное конструирование признаков (ранговые преобразования, адаптивная нормализация, логарифмические доходности) часто более эффективно, чем сложные архитектуры моделей.

  7. Строгое стресс-тестирование по историческим кризисам, синтетическим сценариям и переходам режимов необходимо для валидации заявлений о робастности.

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

  9. Робастность — не разовое достижение, а непрерывный процесс. Модели должны постоянно мониториться на предмет дрейфа и переоцениваться по мере эволюции структуры рынка.

  10. Rust обеспечивает отличную производительность для реализации робастных циклов обучения, требующих множества оценок возмущений, обучения ансамблей и крупномасштабного моделирования режимов.