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

Глава 282: Маскированные автоэнкодеры для финансовых временных рядов

Введение

Маскированные автоэнкодеры (MAE) стали мощной стратегией самообучаемого предобучения, изначально популяризированной в компьютерном зрении Хе и др. (2021). Основная идея удивительно проста: случайным образом замаскировать большую часть входных данных, а затем обучить модель восстанавливать недостающие фрагменты. Это заставляет модель изучать богатые, обобщаемые представления базового распределения данных без необходимости в метках.

В финансах размеченные данные печально известны своей редкостью и дороговизной, тогда как неразмеченные данные о ценах и объёмах имеются в изобилии. MAE обеспечивает естественный мост: предобучение на огромных массивах неразмеченных рыночных данных, затем тонкая настройка на небольших размеченных наборах для последующих задач: прогнозирование тренда, предсказание волатильности или обнаружение аномалий. Эта глава исследует теоретические основы MAE, адаптирует архитектуру для финансовых временных рядов и предоставляет полную реализацию на Rust с интеграцией рыночных данных Bybit.

Теоретические основы

Фреймворк маскированного автоэнкодера

Маскированный автоэнкодер работает с последовательностью входных токенов (или патчей). Для входной последовательности $\mathbf{X} = [x_1, x_2, \ldots, x_T]$ процесс MAE включает три этапа:

1. Маскирование: Случайное подмножество $\mathcal{M} \subset {1, 2, \ldots, T}$ позиций выбирается для маскирования. Коэффициент маскирования $r = |\mathcal{M}| / T$ обычно высокий (60-80%). Видимое множество: $\mathcal{V} = {1, \ldots, T} \setminus \mathcal{M}$.

2. Кодирование: Только видимые (немаскированные) токены проходят через энкодер:

$$\mathbf{H}\mathcal{V} = f{\text{enc}}(\mathbf{X}_\mathcal{V})$$

Этот асимметричный дизайн (кодирование только видимых токенов) значительно снижает вычислительные затраты при предобучении.

3. Декодирование: Декодер принимает закодированные видимые токены плюс обучаемые маск-токены $\mathbf{m}$ и восстанавливает полную последовательность:

$$\hat{\mathbf{X}} = f_{\text{dec}}([\mathbf{H}\mathcal{V}; \mathbf{m}\mathcal{M}])$$

Функция потерь реконструкции

Целевая функция минимизирует среднеквадратичную ошибку (MSE) только по маскированным позициям:

$$\mathcal{L}{\text{MAE}} = \frac{1}{|\mathcal{M}|} \sum{i \in \mathcal{M}} | x_i - \hat{x}_i |^2$$

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

Позиционное кодирование

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

$$PE_{(pos, 2k)} = \sin\left(\frac{pos}{10000^{2k/d}}\right)$$ $$PE_{(pos, 2k+1)} = \cos\left(\frac{pos}{10000^{2k/d}}\right)$$

где $pos$ — индекс позиции, а $k$ — индекс размерности.

Адаптация для финансовых временных рядов

Финансовые временные ряды представляют уникальные вызовы по сравнению с изображениями:

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

  2. Многомасштабные паттерны: Рынки демонстрируют паттерны на нескольких временных масштабах (внутридневной, дневной, недельный, месячный).

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

  4. Гетерогенность признаков: Данные OHLCV объединяют уровни цен, диапазоны и информацию об объёмах с различными масштабами и распределениями.

Наша финансовая адаптация MAE решает эти проблемы путём:

  • Использования перекрывающихся временных патчей для захвата локальной структуры
  • Нормализации признаков внутри каждого патча для обработки нестационарности
  • Применения обучаемых линейных проекций для эмбеддинга патчей
  • Использования высокого коэффициента маскирования (75%) для предотвращения тривиальной интерполяции

Построение патчей для данных OHLCV

Для временного ряда OHLCV $\mathbf{X} \in \mathbb{R}^{T \times 5}$ мы создаём патчи размером $P$:

$$\text{patch}_i = \text{flatten}(\mathbf{X}[iP : (i+1)P, :]) \in \mathbb{R}^{5P}$$

Каждый патч затем проецируется в размерность модели $d$:

$$\mathbf{e}i = \mathbf{W}{\text{proj}} \cdot \text{patch}i + \mathbf{b}{\text{proj}} + \mathbf{PE}_i$$

где $\mathbf{W}_{\text{proj}} \in \mathbb{R}^{d \times 5P}$ — обучаемая матрица проекции.

Детали архитектуры

Энкодер

Энкодер состоит из $L_e$ блоков трансформера, работающих только с видимыми токенами:

$$\mathbf{H}^{(l+1)} = \text{TransformerBlock}(\mathbf{H}^{(l)})$$

Каждый блок трансформера содержит:

  • Многоголовое самовнимание (MHSA)
  • Сеть прямого распространения (FFN) с активацией GELU
  • Нормализацию слоёв и остаточные соединения

Декодер

Декодер — это лёгкая сеть с $L_d$ блоками трансформера ($L_d < L_e$). Он принимает полную последовательность (закодированные видимые токены + маск-токены на маскированных позициях) и создаёт реконструкции для каждого патча:

$$\hat{\mathbf{p}}i = \mathbf{W}{\text{out}} \cdot \mathbf{D}i^{(L_d)} + \mathbf{b}{\text{out}}$$

где $\hat{\mathbf{p}}_i \in \mathbb{R}^{5P}$ — восстановленный патч.

Тонкая настройка для трейдинга

После предобучения декодер отбрасывается, а энкодер используется для последующих задач:

  1. Прогнозирование тренда: Добавление классификационной головы для предсказания движения вверх/вниз.
  2. Прогнозирование волатильности: Добавление регрессионной головы для оценки будущей волатильности.
  3. Обнаружение аномалий: Использование ошибки реконструкции в качестве оценки аномальности — высокая ошибка реконструкции указывает на необычное поведение рынка.

Функция потерь тонкой настройки для классификации:

$$\mathcal{L}{\text{fine-tune}} = -\sum{c} y_c \log(\hat{y}_c)$$

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

Наша реализация на Rust обеспечивает производительность промышленного уровня для торговых систем на основе MAE. Ключевые компоненты включают:

Основные структуры данных

Реализация использует ndarray для эффективных матричных операций. Структура MaskedAutoencoder инкапсулирует всю архитектуру:

  • PatchEmbedding: Преобразует необработанные патчи OHLCV в эмбеддинги
  • MaskedAutoencoder: Полный MAE с энкодером, декодером, логикой маскирования и обучением
  • TradingStrategy: Обёртка над предобученным MAE для генерации торговых сигналов

Стратегия случайного маскирования

Функция маскирования генерирует случайную перестановку индексов патчей и выбирает первые $\lfloor r \cdot N \rfloor$ в качестве маскированных позиций. Это гарантирует точно заданный коэффициент маскирования каждый раз.

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

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

let url = format!(
"https://api.bybit.com/v5/market/kline?category=linear&symbol={}&interval={}&limit={}",
symbol, interval, limit
);

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

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

Предобучение итерирует по набору данных со случайным маскированием каждую эпоху:

  1. Выбрать случайный паттерн маскирования
  2. Извлечь видимые патчи и пропустить через энкодер
  3. Вставить маск-токены и пропустить через декодер
  4. Вычислить MSE-потерю по маскированным позициям
  5. Обновить веса через градиентный спуск

Генерация торговых сигналов

После предобучения энкодер MAE генерирует представления признаков. Ошибка реконструкции на последних данных служит индикатором аномалий:

  • Низкая ошибка реконструкции: Рынок ведёт себя нормально — следуем трендовым сигналам
  • Высокая ошибка реконструкции: Необычные рыночные условия — уменьшаем размер позиции или уходим в кэш

Практические применения

1. Предобучение на исторических данных

Используйте годы исторических данных OHLCV для предобучения MAE. Модель изучает:

  • Типичные свечные паттерны
  • Взаимосвязи объёма и цены
  • Сигнатуры возврата к среднему и моментума
  • Кластеризацию волатильности

2. Обучение на малых выборках для новых рынков

MAE, предобученный на BTC/USDT, может быть дообучен с минимальными размеченными данными для ETH/USDT или других пар, перенося знания об общей микроструктуре рынка.

3. Определение режимов

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

4. Аугментация данных

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

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

В финансовых временных рядах соседние патчи сильно коррелированы (цены непрерывны, волатильность кластеризуется). При низких коэффициентах маскирования (напр., 25%) модель может тривиально интерполировать. При 75% маскировании модель должна:

  1. Понимать текущий режим волатильности
  2. Определять направление тренда по разрежённым наблюдениям
  3. Моделировать совместное распределение признаков OHLCV
  4. Захватывать дальнодействующие зависимости между видимыми патчами

Это создаёт сложную задачу предобучения, дающую богатые представления.

Предобработка для финансового MAE

Финансовые данные требуют тщательной нормализации:

  1. Логарифмические доходности: Преобразование цен в лог-доходности для стационарности: $r_t = \ln(P_t / P_{t-1})$
  2. Нормализация объёма: Логарифмическое преобразование и z-score нормализация
  3. Нормализация по патчам: Вычитание среднего патча и деление на стандартное отклонение перед вычислением потерь реконструкции
  4. Обработка пропущенных данных: Разделение реально отсутствующих данных от искусственного маскирования

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

Помимо равномерного случайного маскирования, существуют финансово-специфические стратегии:

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

Перенос на последующие задачи

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

Предобученный энкодер захватывает скрытые рыночные состояния. Тонкая настройка для обнаружения режимов:

  1. Заморозить энкодер MAE (или использовать низкую скорость обучения)
  2. Добавить классификационную голову: $\hat{y} = \text{softmax}(W_c \cdot h_{\text{[CLS]}} + b_c)$
  3. Обучить на размеченных данных режимов (бычий/медвежий/боковой)

Предобученные представления обычно требуют в 10 раз меньше размеченных примеров, чем обучение с нуля.

Обнаружение аномалий

Ошибка реконструкции сама по себе служит оценкой аномальности:

$$\text{anomaly_score}(X) = \frac{1}{N} \sum_{i=1}^{N} |x_i - \hat{x}_i|_2^2$$

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

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

Тонкая настройка энкодера для прогнозирования доходности следующего окна:

  1. Использовать выходное представление энкодера
  2. Добавить регрессионную голову для предсказания доходности на следующие $k$ периодов
  3. Предобученные признаки захватывают рыночную динамику, улучшающую точность предсказания

Оценка риска

Неопределённость декодера в реконструкции коррелирует с рыночной неопределённостью:

  • Патчи, которые систематически трудно реконструировать, указывают на непредсказуемые рыночные режимы
  • Это обеспечивает основанный на данных индикатор волатильности/риска

Рекомендации по производительности

АспектПодробности
Данные для предобученияРекомендуется 10 000+ свечей
Коэффициент маскирования75% (оптимально для финансовых данных)
Размер патча4-8 свечей на патч
Глубина энкодера4-6 блоков трансформера
Глубина декодера2 блока (лёгкий)
Размерность эмбеддинга64-128
Скорость обучения1e-4 с косинусным расписанием
Размер батча32-64

Управление рисками

Ошибка реконструкции MAE предоставляет естественную меру неопределённости:

$$\text{uncertainty}t = \frac{1}{|\mathcal{M}|} \sum{i \in \mathcal{M}} | x_i^{(t)} - \hat{x}_i^{(t)} |^2$$

Это может быть включено в размер позиции:

$$\text{position_size}t = \text{base_size} \times \frac{\sigma{\text{target}}}{\sigma_t + \epsilon} \times \mathbb{1}[\text{uncertainty}_t < \tau]$$

где $\tau$ — порог неопределённости, выше которого позиция не открывается.

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

  1. Маскированные автоэнкодеры обеспечивают мощный фреймворк самообучаемого предобучения, который изучает богатые представления из неразмеченных финансовых данных путём восстановления случайно замаскированных частей входа.

  2. Высокие коэффициенты маскирования (75%) полезны для финансовых временных рядов — они предотвращают зависимость модели от тривиальной интерполяции и заставляют её изучать значимые паттерны.

  3. Асимметричный дизайн энкодер-декодер — глубокий энкодер с мелким декодером — обеспечивает эффективное предобучение, где энкодер захватывает наиболее важные признаки.

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

  5. Трансферное обучение — ключевое преимущество: MAE, предобученный на одном инструменте, может быть дообучен с минимальными данными для новых инструментов, решая извечную проблему ограниченных размеченных данных в финансах.

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

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

Ссылки

  1. He, K., Chen, X., Xie, S., Li, Y., Dollar, P., & Girshick, R. (2021). Masked Autoencoders Are Scalable Vision Learners. arXiv:2111.06377.
  2. Devlin, J., et al. (2018). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. arXiv:1810.04805.
  3. Vaswani, A., et al. (2017). Attention Is All You Need. NeurIPS 2017.
  4. Assran, M., et al. (2022). Masked Siamese Networks for Label-Efficient Learning. ECCV 2022.
  5. Dong, X., et al. (2022). PatchTST: A Time Series is Worth 64 Words. ICLR 2023.
  6. Zerveas, G., et al. (2021). A Transformer-based Framework for Multivariate Time Series Representation Learning. KDD 2021.