Розробка AI-моделі на базі Temporal Fusion Transformer для ринків
Temporal Fusion Transformer (TFT) — архітектура, розроблена в Google Brain спеціально для завдань прогнозування часових рядів з гетерогенними вхідними даними. На відміну від vanilla Transformer, TFT явно обробляє три типи змінних: статичні (не змінюються в часі), відомі майбутні (відомі заздалегідь) та невідомі (спостережувані лише до моменту прогнозу).
Що робить TFT особливим для фінансів
Три категорії вхідних змінних:
| Тип | Приклади для ринку | Обробка |
|---|---|---|
| Статичні коваріати | Тікер, сектор, капіталізація ринку | Статичні вбудовування |
| Відомі майбутні | Дати прибутків, дати FOMC, свята | Енкодер майбутнього |
| Спостережуване минуле | Прибутки, обсяг, VIX, RSI | Енкодер минулого |
Це принципово важливо: знаючи, що засідання Федеральної резервної системи відбудеться за 5 днів, модель повинна це враховувати при прогнозуванні прямо зараз. TFT робить це явно.
Variable Selection Network (VSN): Навчальні ваги для кожної вхідної змінної. Дозволяє автоматично відфільтрувати нерелевантні ознаки та отримати інтерпретованість — які змінні дійсно важливі для прогнозу.
Gated Residual Network (GRN): Нелінійна обробка з gate-механізмом, який контролює, наскільки застосовується нелінійне перетворення (gate = 0: pass-through, gate = 1: повна нелінійність).
Повна архітектура TFT
Статичні коваріати → Енкодери статичних коваріатів
↓
Спостережуване минуле → LSTM енкодер ─────────────┐
├→ Мультиголова увага → GRN → Вихід квантиля
Відомі майбутні → LSTM декодер ──────────────┘
Всередині уваги: часова self-attention, де кожен крок прогнозу може "дивитися" на релевантну історію.
Реалізація для ринкових даних
from pytorch_forecasting import TemporalFusionTransformer, TimeSeriesDataSet
from pytorch_forecasting.metrics import QuantileLoss
data = prepare_market_dataframe(
tickers=['AAPL', 'MSFT', ...], # 100+ інструментів
start='2015-01-01'
)
training = TimeSeriesDataSet(
data[data.date < '2022-01-01'],
time_idx="time_idx",
target="forward_5d_return",
group_ids=["ticker"],
max_encoder_length=126, # 6 місяців історії
max_prediction_length=5, # 5 днів прогнозу
static_categoricals=["sector", "country"],
static_reals=["log_market_cap", "beta"],
time_varying_known_reals=["days_to_earnings", "fomc_flag", "vix"],
time_varying_unknown_reals=[
"return", "volume_ratio", "rsi", "atr_normalized",
"momentum_12_1", "short_interest_ratio"
],
)
tft = TemporalFusionTransformer.from_dataset(
training,
learning_rate=0.001,
hidden_size=160,
attention_head_size=4,
dropout=0.1,
hidden_continuous_size=64,
loss=QuantileLoss(quantiles=[0.1, 0.25, 0.5, 0.75, 0.9])
)
Навчання та гіперпараметри
Ключові гіперпараметри:
-
hidden_size: 64-256 (основна ємність моделі) -
attention_head_size: 1-4 -
max_encoder_length: 60-252 (1 квартал — 1 рік) -
dropout: 0.05-0.3
Пошук швидкості навчання:
res = trainer.tuner.lr_find(
tft, train_dataloaders=train_dataloader,
val_dataloaders=val_dataloader,
max_lr=0.1
)
optimal_lr = res.suggestion()
Рання зупинка:
from pytorch_lightning.callbacks import EarlyStopping
early_stop_callback = EarlyStopping(
monitor="val_loss", patience=10, mode="min"
)
Прогнози квантилів та їх застосування
TFT нативно видає прогнози квантилів (p10, p25, p50, p75, p90). Це цінно для:
Позиціонування розміру позиції на основі ризику:
point_forecast = forecasts['p50']
uncertainty = forecasts['p90'] - forecasts['p10']
position_size = base_size × (1 / (uncertainty / expected_return))
Асиметричні профілі повернення: Якщо p90 − p50 >> p50 − p10 → праворуч розподілене розподіл → потенціал зростання перевищує ризик.
Інтерпретованість: важливість змінної
raw_predictions, x = tft.predict(val_dataloader, mode="raw", return_x=True)
interpretation = tft.interpret_output(raw_predictions, reduction="sum")
fig = tft.plot_interpretation(interpretation)
Приклад результату: Важливість змінної показує, що momentum_12_1 (0.22), vix (0.18) та days_to_earnings (0.15) — головні предиктори. short_interest_ratio (0.04) — незначущий.
Візуалізація паттерну уваги: модель звертає максимальну увагу на точки за 5 і 20 днів до прогнозу — відповідає тижневому та місячному ефекту моменту.
Порівняння з іншими методами
На змаганні M5 (прогнозування попиту Walmart, 2020):
- TFT: RMSSE 0.1127 (топ-10%)
- LightGBM: 0.1152
- DeepAR: 0.1189
- Prophet: 0.1402
Переваги TFT особливо виражені при наявності відомих майбутніх коваріатів та статичних ознак.
Часовая шкала: TFT базовий для 50+ інструментів — 4-5 тижнів. Повна система з календарем прибутків, макроекономічними коваріатами та побудовою портфеля — 3-4 місяці.







