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

Глава 239: Генерация портфелей с помощью VAE

Введение

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

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

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

Ключевые концепции

Вариационные автокодировщики

Вариационный автокодировщик состоит из двух нейронных сетей: кодировщика $q_\phi(\mathbf{z}|\mathbf{x})$, отображающего входные данные в распределение в латентном пространстве, и декодировщика $p_\theta(\mathbf{x}|\mathbf{z})$, отображающего латентные векторы обратно в пространство данных.

Для входного вектора весов портфеля $\mathbf{x} \in \mathbb{R}^n$ (где $n$ — количество активов) кодировщик производит параметры гауссовского распределения в латентном пространстве:

$$\boldsymbol{\mu} = f_\mu(\mathbf{x}; \phi), \quad \log \boldsymbol{\sigma}^2 = f_\sigma(\mathbf{x}; \phi)$$

Латентный вектор семплируется с помощью трюка репараметризации:

$$\mathbf{z} = \boldsymbol{\mu} + \boldsymbol{\sigma} \odot \boldsymbol{\epsilon}, \quad \boldsymbol{\epsilon} \sim \mathcal{N}(\mathbf{0}, \mathbf{I})$$

Декодировщик затем реконструирует веса портфеля:

$$\hat{\mathbf{x}} = g(\mathbf{z}; \theta)$$

Целевая функция обучения (ELBO)

VAE обучается путём максимизации нижней границы обоснованности (ELBO):

$$\mathcal{L}(\theta, \phi; \mathbf{x}) = \mathbb{E}{q\phi(\mathbf{z}|\mathbf{x})}[\log p_\theta(\mathbf{x}|\mathbf{z})] - D_{KL}(q_\phi(\mathbf{z}|\mathbf{x}) | p(\mathbf{z}))$$

Первый член — это ошибка реконструкции, побуждающая декодировщик точно воспроизводить входные портфели. Второй член — KL-дивергенция между приближённым апостериорным и априорным распределением $p(\mathbf{z}) = \mathcal{N}(\mathbf{0}, \mathbf{I})$, которая регуляризирует латентное пространство, делая его гладким и непрерывным.

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

$$\mathcal{L}_{\text{recon}} = |\mathbf{x} - \hat{\mathbf{x}}|^2$$

KL-дивергенция для гауссовских распределений имеет аналитическое решение:

$$D_{KL} = -\frac{1}{2} \sum_{j=1}^{d} \left(1 + \log \sigma_j^2 - \mu_j^2 - \sigma_j^2\right)$$

где $d$ — размерность латентного пространства.

Ограничения портфеля

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

  1. Бюджетное ограничение: Веса должны суммироваться в единицу: $\sum_{i=1}^{n} w_i = 1$
  2. Ограничение только длинных позиций (опционально): Все веса неотрицательны: $w_i \geq 0$
  3. Лимиты позиций: Ни одна позиция не превышает максимум: $w_i \leq w_{\max}$
  4. Минимальная аллокация: Только значимые позиции: $w_i \geq w_{\min}$ или $w_i = 0$

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

$$w_i = \frac{e^{\hat{x}i}}{\sum{j=1}^{n} e^{\hat{x}_j}}$$

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

Свойства латентного пространства

Хорошо обученный VAE создаёт латентное пространство с полезными геометрическими свойствами:

  • Гладкость: Близкие точки в латентном пространстве соответствуют похожим портфелям. Движение вдоль направления в латентном пространстве производит непрерывное преобразование характеристик портфеля.
  • Интерполяция: Линейная интерполяция между двумя латентными векторами создаёт плавный переход между соответствующими портфелями, позволяя смешивание портфелей.
  • Распутывание: Различные латентные измерения могут захватывать различные характеристики портфеля (уровень риска, секторная экспозиция, концентрация), позволяя целевое манипулирование.
  • Покрытие: Семплирование из априорного распределения $\mathcal{N}(\mathbf{0}, \mathbf{I})$ генерирует разнообразные, реалистичные портфели, охватывающие пространство жизнеспособных аллокаций.

Стратегии генерации портфелей

Безусловная генерация

Простейший подход семплирует латентные векторы из априорного распределения и декодирует их:

$$\mathbf{z} \sim \mathcal{N}(\mathbf{0}, \mathbf{I}), \quad \hat{\mathbf{w}} = \text{softmax}(g(\mathbf{z}; \theta))$$

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

Условная генерация

Условный VAE (CVAE) обуславливает генерацию желаемыми свойствами, такими как целевой уровень риска, секторная экспозиция или ожидаемая доходность:

$$q_\phi(\mathbf{z}|\mathbf{x}, \mathbf{c}), \quad p_\theta(\mathbf{x}|\mathbf{z}, \mathbf{c})$$

где $\mathbf{c}$ — вектор условий. Например, $\mathbf{c}$ может кодировать целевую волатильность 15% и максимальную аллокацию в технологии 30%. CVAE учится генерировать портфели, удовлетворяющие этим условиям, сохраняя при этом разнообразие и реалистичность безусловной генерации.

Оптимизация в латентном пространстве

Вместо случайного семплирования мы можем оптимизировать в латентном пространстве для поиска портфелей с определёнными свойствами:

$$\mathbf{z}^* = \arg\max_{\mathbf{z}} ; \text{Sharpe}(\text{decode}(\mathbf{z})) \quad \text{s.t.} \quad |\mathbf{z}| \leq r$$

Ограничение $|\mathbf{z}| \leq r$ удерживает поиск в области латентных векторов высокой плотности, гарантируя, что оптимизированные портфели остаются реалистичными. Этот подход сочетает генеративную мощь VAE с традиционными целями оптимизации портфеля.

Интерполяция портфелей

Для двух референсных портфелей $\mathbf{w}_A$ и $\mathbf{w}_B$ мы можем сгенерировать континуум смешанных портфелей:

$$\mathbf{z}_\alpha = (1 - \alpha) \cdot \text{encode}(\mathbf{w}_A) + \alpha \cdot \text{encode}(\mathbf{w}_B), \quad \alpha \in [0, 1]$$

$$\mathbf{w}\alpha = \text{decode}(\mathbf{z}\alpha)$$

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

Подходы машинного обучения

Архитектура VAE для портфелей

Кодировщик и декодировщик обычно представляют собой неглубокие полносвязные сети:

Кодировщик: $$\mathbf{h}_1 = \text{ReLU}(\mathbf{W}_1 \mathbf{x} + \mathbf{b}_1)$$ $$\mathbf{h}_2 = \text{ReLU}(\mathbf{W}_2 \mathbf{h}1 + \mathbf{b}2)$$ $$\boldsymbol{\mu} = \mathbf{W}\mu \mathbf{h}2 + \mathbf{b}\mu$$ $$\log \boldsymbol{\sigma}^2 = \mathbf{W}\sigma \mathbf{h}2 + \mathbf{b}\sigma$$

Декодировщик: $$\mathbf{h}_3 = \text{ReLU}(\mathbf{W}_3 \mathbf{z} + \mathbf{b}_3)$$ $$\mathbf{h}_4 = \text{ReLU}(\mathbf{W}_4 \mathbf{h}_3 + \mathbf{b}_4)$$ $$\hat{\mathbf{x}} = \mathbf{W}_5 \mathbf{h}_4 + \mathbf{b}_5$$

Для вселенной из $n$ активов с латентной размерностью $d$ типичные размеры слоёв:

  • Вход: $n$ (количество активов)
  • Скрытые слои: $64 \to 32$
  • Латентная размерность: $d = 8$ до $16$
  • Выход: $n$ (с последующим softmax для нормализации весов)

Дизайн функции потерь

Общая функция потерь балансирует реконструкцию и регуляризацию:

$$\mathcal{L}{\text{total}} = \mathcal{L}{\text{recon}} + \beta \cdot D_{KL}$$

Гиперпараметр $\beta$ контролирует компромисс:

  • $\beta < 1$: Акцент на точности реконструкции, производя портфели ближе к обучающей выборке, но с менее гладким латентным пространством.
  • $\beta = 1$: Стандартная целевая функция VAE (ELBO).
  • $\beta > 1$: Акцент на регулярности латентного пространства ($\beta$-VAE), создавая более гладкие интерполяции, но потенциально жертвуя точностью реконструкции.

Для генерации портфелей $\beta \in [0.1, 0.5]$ часто работает хорошо, так как точная реконструкция весов важнее гладкости латентного пространства.

Генерация обучающих данных

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

  1. Случайное семплирование Дирихле: $\mathbf{w} \sim \text{Dir}(\boldsymbol{\alpha})$ генерирует случайные длинные портфели. Параметр концентрации $\boldsymbol{\alpha}$ контролирует разнообразие: малое $\alpha$ создаёт концентрированные портфели; большое $\alpha$ — равномерные аллокации.

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

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

  4. Бутстреппированные портфели: Пересемплирование исторических доходностей и оптимизация для создания портфелей, устойчивых к неопределённости оценки.

Конструирование признаков

Признаки доходности активов

Входные признаки для обуславливания VAE включают:

  • Скользящие доходности: Средние доходности за 5, 20, 60 торговых дней
  • Скользящая волатильность: Стандартное отклонение доходностей за соответствующие окна
  • Структура корреляций: Попарные корреляции между активами, возможно сжатые через PCA
  • Оценки моментума: Скорректированный на риск моментум (доходность, делённая на волатильность) для трендовых сигналов

Признаки риска

  • Волатильность портфеля: $\sigma_p = \sqrt{\mathbf{w}^T \Sigma \mathbf{w}}$
  • Максимальная просадка: Худшее падение от пика до дна за период наблюдения
  • Value at Risk (VaR): Уровень потерь, который не превышается с заданной вероятностью
  • Conditional VaR (CVaR): Ожидаемые потери при условии, что потери превышают VaR

Признаки рыночного режима

  • Уровень VIX или индекс волатильности крипто: Общий показатель страха на рынке
  • Индикатор тренда: Находится ли широкий рынок в восходящем или нисходящем тренде
  • Дисперсия: Поперечное стандартное отклонение доходностей активов (высокая дисперсия благоприятствует выбору акций)

Приложения

Диверсификация портфеля

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

Стресс-тестирование

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

Робастная оптимизация

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

Обнаружение альфы

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

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

Наша реализация на Rust предоставляет полный набор инструментов для генерации портфелей с помощью VAE со следующими компонентами:

PortfolioVAE

Структура PortfolioVAE реализует полносвязный VAE с настраиваемыми архитектурами кодировщика и декодировщика. Она поддерживает обучение через стохастический градиентный спуск с целевой функцией ELBO, генерацию портфелей путём семплирования из латентного пространства, и кодирование/декодирование существующих портфелей. Выходной слой softmax гарантирует, что сгенерированные веса являются валидными распределениями вероятностей.

PortfolioGenerator

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

PortfolioEvaluator

Структура PortfolioEvaluator вычисляет стандартные метрики портфеля: годовую доходность, волатильность, коэффициент Шарпа, коэффициент Сортино, максимальную просадку и коэффициент диверсификации. Эти метрики используются как для оценки сгенерированных портфелей, так и для целей оптимизации в латентном пространстве.

DirichletSampler

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

BybitClient

Структура BybitClient предоставляет асинхронный HTTP-доступ к Bybit V5 API. Она получает данные свечей (kline) из эндпоинта /v5/market/kline для вычисления доходностей и ковариаций активов. Клиент поддерживает одновременную работу с несколькими торговыми парами, обеспечивая конструирование портфеля по всей вселенной криптовалют.

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

Реализация подключается к REST API Bybit V5 для получения рыночных данных в реальном времени для конструирования портфелей:

  • Эндпоинт свечей (/v5/market/kline): Предоставляет данные OHLCV свечей с настраиваемыми интервалами для каждого актива в портфельной вселенной. Используется для вычисления рядов доходностей, ковариационных матриц и метрик риска.
  • Множественные символы: Клиент получает данные по всем символам в портфельной вселенной (например, BTCUSDT, ETHUSDT, SOLUSDT, ADAUSDT) и выравнивает временные метки для построения чистой матрицы доходностей.

Bybit API хорошо подходит для генерации портфелей, поскольку предоставляет:

  • Согласованные исторические данные по множеству торговых пар
  • Точные интервалы для внутридневной ребалансировки портфеля
  • Данные в реальном времени для систем генерации портфелей в продакшене

Ссылки

  1. Kingma, D. P., & Welling, M. (2014). Auto-encoding variational Bayes. Proceedings of the International Conference on Learning Representations (ICLR).
  2. Higgins, I., et al. (2017). beta-VAE: Learning basic visual concepts with a constrained variational framework. ICLR.
  3. Markowitz, H. (1952). Portfolio selection. The Journal of Finance, 7(1), 77-91.
  4. Sohn, K., Lee, H., & Yan, X. (2015). Learning structured output representation using deep conditional generative models. Advances in Neural Information Processing Systems (NeurIPS).
  5. Rezende, D. J., Mohamed, S., & Wierstra, D. (2014). Stochastic backpropagation and approximate inference in deep generative models. Proceedings of the 31st International Conference on Machine Learning (ICML).
  6. Cong, L. W., Tang, K., Wang, J., & Zhang, Y. (2022). Deep sequence modeling: Development and applications in asset pricing. The Journal of Financial Data Science, 3(1), 28-42.