Глава 156: SimCLR для акций (Self-Supervised Contrastive Learning)
Обзор
Разметка финансовых данных — крайне сложная задача, подверженная шуму и субъективности. SimCLR (Simple Contrastive Learning of Visual Representations), изначально ставший прорывом в компьютерном зрении, предлагает способ обучения мощных представлений признаков на неразмеченных данных о ценах акций.
В этой главе мы адаптируем SimCLR для 1D-финансовых временных рядов. Модель учится сопоставлять похожие (дополненные) версии одного и того же ценового паттерна с близкими точками в латентном пространстве, в то время как разные паттерны раздвигаются далеко друг от друга. Такое “предварительное обучение” (pre-training) позволяет моделям последующих задач (например, классификаторам купить/продать) работать гораздо эффективнее даже на очень малых объемах размеченных данных.
Процесс SimCLR для временных рядов
- Стохастическая аугментация данных: Для заданного окна цен $x$ мы создаем два разных “вида” $x_i$ и $x_j$ с помощью случайных преобразований (масштабирование, зашумление, маскирование).
- Базовый энкодер: Нейронная сеть $h = f(x)$ (например, ResNet-1D или TCN) извлекает векторы признаков.
- Проекционная голова: Небольшая MLP-сеть $z = g(h)$ отображает признаки в пространство, где применяется контрастивная функция потерь.
- Контрастивная функция потерь (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/: Высокопроизводительное извлечение признаков для стриминговых данных.
Ссылки
- Chen, T., Kornblith, S., Norouzi, M., & Hinton, G. (2020). A Simple Framework for Contrastive Learning of Visual Representations. arXiv:2002.05709.
- Eldele, E., et al. (2021). Time-Series Representation Learning via Temporal and Contextual Contrasting.
- SimCLR for Time Series - различные адаптации для обнаружения аномалий.