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

Глава 288: Аугментация данных для трейдинга

Введение

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

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

В этой главе рассматривается комплексный набор методов аугментации данных, адаптированных для финансовых временных рядов. Мы начнём с методов общего назначения (временное искажение, масштабирование амплитуды, добавление шума, оконная нарезка), затем перейдём к финансово-специфичным подходам (смешивание режимов, синтетическая инъекция кризисов, масштабирование волатильности) и, наконец, рассмотрим генеративную аугментацию с использованием GAN и диффузионных моделей. Все методы реализованы на Rust для обеспечения производительности, с интеграцией API криптовалютной биржи Bybit для получения реальных данных.


1. Методы аугментации временных рядов общего назначения

1.1 Временное искажение (Time Warping)

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

Реализация работает путём генерации гладкого пути искажения с использованием линейной интерполяции случайных смещений узловых точек. Для временного ряда длины N мы выбираем K узловых точек через равные интервалы, смещаем каждую на небольшое случайное значение из равномерного распределения [-sigma, sigma] и интерполируем для получения искажённого отображения индексов. Исходные значения затем передискретизируются по искажённым индексам.

Ключевые соображения для трейдинга:

  • Искажение должно сохранять порядок событий (монотонно возрастающий путь)
  • Величина искажения должна быть достаточно малой для сохранения экономического содержания
  • Соотношения OHLCV должны оставаться согласованными (High >= Open, Close, Low)

1.2 Масштабирование амплитуды (Magnitude Scaling)

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

Для финансовых данных мы обычно берём масштабный коэффициент из логнормального распределения: s ~ exp(N(0, sigma^2)), что гарантирует положительность и симметричное распределение в логарифмической шкале. Значение sigma = 0.1 даёт масштабные коэффициенты примерно от 0.74 до 1.35.

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

1.3 Добавление шума (Jittering)

Добавление шума прибавляет малые случайные возмущения к каждой точке данных: x'(t) = x(t) + epsilon(t), где epsilon(t) ~ N(0, sigma^2). Это простейший метод аугментации, который служит формой регуляризации при обучении.

Для финансовых данных величина шума должна калиброваться относительно типичного спреда или размера тика инструмента. Добавление шума, превышающего спред bid-ask, нереалистично; добавление шума меньше минимального тика — бессмысленно.

Адаптивный шум: Мы масштабируем шум пропорционально локальной волатильности: epsilon(t) ~ N(0, (sigma * vol(t))^2), где vol(t) — скользящая оценка волатильности (например, стандартное отклонение доходностей за 20 периодов). Это обеспечивает больший шум в волатильные периоды и меньший в спокойные, сохраняя гетероскедастическую природу финансовых доходностей.

1.4 Оконная нарезка (Window Slicing)

Оконная нарезка извлекает случайные непрерывные подпоследовательности из исходного ряда. Для ряда длины N мы случайно выбираем начальный индекс и извлекаем окно длины W < N. Этот метод особенно эффективен для:

  • Обучения моделей с фиксированной длиной входа (CNN, LSTM с фиксированным окном)
  • Снижения доминирования конкретных календарных эффектов за счёт того, что модель видит множество различных начальных точек
  • Создания большего количества обучающих образцов из одного длинного ряда

2. Финансово-специфичные методы аугментации

2.1 Смешивание режимов (Regime Mixing)

Финансовые рынки циклически проходят через различные режимы: трендовый, возвратный к среднему, высокой волатильности, низкой волатильности, кризисный и восстановительный. Смешивание режимов создаёт синтетические ряды, соединяя сегменты из разных режимов.

Процесс включает:

  1. Обнаружение режима: Использование скрытой марковской модели (HMM) или простых порогов волатильности для разметки каждого временного окна
  2. Извлечение сегментов: Извлечение сегментов, принадлежащих каждому режиму
  3. Синтетическая сборка: Создание новых рядов путём конкатенации сегментов из разных режимов в правдоподобном порядке со сглаживанием на границах

2.2 Синтетическая инъекция кризисов

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

  1. Извлечение шаблона кризиса: Извлечение исторических кризисных паттернов (GFC 2008, обвал COVID 2020, криптозима 2022) как нормализованных шаблонов
  2. Случайная вставка: Выбор случайной точки в ряду и вмешивание масштабированной версии кризисного шаблона
  3. Калибровка: Настройка величины, длительности и формы восстановления для создания разнообразных кризисных сценариев

2.3 Масштабирование волатильности (с учётом режима)

Масштабирование волатильности корректирует волатильность доходностей, сохраняя направленный паттерн. Для доходностей r(t):

r'(t) = mean(r) + scale_factor * (r(t) - mean(r))

где scale_factor > 1 увеличивает волатильность, а scale_factor < 1 уменьшает. Вариант с учётом режима использует разные масштабные коэффициенты для разных обнаруженных режимов.


3. Генеративная аугментация

3.1 Аугментация на основе GAN

Генеративно-состязательные сети (GAN) могут изучать распределение финансовых временных рядов и генерировать полностью новые синтетические образцы. Ключевые архитектуры:

  • TimeGAN (Yoon et al., 2019): Сочетает автоэнкодер с состязательным обучением, сохраняя временную динамику
  • Quant-GAN (Wiese et al., 2020): Использует темпоральные свёрточные сети для генерации реалистичных финансовых траекторий
  • Условный GAN: Генерирует ряды, обусловленные метками режимов, обеспечивая целенаправленную аугментацию

3.2 Аугментация на основе диффузионных моделей

Диффузионные модели (DDPM, модели на основе оценки) стали мощной альтернативой GAN для генеративного моделирования. Применительно к финансовым временным рядам:

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

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

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

Основные структуры данных

  • OhlcvBar: Представляет одну свечу OHLCV с временной меткой
  • AugmentationConfig: Настраиваемые параметры для каждого метода аугментации
  • DataAugmenter: Основная структура, применяющая аугментации к данным временных рядов

Функции аугментации

  • time_warp(): Гладкое временное искажение с использованием линейной интерполяции
  • magnitude_scale(): Случайное масштабирование амплитуды с логнормальным распределением
  • jitter(): Адаптивная инъекция гауссовского шума
  • window_slice(): Извлечение случайной подпоследовательности
  • volatility_scale(): Масштабирование волатильности с учётом режима

Интеграция с Bybit

  • Получение исторических данных свечей через API Bybit v5
  • Поддержка настраиваемых символов, интервалов и периодов
  • Конвертация ответов API во внутренний формат OhlcvBar

5. Интеграция с Bybit

Биржа Bybit предоставляет REST API для исторических рыночных данных. Наша интеграция использует эндпоинт API v5:

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

Параметры:

  • category: “spot” или “linear” (фьючерсы)
  • symbol: Торговая пара (например, “BTCUSDT”)
  • interval: Интервал свечи (“1”, “5”, “15”, “60”, “240”, “D”, “W”)
  • limit: Количество свечей (максимум 200)

Конвейер обработки:

  1. Сырые данные OHLCV получаются и парсятся
  2. Цены закрытия извлекаются как основная цель аугментации
  3. Несколько методов аугментации применяются независимо
  4. Аугментированные наборы данных объединяются с оригиналами для обучения модели

6. Практические соображения

Когда использовать какой метод

МетодЛучше всего дляРиск
Добавление шумаРегуляризация, устойчивость к шумуМожет размыть резкие сигналы
Временное искажениеВременная инвариантностьМожет исказить сезонность
Масштабирование амплитудыИнвариантность к ценовому уровнюМожет создать нереалистичные уровни
Оконная нарезкаМодели с фиксированным окномТеряет дальний контекст
Масштабирование волатильностиУстойчивость к режимамМожет нарушить безарбитражность
Смешивание режимовСтресс-тестированиеАртефакты на границах
Инъекция кризисовПодготовка к хвостовым рискамНереалистичные формы восстановления

Стратегия валидации

Аугментированные данные должны быть проверены на сохранение ключевых статистических свойств:

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

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


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

  1. Дефицит данных — фундаментальная проблема финансового ML. В отличие от компьютерного зрения, мы не можем просто собрать больше независимых образцов.

  2. Методы общего назначения (добавление шума, временное искажение, масштабирование амплитуды, оконная нарезка) обеспечивают сильную базовую линию при правильной калибровке.

  3. Финансово-специфичные методы (смешивание режимов, инъекция кризисов, масштабирование волатильности) решают уникальные проблемы нестационарности и хвостовых рисков.

  4. Генеративные модели (GAN, диффузионные модели) могут изучать и воспроизводить сложные зависимости, но требуют тщательной валидации.

  5. Аугментация должна уважать финансовую структуру: временной порядок, согласованность OHLCV, реалистичные ценовые уровни.

  6. Аугментируйте только обучающие данные — никогда тестовые или валидационные.

  7. Rust обеспечивает отличную производительность для конвейеров аугментации, позволяя аугментацию в реальном времени при обучении.

  8. Комбинируйте несколько методов для максимального разнообразия.

  9. Валидируйте аугментированные данные статистически перед обучением.

  10. Калибруйте интенсивность аугментации под инструмент и таймфрейм.


Ссылки

  • Um, T. T., et al. (2017). “Data Augmentation of Wearable Sensor Data for Parkinson’s Disease Monitoring using Convolutional Neural Networks.” ICMI.
  • Yoon, J., Jarrett, D., & van der Schaar, M. (2019). “Time-series Generative Adversarial Networks.” NeurIPS.
  • Wiese, M., et al. (2020). “Quant GANs: Deep Generation of Financial Time Series.” Quantitative Finance.
  • Fons, E., Dawson, P., & Zeng, X. (2020). “Data Augmentation for Financial Time Series with Generative Models.” ICAIF.
  • Документация API Bybit: https://bybit-exchange.github.io/docs/v5/