Глава 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)
Финансовые рынки циклически проходят через различные режимы: трендовый, возвратный к среднему, высокой волатильности, низкой волатильности, кризисный и восстановительный. Смешивание режимов создаёт синтетические ряды, соединяя сегменты из разных режимов.
Процесс включает:
- Обнаружение режима: Использование скрытой марковской модели (HMM) или простых порогов волатильности для разметки каждого временного окна
- Извлечение сегментов: Извлечение сегментов, принадлежащих каждому режиму
- Синтетическая сборка: Создание новых рядов путём конкатенации сегментов из разных режимов в правдоподобном порядке со сглаживанием на границах
2.2 Синтетическая инъекция кризисов
Реальные финансовые кризисы — редкие события, но модели должны быть устойчивы к ним. Синтетическая инъекция кризисов искусственно вставляет кризисоподобные эпизоды в обычные рыночные данные:
- Извлечение шаблона кризиса: Извлечение исторических кризисных паттернов (GFC 2008, обвал COVID 2020, криптозима 2022) как нормализованных шаблонов
- Случайная вставка: Выбор случайной точки в ряду и вмешивание масштабированной версии кризисного шаблона
- Калибровка: Настройка величины, длительности и формы восстановления для создания разнообразных кризисных сценариев
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 для генеративного моделирования. Применительно к финансовым временным рядам:
- Прямой процесс: Постепенное добавление шума к реальным рыночным данным за
Tшагов - Обратный процесс: Обучение нейронной сети шумоподавлению, изучение генерации реалистичных финансовых траекторий
- Условная генерация: Обусловливание на рыночном режиме, классе активов или конкретных статистиках
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)
Конвейер обработки:
- Сырые данные OHLCV получаются и парсятся
- Цены закрытия извлекаются как основная цель аугментации
- Несколько методов аугментации применяются независимо
- Аугментированные наборы данных объединяются с оригиналами для обучения модели
6. Практические соображения
Когда использовать какой метод
| Метод | Лучше всего для | Риск |
|---|---|---|
| Добавление шума | Регуляризация, устойчивость к шуму | Может размыть резкие сигналы |
| Временное искажение | Временная инвариантность | Может исказить сезонность |
| Масштабирование амплитуды | Инвариантность к ценовому уровню | Может создать нереалистичные уровни |
| Оконная нарезка | Модели с фиксированным окном | Теряет дальний контекст |
| Масштабирование волатильности | Устойчивость к режимам | Может нарушить безарбитражность |
| Смешивание режимов | Стресс-тестирование | Артефакты на границах |
| Инъекция кризисов | Подготовка к хвостовым рискам | Нереалистичные формы восстановления |
Стратегия валидации
Аугментированные данные должны быть проверены на сохранение ключевых статистических свойств:
- Распределение доходностей (среднее, дисперсия, асимметрия, эксцесс)
- Структура автокорреляции (особенно квадратов доходностей)
- Стилизованные факты (тяжёлые хвосты, кластеризация волатильности, эффект плеча)
Аугментация должна применяться только к обучающим данным. Тестовый набор должен состоять из реальных, неаугментированных рыночных данных.
7. Ключевые выводы
-
Дефицит данных — фундаментальная проблема финансового ML. В отличие от компьютерного зрения, мы не можем просто собрать больше независимых образцов.
-
Методы общего назначения (добавление шума, временное искажение, масштабирование амплитуды, оконная нарезка) обеспечивают сильную базовую линию при правильной калибровке.
-
Финансово-специфичные методы (смешивание режимов, инъекция кризисов, масштабирование волатильности) решают уникальные проблемы нестационарности и хвостовых рисков.
-
Генеративные модели (GAN, диффузионные модели) могут изучать и воспроизводить сложные зависимости, но требуют тщательной валидации.
-
Аугментация должна уважать финансовую структуру: временной порядок, согласованность OHLCV, реалистичные ценовые уровни.
-
Аугментируйте только обучающие данные — никогда тестовые или валидационные.
-
Rust обеспечивает отличную производительность для конвейеров аугментации, позволяя аугментацию в реальном времени при обучении.
-
Комбинируйте несколько методов для максимального разнообразия.
-
Валидируйте аугментированные данные статистически перед обучением.
-
Калибруйте интенсивность аугментации под инструмент и таймфрейм.
Ссылки
- 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/