Розробка AI-моделі на базі Transformer для фінансових даних
Архітектури Transformer, які змінили NLP, увійшли до фінансового ML з 2019-2020 років. Механізм self-attention дозволяє моделі явно сконцентруватися на різних точках історії при формуванні прогнозу. Для фінансових даних це цінно: криза 2008 року може бути релевантна сьогодні, незважаючи на 15-річний часовий розрив.
Архітектура фінансового Transformer
Базовий Vanilla Transformer для часових рядів:
import torch
import torch.nn as nn
class FinancialTransformer(nn.Module):
def __init__(self, d_model=256, nhead=8, num_layers=4,
dim_feedforward=512, dropout=0.1, seq_len=60):
super().__init__()
self.input_projection = nn.Linear(n_features, d_model)
self.pos_encoding = PositionalEncoding(d_model, dropout)
encoder_layer = nn.TransformerEncoderLayer(
d_model=d_model, nhead=nhead,
dim_feedforward=dim_feedforward,
dropout=dropout, batch_first=True
)
self.transformer = nn.TransformerEncoder(encoder_layer, num_layers)
self.output_head = nn.Linear(d_model, 1)
def forward(self, x, src_mask=None):
x = self.input_projection(x)
x = self.pos_encoding(x)
x = self.transformer(x, mask=src_mask)
return self.output_head(x[:, -1, :])
Причинне маскування: важливо для фінансового Transformer — майбутні дані не повинні впливати на поточний крок. Верхньотрикутна маска забезпечує це автоматично.
Спеціалізовані фінансові Трансформери
Temporal Fusion Transformer (TFT): Розроблений спеціально для завдань прогнозування часових рядів:
- Gate Recurrent Unit (GRU) для обробки локальних паттернів
- Variable Selection Network: автоматичний вибір релевантних ознак
- Мультиголова увага для довгострокових залежностей
- Видає прогнози квантилів (p10/p50/p90)
from pytorch_forecasting import TemporalFusionTransformer, TimeSeriesDataSet
training = TimeSeriesDataSet(
data,
time_idx="time_idx",
target="return",
group_ids=["ticker"],
max_encoder_length=60,
max_prediction_length=5,
time_varying_known_reals=["vix", "dollar_index", "yield_10y"],
time_varying_unknown_reals=["return", "volume", "rsi", "atr"],
)
tft = TemporalFusionTransformer.from_dataset(training)
Informer: оптимізований для довгих послідовностей через розріджену увагу O(L log L) замість O(L²). Корисний для високочастотних даних з контекстом 500-1000 кроків.
PatchTST (2023): розбиває часові ряди на патчі (подібно до токенів у BERT). Self-supervised передобучення + fine-tuning. State-of-the-art на багатьох бенчмарках.
Мультимодальний Transformer для фінансів
Сила Transformer — злиття різних типів даних:
News + Price Transformer:
Вбудовування новин (BERT/FinBERT) ──┐
├→ Cross-attention → Output
Вбудовування послідовності цін ──────┘
FinBERT (тонко налаштований на фінансових текстах) кодує новини в 768-мірні вектори. Cross-attention дозволяє моделі "дивитися" на те, які новини релевантні в момент конкретного цінового паттерну.
Cross-asset Transformer: Одночасна обробка 50-500 інструментів:
- Кожен інструмент = токен
- Увага між інструментами = ринкові кореляції
- Часова увага = історія кожного інструменту
Навчання та регуляризація
Передобучення: маскований прогноз на великому корпусі фінансових даних (200+ інструментів за 10+ років) → fine-tuning на конкретну задачу. Значно покращує узагальнення з обмеженим обсягом цільових даних.
Регуляризація:
- Dropout: 0.1-0.3 у шарах уваги та FFN
- Вагова затримка: 1e-4 (AdamW за замовчуванням)
- Згладжування мітки: 0.1 для класифікації спрямованості
- Mixup: інтерполяція між прикладами навчання
Розклад швидкості навчання:
# Warmup + cosine decay
def lr_lambda(step):
if step < warmup_steps:
return step / warmup_steps
progress = (step - warmup_steps) / (total_steps - warmup_steps)
return 0.5 * (1 + math.cos(math.pi * progress))
Інтерпретація через увагу
Візуалізація ваг уваги дає розуміння "думок" моделі:
- Висока увага до точок 20-25 днів тому → модель реагує на місячний паттерн
- Сплеск уваги на конкретну дату → події того періоду важливі для прогнозу
Важливість змінної (з TFT): TFT надає явні ваги важливості вхідних змінних через Variable Selection Network. Практичний приклад: 30-денна дохідність отримує вагу 0.25, VIX — 0.18, обсяг — 0.12.
Виробничі міркування
Затримка висновку:
- Transformer з seq_len=60, d_model=256: ~5-15 мс на CPU, < 1 мс на GPU
- Неприйнятно для HFT, нормально для щоденної/почасової торгівлі
Розмір моделі:
- TFT з базовими параметрами: ~5-20M параметрів
- ONNX експорт + квантування (int8): прискорення висновку 2-4×
Оновлення: Онлайн fine-tuning на нових даних кожні 4-8 тижнів. Повне переобучення при значному зміні режиму (VIX > 35, розрив кореляції).
Часовая шкала: TFT базовий для однорівневого прогнозу — 3-4 тижні. Cross-Transformer мультиактив з новинами та передобученням — 3-5 місяців.







