Triplet Learning для Stocks
Этот репозиторий содержит реализацию Triplet Learning для автоматического извлечения признаков (Self-Supervised Learning) на финансовых временных рядах. В отличие от кластеризации (SwAV) или методов, использующих только позитивные пары (BYOL/VICReg), Triplet Learning явно определяет относительные связи между рыночными режимами с помощью Якорей (Anchor), Позитивных (Positive) и Негативных (Negative) последовательностей.
Основная концепция
Triplet Learning работает с кортежем из трех входов:
- Якорь ($x_a$): Эталонное окно рынка.
- Позитив ($x_p$): Дополненная версия Якоря, ИЛИ окно рынка, представляющее точно такой же базовый рыночный режим (например, другой сегмент того же бычьего тренда).
- Негатив ($x_n$): Окно рынка, представляющее заведомо другой режим (например, внезапный обвал или флэт).
Triplet Margin Loss заставляет нейронную сеть формировать пространство эмбеддингов так, чтобы расстояние между Якорем и Позитивом было строго меньше расстояния между Якорем и Негативом на заданную маржу $m$.
$$ \mathcal{L} = \max(0, d(z_a, z_p) - d(z_a, z_n) + m) $$
Преимущества для трейдинга
- Явное разделение: Благодаря явному указанию Негативов модель учится тонким границам между тем, что считать “похожими” и “разными” рыночными условиями.
- Относительные расстояния: Сеть не привязывает эмбеддинги к абсолютным координатам; важны только относительные расстояния. Это делает расчеты расстояний (например, К-Ближайших Соседей) крайне надежными в продакшене.
- Нет перегрузки глобальными парами: В отличие от SimCLR, которому нужны огромные размеры батчей для создания негативных примеров, Triplet Loss требует только грамотно подобранных (отмайненных) троек.
Структура проекта
python/: Реализация на PyTorchTripletNet,CNN1DEncoderи цикла обучения с кастомным генератором троек.rust/: Высокопроизводительная библиотека на Rust для извлечения признаков в реальном времени и расчета Евклидова расстояния для поиска ближайших соседей.docs/: Теоретический разбор и детали реализации.