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

Глава 236: Условный VAE для трейдинга

1. Введение — CVAE: обусловленная генерация с использованием вспомогательной информации

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

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

Эта возможность является трансформационной для торговых приложений. Вместо генерации случайных рыночных сценариев с надеждой, что некоторые из них представят стрессовые условия, трейдер может явно запросить: «Сгенерируйте 10 000 реалистичных траекторий доходности, обусловленных медвежьим рыночным режимом с растущей волатильностью». CVAE создаёт сценарии, которые статистически соответствуют историческим динамикам медвежьего рынка, обеспечивая при этом разнообразие, необходимое для устойчивой оценки рисков.

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

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

Целевая функция CVAE

Стандартный VAE максимизирует нижнюю границу свидетельства (ELBO):

ELBO = E_q(z|x)[log p(x|z)] - KL(q(z|x) || p(z))

CVAE расширяет это, обуславливая каждое распределение вспомогательной переменной c:

ELBO(x, c) = E_q(z|x,c)[log p(x|z,c)] - KL(q(z|x,c) || p(z|c))

Эта целевая функция включает три ключевых компонента:

Кодировщик q(z|x,c): Сеть распознавания теперь принимает как входные данные x, так и условие c и выдаёт параметры приближённого апостериорного распределения латентных переменных. Формально:

q(z|x,c) = N(z; mu_phi(x,c), sigma_phi(x,c))

где mu_phi и sigma_phi — нейронные сети с параметрами phi, отображающие конкатенацию (или иную комбинацию) x и c в среднее и дисперсию гауссовского распределения.

Декодировщик p(x|z,c): Генеративная сеть восстанавливает вход по латентному коду z и условию c:

p(x|z,c) = N(x; mu_theta(z,c), sigma_theta(z,c))

Это гарантирует, что декодировщик знает, для какого режима он должен генерировать, предотвращая усреднение по режимам.

Условный приор p(z|c): В отличие от стандартного VAE, использующего фиксированный приор N(0,I), CVAE обучает зависящий от условия приор:

p(z|c) = N(z; mu_prior(c), sigma_prior(c))

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

Член KL-дивергенции

KL-дивергенция между двумя гауссианами q(z|x,c) и p(z|c) имеет аналитическое решение:

KL = 0.5 * sum(log(sigma_prior^2 / sigma_encoder^2) - 1 + (sigma_encoder^2 + (mu_encoder - mu_prior)^2) / sigma_prior^2)

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

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

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

z = mu_phi(x,c) + sigma_phi(x,c) * epsilon, epsilon ~ N(0,I)

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

3. Стратегии обуславливания

Способ внедрения обуславливающей информации в архитектуру сети существенно влияет на производительность модели. Существуют три основные стратегии:

Конкатенация

Простейший подход: конкатенация вектора условия с входом на каждом релевантном слое. Для one-hot вектора режима r размерности K и входа x размерности D кодировщик получает вектор размерности D+K. Это просто в реализации и хорошо работает, когда пространство обуславливания низкоразмерно.

Преимущества: Простота, нет дополнительных параметров, надёжная работа. Недостатки: Условие может быть «размыто» входными данными в глубоких сетях.

FiLM (Feature-wise Linear Modulation)

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

FiLM(h; c) = gamma(c) * h + beta(c)

где gamma и beta — обученные функции условия c. Это более выразительно, чем конкатенация, поскольку модулирует обработку информации, а не только вход.

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

Обуславливание на основе внимания

Механизмы перекрёстного внимания позволяют модели избирательно обращать внимание на различные аспекты условия:

Attention(Q=h, K=c, V=c) = softmax(h * c^T / sqrt(d)) * c

Это наиболее мощно, когда условие само по себе высокоразмерно или последовательно (например, временной ряд макроиндикаторов).

Преимущества: Наибольшая выразительность, обработка сложных условий, избирательное внимание. Недостатки: Наибольшие вычислительные затраты, требует больше данных для обучения.

В нашей реализации мы используем конкатенацию для обуславливания режимом (небольшое дискретное множество) и модуляцию в стиле FiLM для непрерывных макроиндикаторов, балансируя простоту и выразительность.

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

Генерация сценариев, обусловленных режимом

Основное применение — генерация синтетических рыночных сценариев, обусловленных конкретными режимами. Риск-менеджер может:

  1. Стресс-тестирование: Генерировать тысячи сценариев медвежьего рынка для оценки распределений просадки портфеля в неблагоприятных условиях, не ограничиваясь несколькими историческими медвежьими рынками.

  2. Режимо-специфичный VaR: Вычислять Value-at-Risk отдельно для каждого режима, затем взвешивать по вероятности нахождения в каждом режиме. Это даёт более точные оценки риска, чем безусловный VaR.

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

Секторно-специфичное моделирование доходностей

Обуславливая на метках секторов, CVAE может генерировать распределения доходностей, учитывающие секторную специфику:

  • Технологические акции демонстрируют более высокую волатильность и эффекты моментума
  • Коммунальные компании показывают меньшую волатильность и тенденции к возврату к среднему
  • Финансовые акции имеют тяжёлые хвосты, коррелированные с кредитными условиями

CVAE, обусловленный сектором, улавливает эти различия, обеспечивая более реалистичную поперечную симуляцию.

Портфельная симуляция, обусловленная макроэкономикой

Обуславливание на макроэкономических индикаторах (процентные ставки, инфляция, рост ВВП, безработица) позволяет CVAE генерировать рыночные сценарии, согласованные с конкретной макросредой:

  • «Как будет выглядеть мой портфель, если инфляция вырастет до 5% и ФРС повысит ставки на 200 базисных пунктов?»
  • «Сгенерируйте сценарии, согласованные с рецессией, где безработица достигает 7%.»

Эта возможность неоценима для стратегического распределения активов и долгосрочного планирования.

5. CVAE против стандартного VAE — почему обуславливание важно

Коллапс мод и усреднение

Стандартные VAE страдают от усреднения мод: когда данные содержат отдельные кластеры (режимы), декодировщик учится производить выходы, которые являются средним всех мод. Это приводит к сгенерированным образцам, которые на самом деле не похожи ни на одно реальное рыночное условие — они слишком волатильны для спокойных рынков и недостаточно волатильны для кризисных.

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

Количественные улучшения

На практике обуславливание обеспечивает несколько измеримых улучшений:

  1. Меньшая ошибка восстановления: Режимо-специфичное восстановление более точно, потому что декодировщику не нужно одновременно обрабатывать все режимы.

  2. Лучшее соответствие распределений: Расстояние Вассерштейна между сгенерированными и реальными распределениями доходностей значительно уменьшается при использовании обуславливания, обычно на 30-50%.

  3. Более реалистичное поведение хвостов: Режимо-специфичная генерация даёт более точные распределения экстремальных доходностей, что критически важно для управления рисками.

  4. Управляемость: Возможность указать условие генерации открывает приложения, невозможные со стандартными VAE.

Стоимость обуславливания

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

6. Пошаговое описание реализации на Rust

Наша реализация на Rust предоставляет полную систему CVAE со следующей архитектурой:

Основные компоненты

ConditionEncoder преобразует исходную обуславливающую информацию в представление фиксированной размерности. Для дискретных условий, таких как рыночные режимы (бычий/медвежий/боковой), используется one-hot кодирование. Для непрерывных условий, таких как макроиндикаторы, применяется обученное линейное преобразование.

CVAEEncoder принимает конкатенацию входных признаков и закодированного условия и выдаёт среднее и логарифм дисперсии приближённого апостериорного распределения q(z|x,c). Он использует двухслойную архитектуру прямого распространения с активациями ReLU.

CVAEDecoder принимает конкатенацию латентных семплов и закодированного условия и восстанавливает вход. Он зеркально отражает архитектуру кодировщика.

ConditionalPrior отображает условие в режимо-специфичное распределение приора p(z|c), позволяя разным режимам занимать разные области латентного пространства.

Цикл обучения

Обучение происходит следующим образом:

  1. Кодирование входа и условия для получения параметров апостериорного распределения
  2. Семплирование из апостериорного распределения с использованием репараметризации
  3. Декодирование семпла с условием для получения восстановления
  4. Вычисление параметров условного приора
  5. Расчёт ELBO-потерь (восстановление + KL-дивергенция)
  6. Обновление параметров через градиентный спуск

Обнаружение режима

Наша реализация включает простой, но эффективный детектор режима на основе скользящей статистики:

  • Бычий рынок: Положительная скользящая средняя доходность с волатильностью ниже средней
  • Медвежий рынок: Отрицательная скользящая средняя доходность с волатильностью выше средней
  • Боковой: Низкая абсолютная доходность с волатильностью ниже средней

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

Метрики качества

Мы оцениваем сгенерированные образцы по режимам, используя:

  • Соответствие среднего и дисперсии: Насколько близко сгенерированная статистика соответствует реальным данным внутри каждого режима
  • Расстояние между распределениями: Упрощённое расстояние типа Вассерштейна между сгенерированными и реальными распределениями
  • Точность хвостов: Насколько хорошо захвачены экстремальные квантили

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

Наша реализация получает реальные рыночные данные через API Bybit, в частности данные кэндлстиков (kline) BTCUSDT. Интеграция работает следующим образом:

  1. Endpoint API: Мы используем https://api.bybit.com/v5/market/kline для получения исторических данных OHLCV.

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

  3. Разметка режимов: Полученные ценовые данные обрабатываются нашим детектором режимов для получения меток условий. Каждое временное окно классифицируется как бычье, медвежье или боковое на основе скользящей статистики.

  4. Построение признаков: Каждый обучающий образец состоит из окна доходностей (например, 5 последовательных доходностей), сопряжённого с меткой режима для этого окна.

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

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

  1. Условные VAE расширяют стандартные VAE, включая вспомогательную информацию (режим, сектор, макроэкономика) в кодировщик, декодировщик и приор, обеспечивая контролируемую генерацию рыночных сценариев.

  2. Условный ELBO естественно декомпозируется на режимо-специфичные члены восстановления и KL, гарантируя, что каждый режим получает соответствующую моделирующую ёмкость.

  3. Обуславливание конкатенацией — простейшая и наиболее устойчивая стратегия для низкоразмерных дискретных условий, таких как рыночные режимы. Методы FiLM и на основе внимания предпочтительнее для высокоразмерных или непрерывных условий.

  4. Режимо-условная генерация устраняет проблему усреднения мод стандартных VAE, создавая сценарии, верные конкретным рыночным условиям, а не усреднённые по всем условиям.

  5. Практические улучшения от обуславливания включают на 30-50% лучшее соответствие распределений, более реалистичное поведение хвостов и критически важную возможность генерации целевых сценариев для стресс-тестирования и управления рисками.

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

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

  8. Торговые приложения охватывают стресс-тестирование, режимо-специфичный VaR, оценку устойчивости стратегий, секторно-специфичное моделирование и портфельную симуляцию, обусловленную макроэкономикой — всё это стало возможным благодаря способности обуславливать генеративный процесс релевантной вспомогательной информацией.