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

Глава 91: Transfer Learning для трейдинга

Обзор

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

Содержание

  1. Введение
  2. Теоретические основы
  3. Типы Transfer Learning
  4. Методы адаптации домена
  5. Применение к финансовым рынкам
  6. Кросс-рыночный перенос
  7. Стратегия реализации
  8. Интеграция с Bybit
  9. Управление рисками
  10. Метрики производительности
  11. Сравнение с традиционными подходами
  12. Ссылки

Введение

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

  • Нехватка данных: новые активы, рынки или инструменты не имеют достаточной истории
  • Смена режимов: модели, обученные на одном режиме рынка, перестают работать при смене условий
  • Высокая стоимость разметки: создание точных меток для торговых сигналов требует экспертизы
  • Нестационарность: распределения финансовых временных рядов эволюционируют со временем

Почему Transfer Learning для трейдинга?

┌─────────────────────────────────────────────────────────────────────────┐
│ Проблема Transfer Learning в трейдинге │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Традиционный подход: Transfer Learning: │
│ ───────────────────── ────────────────── │
│ Обучение с нуля для Предобучение на богатом │
│ каждого нового рынка/актива источнике, адаптация к цели │
│ │
│ Проблема: Недостаточно данных Решение: Использование знаний │
│ для новых/нишевых рынков из связанных доменов │
│ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Традиционный: Transfer Learning: │ │
│ │ Источник: [S&P 500] Источник: [S&P 500] ──┐ │ │
│ │ Цель: [Новый крипто] ✗ Предобучение │ │ │
│ │ (недостаточно данных!) ↓ │ │
│ │ Цель: [Новый крипто] ✓ │ │
│ │ (дообучение на малых данных) │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Ключевые преимущества

АспектТрадиционное MLTransfer 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 │
└──────────────────────────────────────────┘

Применение к финансовым рынкам

Кросс-рыночный перенос

Перенос знаний между различными рынками (напр., акции в крипто):

  1. Выравнивание признаков: отображение признаков обоих рынков в общее пространство
  2. Перенос паттернов: распознавание похожих паттернов (моментум, возврат к среднему) на разных рынках
  3. Определение режима: перенос моделей определения режима между рынками

Кросс-активный перенос

Перенос внутри одного рынка между классами активов:

Исходные активы (Богатые данными): Целевые активы (Бедные данными):
├── BTC/USDT (годы данных) → ├── Новый DeFi токен (недели данных)
├── ETH/USDT (годы данных) → ├── Недавно листинговый токен
└── Основные Forex пары → └── Экзотическая валютная пара

Временной перенос

Адаптация моделей между различными временными периодами или рыночными режимами:

Модель до COVID ──→ Дообучение ──→ Модель после COVID
(обучена 2015-2019) (адаптирована к 2020+)
Модель бычьего рынка ──→ Дообучение ──→ Модель медвежьего рынка
(обучена на восходящем тренде) (адаптирована к нисходящему)

Пайплайн извлечения признаков

# Python пример: Пайплайн Transfer Learning
import torch
import 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 learning
  • BacktestEngine: бэктестинг стратегий с transfer learning

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

Реализация на Rust обеспечивает высокопроизводительный transfer learning:

use transfer_learning_trading::{
TransferNetwork, DomainAdapter, MarketDomain,
FeatureExtractor, TradingStrategy,
};
// Создание сети transfer learning
let 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/python
pip install torch numpy pandas scikit-learn
python train.py --source BTC/USDT --target ETH/USDT --method fine_tune
python backtest.py --model saved_model.pt --data target_data.csv

Rust:

Окно терминала
cd 91_transfer_learning_trading
cargo run --example basic_transfer
cargo run --example domain_adaptation
cargo 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

  1. Негативный перенос: когда знания исходного домена ухудшают целевую производительность

    • Смягчение: мониторинг loss на валидации целевого домена; остановка адаптации при расхождении
  2. Сдвиг домена: когда целевой домен со временем отдаляется от исходного

    • Смягчение: непрерывная адаптация со скользящим окном
  3. Переобучение на источнике: модель слишком специализирована на исходном домене

    • Смягчение: регуляризация, ранняя остановка, состязательное обучение

Контроль рисков

┌─────────────────────────────────────────────────────────────────────────┐
│ Фреймворк управления рисками │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Проверки перед переносом: │
│ ├── Показатель схожести доменов > порог (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 # Скрипт бэктестинга

Ссылки

  1. A Survey on Transfer Learning — Pan, S.J. & Yang, Q. (2010). IEEE Transactions on Knowledge and Data Engineering.

  2. Transfer Learning for Financial Time Series — arXiv:2102.09873 (2021)

  3. Domain Adaptation for Financial Trading — Обучение адаптации между финансовыми доменами с помощью состязательных методов.

  4. How transferable are features in deep neural networks? — Yosinski, J. et al. (2014). NeurIPS.

  5. Deep Domain Confusion — Tzeng, E. et al. (2014). Максимизация доменной путаницы для адаптации домена.

  6. CORAL: Correlation Alignment for Domain Adaptation — Sun, B. & Saenko, K. (2016). ECCV.