Розробка AI-моделі на базі Transformer для фінансових даних

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Розробка AI-моделі на базі Transformer для фінансових даних
Складний
~5 днів
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

Розробка 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 місяців.