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

Глава 233: Динамическая факторная модель RVRAE

1. Введение

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

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

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

В этой главе мы разрабатываем математические основы RVRAE, сравниваем его со статическими факторными подходами, подробно исследуем его архитектуру и реализуем полную систему на Rust с интеграцией рыночных данных Bybit.

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

2.1 Последовательный вариационный вывод

RVRAE строится на фреймворке вариационной рекуррентной нейронной сети (VRNN). Дана последовательность наблюдений x = (x_1, x_2, …, x_T), мы стремимся обучить генеративную модель с латентными переменными z = (z_1, z_2, …, z_T). Совместное распределение факторизуется как:

p(x_1:T, z_1:T) = prod_{t=1}^{T} p(x_t | z_{<=t}, x_{<t}) * p(z_t | x_{<t}, z_{<t})

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

p(z_t | x_{<t}, z_{<t}) = N(mu_prior_t, sigma_prior_t)

где mu_prior_t и sigma_prior_t вычисляются из h_{t-1}, скрытого состояния RNN, которое суммирует историю.

2.2 Рекуррентный энкодер

Энкодер (сеть вывода) производит приближённое апостериорное распределение:

q(z_t | x_{<=t}, z_{<t}) = N(mu_enc_t, sigma_enc_t)

Энкодер принимает на вход текущее наблюдение x_t, конкатенированное со скрытым состоянием RNN h_{t-1}:

h_enc_t = GRU_enc(x_t, h_{t-1})
mu_enc_t = W_mu * h_enc_t + b_mu
log_sigma_enc_t = W_sigma * h_enc_t + b_sigma

Это критически важно: апостериорное распределение в момент t зависит не только от x_t, но и от всей истории через h_{t-1}. Это позволяет модели использовать временной контекст при выводе текущего латентного состояния.

2.3 Трюк репараметризации

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

z_t = mu_enc_t + sigma_enc_t * epsilon_t, где epsilon_t ~ N(0, I)

Это позволяет обратному распространению проходить через операцию сэмплирования. Полученный z_t затем подаётся как в декодер, так и в обновление состояния RNN.

2.4 Рекуррентный декодер

Декодер реконструирует x_t из z_t и скрытого состояния:

h_dec_t = GRU_dec(z_t, h_{t-1})
x_hat_t = W_dec * h_dec_t + b_dec

2.5 Последовательный ELBO с KL-отжигом

Целевая функция обучения — последовательная нижняя оценка свидетельства (ELBO):

L = sum_{t=1}^{T} [ E_q[log p(x_t | z_t, h_{t-1})] - beta_t * KL(q(z_t | x_{<=t}, z_{<t}) || p(z_t | x_{<t}, z_{<t})) ]

KL-дивергенция между двумя гауссианами имеет замкнутую форму:

KL(q || p) = 0.5 * sum_j [ log(sigma_p_j / sigma_q_j) + (sigma_q_j^2 + (mu_q_j - mu_p_j)^2) / sigma_p_j^2 - 1 ]

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

beta_t = min(1.0, epoch / annealing_epochs)

Начиная с beta близкого к нулю, позволяет модели сначала обучить полезные представления в z, а затем постепенно применяет вариационное ограничение.

3. Динамические vs статические факторы

3.1 Ограничения статических факторных моделей

Традиционные факторные модели, такие как PCA или стандартный факторный анализ, предполагают:

x_t = Lambda * f_t + epsilon_t

где Lambda (матрица нагрузок) постоянна во времени. Даже если f_t варьируется, связь между факторами и наблюдаемыми переменными остаётся фиксированной. Это предположение нарушается когда:

  • Рыночные режимы меняются (например, среда risk-on vs risk-off)
  • Корреляции эволюционируют (например, скачки корреляций в кризисные периоды)
  • Возникают новые рыночные структуры (например, созревание рынка криптовалют)
  • Секторальные ротации изменяют, какие активы движутся совместно

PCA на скользящем окне частично решает эту проблему, но вводит чувствительность к длине окна и не может моделировать плавные переходы.

3.2 Временные факторные нагрузки

RVRAE неявно обучает временные факторные нагрузки через взаимодействие между z_t и скрытым состоянием декодера. Реконструкция в момент t зависит от:

x_hat_t = f(z_t, h_{t-1})

Поскольку h_{t-1} несёт информацию обо всей истории, эффективное отображение из z_t в x_hat_t изменяется во времени. Это означает, что «нагрузка» каждого актива на каждый фактор сама является динамической величиной, адаптирующейся к текущему состоянию рынка.

3.3 Режимно-адаптивные факторы

Латентная траектория z_1, z_2, …, z_T естественным образом фиксирует смены режимов. Когда рынок претерпевает структурный сдвиг, латентные факторы перемещаются в другую область латентного пространства. Это можно обнаружить, отслеживая:

  • Скорость факторов: ||z_t - z_{t-1}|| указывает, насколько быстро меняется структура рынка
  • Ускорение факторов: изменения скорости сигнализируют о переходах режимов
  • Кластеризация факторов: периоды, когда z_t группируется в определённых регионах, указывают на стабильные режимы

3.4 Улавливание нестационарности

Рекуррентная структура RVRAE по своей природе подходит для нестационарных данных. Скрытое состояние h_t действует как достаточная статистика для истории, позволяя модели адаптировать своё поведение на основе наблюдений. Это контрастирует со статическими моделями, которые должны переоцениваться на новых окнах и не могут плавно отслеживать постепенные изменения.

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

4.1 Динамическое разложение факторов риска

RVRAE позволяет разлагать риск портфеля на временные факторные вклады. В каждый момент t латентное z_t представляет текущие факторные экспозиции. Анализируя связь доходности портфеля с изменениями z_t, трейдеры могут понять:

  • Какие латентные факторы в настоящее время определяют P&L портфеля
  • Как факторные экспозиции сместились за последние периоды
  • Становится ли портфель более или менее концентрированным в определённых факторных ставках

Это более информативно, чем статическое разложение рисков, поскольку отражает текущую структуру рынка, а не среднее за некоторое историческое окно.

4.2 Построение портфеля с временными факторами

Динамические факторы обеспечивают действительно адаптивное построение портфелей. Процесс работает следующим образом:

  1. Обучить RVRAE на недавних данных доходности нескольких активов
  2. Извлечь траекторию латентных факторов z_1:T
  3. Оценить временную ковариацию факторов по недавним значениям z_t
  4. Отобразить ковариацию факторов обратно в ковариацию активов через декодер
  5. Оптимизировать веса портфеля с использованием временной ковариации

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

4.3 Отслеживание рыночного режима через латентную динамику

Латентное пространство обученного RVRAE обеспечивает низкоразмерное представление состояния рынка. Отслеживание режима включает:

  • Онлайн-вывод: по мере поступления новых данных запускаем энкодер вперёд для получения z_t
  • Маркировка режимов: кластеризация исторических траекторий z_t по режимам
  • Обнаружение переходов: мониторинг расстояния от текущего z_t до центроидов режимов
  • Предсказательные сигналы: использование динамики z_t (скорость, направление) как альфа-сигналов

Преимущество перед явными моделями режимов (такими как скрытые марковские модели) состоит в том, что RVRAE обучает структуру режимов непосредственно из данных без необходимости предопределять количество режимов или структуру переходов.

4.4 Факторный моментум и возврат к среднему

Временная структура z_t позволяет реализовать стратегии тайминга на уровне факторов:

  • Факторный моментум: когда z_t показывает устойчивое направленное движение, увеличивать позиции в активах с положительной нагрузкой на этот фактор
  • Факторный возврат к среднему: когда z_t значительно отклоняется от исторического среднего, ожидать возврата и позиционироваться соответственно
  • Тайминг волатильности факторов: когда ||z_t - z_{t-1}|| повышен, сокращать общую экспозицию

5. Архитектура RVRAE

5.1 Общая структура

Архитектура RVRAE состоит из трёх взаимосвязанных компонентов:

Вход x_t ──> [GRU Энкодер] ──> (mu_t, sigma_t)
| |
v v
[Скрытое состояние h_t] [Репараметризация] ──> z_t
| |
v v
[GRU Декодер] <──────────┘
|
v
x_hat_t (реконструкция)

5.2 Детали ячейки GRU

Мы используем управляемые рекуррентные блоки (GRU) как для энкодера, так и для декодера. Уравнения обновления GRU:

r_t = sigmoid(W_r * [h_{t-1}, x_t]) (вентиль сброса)
u_t = sigmoid(W_u * [h_{t-1}, x_t]) (вентиль обновления)
h_tilde = tanh(W_h * [r_t * h_{t-1}, x_t]) (кандидат)
h_t = (1 - u_t) * h_{t-1} + u_t * h_tilde (новое состояние)

GRU предпочтительнее LSTM здесь из-за более простой параметризации (меньше параметров для обучения), что полезно при обычно ограниченных финансовых обучающих данных.

5.3 Временная KL-дивергенция

Член KL на каждом временном шаге измеряет, насколько апостериорное распределение энкодера отклоняется от априорного. В RVRAE априорное распределение не является фиксированным N(0, I), а само обусловлено историей:

p(z_t | h_{t-1}) = N(mu_prior(h_{t-1}), sigma_prior(h_{t-1}))

Это временное априорное распределение позволяет модели обучать гладкую латентную динамику. KL между апостериорным и обученным априорным распределением фиксирует, насколько «неожиданным» является текущее наблюдение относительно ожиданий модели на основе истории.

5.4 Процедура обучения

  1. Прямой проход: обработка последовательности через GRU энкодера, сэмплирование z_t на каждом шаге, реконструкция через GRU декодера
  2. Вычисление функции потерь: суммирование ошибки реконструкции (MSE) и KL-дивергенции по временным шагам с применением beta-отжига
  3. Обратное распространение через время: градиенты проходят как через латентное сэмплирование, так и через рекуррентные связи
  4. Ограничение градиентов: существенно для стабильного обучения рекуррентных моделей на финансовых данных

6. Пошаговый обзор реализации

Реализация на Rust предоставляет полную систему RVRAE со следующими компонентами:

6.1 Ячейка GRU

Структура GRUCell реализует управляемый рекуррентный блок с вентилем сброса, вентилем обновления и вычислением кандидата. Веса инициализируются с помощью инициализации Ксавье для стабильного обучения.

6.2 Рекуррентный энкодер

RecurrentEncoder обрабатывает входные последовательности через GRU и выводит вектора среднего и логарифма дисперсии для каждого временного шага для приближённого апостериорного распределения.

6.3 Рекуррентный декодер

RecurrentDecoder принимает выбранные латентные вектора z_t и производит реконструированные наблюдения, также используя GRU для поддержания временной когерентности.

6.4 Модель RVRAE

Структура верхнего уровня RVRAE координирует энкодер, декодер и сеть априорного распределения. Она реализует:

  • forward(): полный прямой проход с сэмплированием
  • compute_loss(): последовательный ELBO с KL-отжигом
  • extract_factors(): производит латентную траекторию z_1:T для анализа
  • train(): цикл обучения с настраиваемыми эпохами и скоростью обучения

6.5 Анализ факторов

Структура FactorDynamics предоставляет инструменты для анализа извлечённых факторов:

  • Вычисление автокорреляции для каждого фактора
  • Обнаружение смены режимов на основе скорости факторов
  • Анализ корреляции факторов во времени

Полная реализация находится в rust/src/lib.rs, а полный торговый рабочий процесс — в rust/examples/trading_example.rs.

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

Реализация получает реальные рыночные данные из публичного API Bybit:

GET https://api.bybit.com/v5/market/kline?category=linear&symbol=BTCUSDT&interval=60&limit=200

Конвейер данных:

  1. Получение данных OHLCV kline для нескольких символов (BTCUSDT, ETHUSDT)
  2. Вычисление логарифмических доходностей из цен закрытия
  3. Нормализация доходностей к нулевому среднему и единичной дисперсии
  4. Форматирование как матрица многомерного временного ряда
  5. Подача в RVRAE для обучения и извлечения факторов

Данные по нескольким активам выравниваются по временным меткам и объединяются в единую матрицу наблюдений, где каждая строка — временной шаг, а каждый столбец — доходность актива.

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

  1. RVRAE улавливает временную структуру рынка: В отличие от статических факторных моделей, RVRAE обучает эволюцию латентных факторов во времени, создавая траекторию z_1:T, представляющую изменяющееся состояние рынка.

  2. Архитектура последовательного VAE учитывает временной порядок: Рекуррентные энкодер и декодер поддерживают скрытые состояния, несущие исторический контекст, позволяя модели использовать временные паттерны в динамике факторов.

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

  4. Динамические факторы обеспечивают адаптивные торговые стратегии: Временное факторное разложение поддерживает режимно-осведомлённое построение портфелей, динамическое управление рисками и стратегии тайминга факторов, которые статические модели не могут обеспечить.

  5. Скорость факторов сигнализирует о смене режимов: Мониторинг скорости изменения латентных факторов обеспечивает систему раннего предупреждения о переходах рыночных режимов.

  6. Реализация на Rust обеспечивает производственную производительность: Архитектура на основе GRU, реализованная на Rust, обеспечивает вычислительную эффективность, необходимую для извлечения факторов и ребалансировки портфеля в реальном времени.

  7. Интеграция с Bybit позволяет анализировать факторы криптовалют: Волатильный, круглосуточный крипторынок является идеальным полигоном для динамических факторных моделей.

  8. Временное априорное распределение — ключевой элемент: Использование обученного, зависящего от истории априорного распределения вместо фиксированного N(0,I) позволяет RVRAE моделировать гладкую динамику факторов и различать ожидаемые и неожиданные движения рынка.