Глава 91: Transfer Learning для трейдинга
Обзор
Transfer Learning (перенос обучения) — это метод машинного обучения, при котором модель, обученная на одной задаче (исходный домен), адаптируется для выполнения другой, но связанной задачи (целевой домен). В трейдинге это означает использование знаний, полученных на одном рынке, классе активов или временном периоде, для улучшения прогнозов на другом. Этот подход особенно ценен, когда размеченные финансовые данные скудны, дороги в получении или когда рыночные условия меняются.
Содержание
- Введение
- Теоретические основы
- Типы Transfer Learning
- Методы адаптации домена
- Применение к финансовым рынкам
- Кросс-рыночный перенос
- Стратегия реализации
- Интеграция с Bybit
- Управление рисками
- Метрики производительности
- Сравнение с традиционными подходами
- Ссылки
Введение
Традиционные модели машинного обучения для трейдинга сталкиваются с несколькими фундаментальными проблемами:
- Нехватка данных: новые активы, рынки или инструменты не имеют достаточной истории
- Смена режимов: модели, обученные на одном режиме рынка, перестают работать при смене условий
- Высокая стоимость разметки: создание точных меток для торговых сигналов требует экспертизы
- Нестационарность: распределения финансовых временных рядов эволюционируют со временем
Почему Transfer Learning для трейдинга?
┌─────────────────────────────────────────────────────────────────────────┐│ Проблема Transfer Learning в трейдинге │├─────────────────────────────────────────────────────────────────────────┤│ ││ Традиционный подход: Transfer Learning: ││ ───────────────────── ────────────────── ││ Обучение с нуля для Предобучение на богатом ││ каждого нового рынка/актива источнике, адаптация к цели ││ ││ Проблема: Недостаточно данных Решение: Использование знаний ││ для новых/нишевых рынков из связанных доменов ││ ││ ┌────────────────────────────────────────────────────────────┐ ││ │ │ ││ │ Традиционный: Transfer Learning: │ ││ │ Источник: [S&P 500] Источник: [S&P 500] ──┐ │ ││ │ Цель: [Новый крипто] ✗ Предобучение │ │ ││ │ (недостаточно данных!) ↓ │ ││ │ Цель: [Новый крипто] ✓ │ ││ │ (дообучение на малых данных) │ ││ │ │ ││ └────────────────────────────────────────────────────────────┘ ││ │└─────────────────────────────────────────────────────────────────────────┘Ключевые преимущества
| Аспект | Традиционное ML | Transfer Learning |
|---|---|---|
| Требования к данным | Большой набор для каждой задачи | Маленький целевой набор |
| Время обучения | Полное обучение каждый раз | Быстрое дообучение |
| Проблема холодного старта | Не решается | Решается хорошо |
| Адаптация к режиму рынка | Переобучение с нуля | Дообучение модели |
| Кросс-рыночные знания | Нет обмена | Повторное использование |
| Покрытие новых активов | Нужна длинная история | Работает с малой историей |
Теоретические основы
Фреймворк Transfer Learning
Transfer Learning основан на предпосылке, что знания, полученные из исходного домена $D_S$ с задачей $T_S$, могут улучшить обучение в целевом домене $D_T$ с задачей $T_T$, где $D_S \neq D_T$ или $T_S \neq T_T$.
Домен $D = {X, P(X)}$ состоит из пространства признаков $X$ и маргинального распределения вероятностей $P(X)$. Задача $T = {Y, f(\cdot)}$ состоит из пространства меток $Y$ и предсказательной функции $f(\cdot)$.
Математическая формулировка
Цель: Имея данные исходного домена $D_S$ и задачу $T_S$, данные целевого домена $D_T$ и задачу $T_T$, transfer learning стремится улучшить целевую предсказательную функцию $f_T(\cdot)$, используя знания из $D_S$ и $T_S$.
Расхождение доменов: Расхождение между исходным и целевым доменами измеряется с помощью:
$$d_A(D_S, D_T) = 2 \left(1 - 2\epsilon(h)\right)$$
где $\epsilon(h)$ — ошибка классификатора $h$, обученного различать образцы из источника и цели. Это A-дистанция (прокси A-дистанция).
Граница обобщения: Для гипотезы $h$, обученной на исходном домене:
$$\epsilon_T(h) \leq \epsilon_S(h) + \frac{1}{2}d_A(D_S, D_T) + \lambda$$
где $\epsilon_T$ и $\epsilon_S$ — ошибки на целевом и исходном доменах, а $\lambda$ — ошибка идеальной совместной гипотезы.
Ключевые компоненты
┌────────────────────────────────────────────────────────────────────────┐│ Архитектура Transfer Learning │├────────────────────────────────────────────────────────────────────────┤│ ││ ИСХОДНЫЙ ДОМЕН (Богатый данными) ЦЕЛЕВОЙ ДОМЕН (Бедный данными) ││ ┌─────────────────────┐ ┌─────────────────────┐ ││ │ Большой набор данных│ │ Маленький набор │ ││ │ (напр., S&P 500 │ │ (напр., новый крипто│ ││ │ 5 лет дневных) │ │ 3 месяца дневных) │ ││ └──────────┬──────────┘ └──────────┬──────────┘ ││ │ │ ││ ▼ ▼ ││ ┌─────────────────────┐ ┌─────────────────────┐ ││ │ Экстрактор признаков│── ПЕРЕНОС ──→│ Экстрактор признаков│ ││ │ (общие слои) │ (веса) │ (замороженные/ │ ││ │ │ │ дообучаемые) │ ││ └──────────┬──────────┘ └──────────┬──────────┘ ││ │ │ ││ ▼ ▼ ││ ┌─────────────────────┐ ┌─────────────────────┐ ││ │ Классификатор │ │ Целевой │ ││ │ исходного домена │ │ классификатор │ ││ └─────────────────────┘ └─────────────────────┘ ││ ││ Фаза обучения: Фаза адаптации: ││ - Полное обучение на источнике - Заморозить нижние слои ││ - Изучение общих признаков - Дообучить верхние слои ││ - Извлечение паттернов - Обучить новый классификатор ││ │└────────────────────────────────────────────────────────────────────────┘Типы Transfer Learning
1. Индуктивный Transfer Learning
Исходная и целевая задачи различаются, но связаны. Данные исходного домена используются для улучшения целевой задачи.
Применение в трейдинге: обучение модели предсказания волатильности на рынке акций, затем перенос для предсказания волатильности на крипторынке.
Исходная задача: Предсказание волатильности S&P 500 (классификация)Целевая задача: Предсказание волатильности BTC/USDT (классификация)
Общие знания: Паттерны волатильности, динамика возврата к среднему, взаимосвязи объёма и цены2. Трансдуктивный Transfer Learning
Исходная и целевая задачи одинаковы, но домены различаются. Маргинальные распределения $P(X_S) \neq P(X_T)$.
Применение в трейдинге: модель, обученная на данных американских акций, адаптируется для акций развивающихся рынков, где распределения признаков различаются.
Исходный домен: Акции США (высокая ликвидность, узкие спреды)Целевой домен: Акции развивающихся рынков (низкая ликвидность, широкие спреды)
Одна задача: Предсказание направления ценыРазное распределение: Признаки микроструктуры рынка различаются3. Ненадзорный Transfer Learning
Размеченные данные не доступны ни в одном из доменов. Фокус на изучении представлений.
Применение в трейдинге: изучение общих рыночных представлений из неразмеченных ценовых данных по множеству активов, затем использование этих представлений для последующих задач.
Предобучение: Автоэнкодер на 10000+ временных рядах (без меток)Перенос: Использование изученных признаков для обнаружения аномалий на новых активахМетоды адаптации домена
Максимальное среднее расхождение (MMD)
MMD измеряет расстояние между исходным и целевым распределениями в воспроизводящем ядерном Гильбертовом пространстве (RKHS):
$$MMD(D_S, D_T) = \left| \frac{1}{n_s}\sum_{i=1}^{n_s}\phi(x_i^s) - \frac{1}{n_t}\sum_{j=1}^{n_t}\phi(x_j^t) \right|_{\mathcal{H}}$$
Минимизируя MMD во время обучения, модель изучает доменно-инвариантные признаки.
Корреляционное выравнивание (CORAL)
CORAL выравнивает статистики второго порядка (ковариацию) признаков исходного и целевого доменов:
$$\mathcal{L}_{CORAL} = \frac{1}{4d^2}|C_S - C_T|_F^2$$
где $C_S$ и $C_T$ — ковариационные матрицы признаков исходного и целевого доменов.
Состязательная адаптация домена
Использует доменный дискриминатор, обучаемый состязательно, для создания доменно-инвариантных признаков:
┌─────────────────────────────────────────────────────────────────────────┐│ Состязательная адаптация домена │├─────────────────────────────────────────────────────────────────────────┤│ ││ Данные источника ──┐ ││ ├──→ Экстрактор признаков ──┬──→ Классификатор ││ Данные цели ───────┘ (G) │ задачи ││ │ (предсказание) ││ │ ││ └──→ Доменный ││ дискриминатор ││ (источник/цель?) ││ ││ Обучение: ││ - Классификатор задачи: минимизация loss задачи ││ - Доменный дискриминатор: максимизация точности классификации доменов ││ - Экстрактор признаков: минимизация loss задачи + запутывание доменов ││ ││ Результат: Признаки, полезные для задачи, но ││ неразличимые между доменами ││ │└─────────────────────────────────────────────────────────────────────────┘Стратегии дообучения
Стратегия 1: Извлечение признаков (Всё заморожено)┌──────────────────────────────────────────┐│ Слой 1: [ЗАМОРОЖЕН] ← Предобученные ││ Слой 2: [ЗАМОРОЖЕН] ← Предобученные ││ Слой 3: [ЗАМОРОЖЕН] ← Предобученные ││ Новая голова: [ОБУЧАЕТСЯ] ← Случайная │└──────────────────────────────────────────┘
Стратегия 2: Частичное дообучение┌──────────────────────────────────────────┐│ Слой 1: [ЗАМОРОЖЕН] ← Предобученные ││ Слой 2: [ДООБУЧАЕТСЯ] ← Малый LR ││ Слой 3: [ДООБУЧАЕТСЯ] ← Средний LR ││ Новая голова: [ОБУЧАЕТСЯ] ← Большой LR │└──────────────────────────────────────────┘
Стратегия 3: Полное дообучение┌──────────────────────────────────────────┐│ Слой 1: [ДООБУЧАЕТСЯ] ← Очень малый LR ││ Слой 2: [ДООБУЧАЕТСЯ] ← Малый LR ││ Слой 3: [ДООБУЧАЕТСЯ] ← Средний LR ││ Новая голова: [ОБУЧАЕТСЯ] ← Большой LR │└──────────────────────────────────────────┘Применение к финансовым рынкам
Кросс-рыночный перенос
Перенос знаний между различными рынками (напр., акции в крипто):
- Выравнивание признаков: отображение признаков обоих рынков в общее пространство
- Перенос паттернов: распознавание похожих паттернов (моментум, возврат к среднему) на разных рынках
- Определение режима: перенос моделей определения режима между рынками
Кросс-активный перенос
Перенос внутри одного рынка между классами активов:
Исходные активы (Богатые данными): Целевые активы (Бедные данными):├── BTC/USDT (годы данных) → ├── Новый DeFi токен (недели данных)├── ETH/USDT (годы данных) → ├── Недавно листинговый токен└── Основные Forex пары → └── Экзотическая валютная параВременной перенос
Адаптация моделей между различными временными периодами или рыночными режимами:
Модель до COVID ──→ Дообучение ──→ Модель после COVID(обучена 2015-2019) (адаптирована к 2020+)
Модель бычьего рынка ──→ Дообучение ──→ Модель медвежьего рынка(обучена на восходящем тренде) (адаптирована к нисходящему)Пайплайн извлечения признаков
# Python пример: Пайплайн Transfer Learningimport torchimport torch.nn as nn
class TransferFeatureExtractor(nn.Module): """Экстрактор признаков, предобученный на исходном домене."""
def __init__(self, input_dim, hidden_dim, feature_dim): super().__init__() self.layers = nn.Sequential( nn.Linear(input_dim, hidden_dim), nn.BatchNorm1d(hidden_dim), nn.ReLU(), nn.Dropout(0.3), nn.Linear(hidden_dim, hidden_dim), nn.BatchNorm1d(hidden_dim), nn.ReLU(), nn.Dropout(0.3), nn.Linear(hidden_dim, feature_dim), )
def forward(self, x): return self.layers(x)
class DomainAdaptiveTrader(nn.Module): """Торговая модель с адаптацией домена через MMD."""
def __init__(self, feature_extractor, feature_dim, num_classes): super().__init__() self.feature_extractor = feature_extractor self.classifier = nn.Sequential( nn.Linear(feature_dim, 64), nn.ReLU(), nn.Linear(64, num_classes), )
def forward(self, x): features = self.feature_extractor(x) return self.classifier(features), features
def compute_mmd(self, source_features, target_features): """Максимальное среднее расхождение между доменами.""" source_mean = source_features.mean(dim=0) target_mean = target_features.mean(dim=0) return ((source_mean - target_mean) ** 2).sum()Стратегия реализации
Реализация на Python
Реализация на Python использует PyTorch для нейронных сетей и предоставляет:
TransferFeatureExtractor: предобучаемая сеть извлечения признаковDomainAdaptiveTrader: торговая модель с адаптацией доменаTransferLearningPipeline: сквозной пайплайн transfer learningBacktestEngine: бэктестинг стратегий с transfer learning
Реализация на Rust
Реализация на Rust обеспечивает высокопроизводительный transfer learning:
use transfer_learning_trading::{ TransferNetwork, DomainAdapter, MarketDomain, FeatureExtractor, TradingStrategy,};
// Создание сети transfer learninglet network = TransferNetwork::new( 20, // размерность входа 128, // скрытая размерность 64, // размерность признаков true, // использовать адаптацию домена);
// Предобучение на исходном домене (напр., основные крипто-пары)let source_domain = MarketDomain::crypto("BTC/USDT", "ETH/USDT");network.pretrain(&source_data, &source_labels, &pretrain_config);
// Адаптация к целевому домену (напр., новый токен)let target_domain = MarketDomain::crypto("NEW/USDT");let adapter = DomainAdapter::mmd(network.feature_extractor());adapter.adapt(&target_data, &adapt_config);
// Генерация торговых сигналовlet strategy = TradingStrategy::new(network, adapter);let signals = strategy.predict(&new_data);Быстрый старт
Python:
cd 91_transfer_learning_trading/pythonpip install torch numpy pandas scikit-learnpython train.py --source BTC/USDT --target ETH/USDT --method fine_tunepython backtest.py --model saved_model.pt --data target_data.csvRust:
cd 91_transfer_learning_tradingcargo run --example basic_transfercargo run --example domain_adaptationcargo run --example bybit_liveИнтеграция с Bybit
Пайплайн данных в реальном времени
use transfer_learning_trading::data::BybitClient;
// Инициализация клиентаlet client = BybitClient::new(BybitConfig::default());
// Получение данных исходного домена (устоявшиеся пары)let btc_data = client.fetch_klines("BTCUSDT", "1h", 1000).await?;let eth_data = client.fetch_klines("ETHUSDT", "1h", 1000).await?;
// Получение данных целевого домена (новые пары)let target_data = client.fetch_klines("NEWUSDT", "1h", 100).await?;
// Предобучение на источнике, адаптация к целиlet model = TransferNetwork::new(20, 128, 64, true);model.pretrain_on_klines(&[btc_data, eth_data], &config);model.adapt_to_klines(&target_data, &adapt_config);Поддерживаемые эндпоинты
| Эндпоинт | Описание | Применение |
|---|---|---|
/v5/market/kline | Исторические свечи | Данные источника/цели |
/v5/market/tickers | Текущие тикеры | Живые сигналы |
/v5/market/orderbook | Глубина стакана | Признаки микроструктуры |
/v5/market/recent-trade | Последние сделки | Анализ объёма |
Конструирование признаков из данных Bybit
Данные OHLCV → Извлечение признаков:├── Ценовые признаки: доходности, лог-доходности, волатильность├── Объёмные признаки: VWAP, коэффициент объёма, OBV├── Технические индикаторы: RSI, MACD, Bollinger Bands├── Микроструктура: спред bid-ask, дисбаланс ордеров└── Кросс-активные: корреляция, бета, относительная силаУправление рисками
Специфические риски Transfer Learning
-
Негативный перенос: когда знания исходного домена ухудшают целевую производительность
- Смягчение: мониторинг loss на валидации целевого домена; остановка адаптации при расхождении
-
Сдвиг домена: когда целевой домен со временем отдаляется от исходного
- Смягчение: непрерывная адаптация со скользящим окном
-
Переобучение на источнике: модель слишком специализирована на исходном домене
- Смягчение: регуляризация, ранняя остановка, состязательное обучение
Контроль рисков
┌─────────────────────────────────────────────────────────────────────────┐│ Фреймворк управления рисками │├─────────────────────────────────────────────────────────────────────────┤│ ││ Проверки перед переносом: ││ ├── Показатель схожести доменов > порог (0.7) ││ ├── Точность исходной модели на валидации > минимум (60%) ││ └── Достаточно целевых данных для валидации (>100 образцов) ││ ││ Во время адаптации: ││ ├── Мониторинг MMD между признаками источника и цели ││ ├── Отслеживание loss на целевой валидации (стоп при росте) ││ ├── Ограничение эпох дообучения (предотвращение переобучения) ││ └── Обрезка градиентов во время адаптации ││ ││ После переноса (торговля): ││ ├── Максимальный размер позиции: 2% от портфеля ││ ├── Стоп-лосс: 1.5% на сделку ││ ├── Максимальная дневная просадка: 3% ││ ├── Порог уверенности для сигналов: 0.65 ││ └── Уменьшение позиции для доменов с низкой схожестью ││ │└─────────────────────────────────────────────────────────────────────────┘Метрики производительности
Оценка модели
| Метрика | Описание | Целевое значение |
|---|---|---|
| Точность на цели | Точность классификации на целевом домене | > 55% |
| Выигрыш от переноса | Улучшение по сравнению с обучением с нуля | > 5% |
| A-дистанция | Мера расхождения доменов | < 1.5 |
| MMD | Выравнивание распределений признаков | < 0.1 |
| Скорость адаптации | Эпохи до сходимости на цели | < 50 |
Торговые метрики
| Метрика | Описание | Целевое значение |
|---|---|---|
| Sharpe Ratio | Доходность с учётом риска | > 1.5 |
| Sortino Ratio | Доходность с учётом нисходящего риска | > 2.0 |
| Максимальная просадка | Наибольшее падение от пика | < 15% |
| Процент выигрышей | Процент прибыльных сделок | > 52% |
| Profit Factor | Валовая прибыль / Валовый убыток | > 1.3 |
| Calmar Ratio | Годовая доходность / Макс. просадка | > 1.0 |
Сравнение с традиционными подходами
| Аспект | Обучение с нуля | Transfer Learning | Адаптация домена |
|---|---|---|---|
| Требования к данным | Высокие (>1000 образцов) | Низкие (>100 образцов) | Средние (>200 образцов) |
| Время обучения | Часы | Минуты (дообучение) | Минуты-Часы |
| Выход на новый рынок | Медленный | Быстрый | Средний |
| Адаптация к режиму | Плохая | Хорошая | Отличная |
| Сложность реализации | Низкая | Средняя | Высокая |
| Риск негативного переноса | Нет | Средний | Низкий |
| Кросс-рыночное обобщение | Нет | Хорошее | Отличное |
Структура проекта
91_transfer_learning_trading/├── README.md # Этот файл (англ.)├── README.ru.md # Перевод на русский├── readme.simple.md # Упрощённое объяснение (англ.)├── readme.simple.ru.md # Упрощённое объяснение (рус.)├── README.specify.md # Техническое задание├── Cargo.toml # Манифест Rust-проекта├── src/│ ├── lib.rs # Корень библиотеки│ ├── network/│ │ ├── mod.rs # Модуль сети│ │ ├── feature_extractor.rs # Слои извлечения признаков│ │ ├── domain_adapter.rs # Методы адаптации домена│ │ └── transfer.rs # Сеть transfer learning│ ├── data/│ │ ├── mod.rs # Модуль данных│ │ ├── features.rs # Конструирование признаков│ │ ├── bybit.rs # Интеграция с Bybit API│ │ └── stock.rs # Загрузчик биржевых данных│ ├── strategy/│ │ ├── mod.rs # Модуль стратегии│ │ └── transfer_strategy.rs # Торговая стратегия на основе переноса│ ├── training/│ │ ├── mod.rs # Модуль обучения│ │ └── trainer.rs # Тренер transfer learning│ └── utils/│ ├── mod.rs # Модуль утилит│ └── metrics.rs # Метрики производительности├── examples/│ ├── basic_transfer.rs # Базовый пример transfer learning│ ├── domain_adaptation.rs # Пример адаптации домена│ └── bybit_live.rs # Пример живой торговли через Bybit├── tests/│ └── integration_tests.rs # Интеграционные тесты└── python/ ├── model.py # Определения моделей PyTorch ├── train.py # Скрипт обучения └── backtest.py # Скрипт бэктестингаСсылки
-
A Survey on Transfer Learning — Pan, S.J. & Yang, Q. (2010). IEEE Transactions on Knowledge and Data Engineering.
-
Transfer Learning for Financial Time Series — arXiv:2102.09873 (2021)
-
Domain Adaptation for Financial Trading — Обучение адаптации между финансовыми доменами с помощью состязательных методов.
-
How transferable are features in deep neural networks? — Yosinski, J. et al. (2014). NeurIPS.
-
Deep Domain Confusion — Tzeng, E. et al. (2014). Максимизация доменной путаницы для адаптации домена.
-
CORAL: Correlation Alignment for Domain Adaptation — Sun, B. & Saenko, K. (2016). ECCV.