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

Глава 156: SimCLR для акций (Self-Supervised Contrastive Learning)

Обзор

Разметка финансовых данных — крайне сложная задача, подверженная шуму и субъективности. SimCLR (Simple Contrastive Learning of Visual Representations), изначально ставший прорывом в компьютерном зрении, предлагает способ обучения мощных представлений признаков на неразмеченных данных о ценах акций.

В этой главе мы адаптируем SimCLR для 1D-финансовых временных рядов. Модель учится сопоставлять похожие (дополненные) версии одного и того же ценового паттерна с близкими точками в латентном пространстве, в то время как разные паттерны раздвигаются далеко друг от друга. Такое “предварительное обучение” (pre-training) позволяет моделям последующих задач (например, классификаторам купить/продать) работать гораздо эффективнее даже на очень малых объемах размеченных данных.

Процесс SimCLR для временных рядов

  1. Стохастическая аугментация данных: Для заданного окна цен $x$ мы создаем два разных “вида” $x_i$ и $x_j$ с помощью случайных преобразований (масштабирование, зашумление, маскирование).
  2. Базовый энкодер: Нейронная сеть $h = f(x)$ (например, ResNet-1D или TCN) извлекает векторы признаков.
  3. Проекционная голова: Небольшая MLP-сеть $z = g(h)$ отображает признаки в пространство, где применяется контрастивная функция потерь.
  4. Контрастивная функция потерь (NT-Xent): Мы максимизируем сходство между $z_i$ и $z_j$ (положительная пара) по сравнению со всеми остальными паттернами в батче (отрицательные пары).

Почему SimCLR полезен для акций?

  • Обнаружение признаков: Модель сама понимает, “как выглядит рыночный паттерн”, без необходимости объяснять ей, что такое “Голова и плечи”.
  • Устойчивость к шуму: Обучаясь быть инвариантной к шуму и изменению масштаба, модель извлекает признаки, которые более стабильны при смене рыночных режимов.
  • Эффективность данных: Вы можете использовать годы неразмеченных тиковых данных для предварительного обучения энкодера, а затем дообучить его (fine-tune) всего на нескольких сотнях размеченных событий.

Содержание

  • python/augmentations.py: Временные аугментации (Jitter, Scale, Permute, Mask).
  • python/model.py: 1D-CNN энкодер и проекционная голова.
  • python/train.py: Цикл self-supervised обучения с использованием NT-Xent loss.
  • python/evaluate.py: Оценка модели на размеченных данных.
  • rust/src/: Высокопроизводительное извлечение признаков для стриминговых данных.

Ссылки

  1. Chen, T., Kornblith, S., Norouzi, M., & Hinton, G. (2020). A Simple Framework for Contrastive Learning of Visual Representations. arXiv:2002.05709.
  2. Eldele, E., et al. (2021). Time-Series Representation Learning via Temporal and Contextual Contrasting.
  3. SimCLR for Time Series - различные адаптации для обнаружения аномалий.