← 기사 목록으로
June 22, 2026
5분 소요

다중 기간 포트폴리오 예측을 위한 Temporal Fusion Transformer

다중 기간 포트폴리오 예측을 위한 Temporal Fusion Transformer
#deep-learning
#transformer
#TFT
#forecasting
#portfolio
#quant
🧠
Part 1 of 4 · Collection
Deep Learning for Markets

딥러닝을 포트폴리오 관리에 적용할 때 가장 답답한 점은 블랙박스 문제입니다. 백테스트에서 인상적인 샤프 비율을 만들어내는 신경망을 학습시켰지만, 막상 실전에서 전략이 손실을 내기 시작하면 그 이유를 전혀 알 수 없습니다. 어떤 입력 특성이 예측을 좌우했는가? 어떤 시간 기간이 중요한가? 모델이 거시 신호에 반응한 것인가, 아니면 미시구조 노이즈에 반응한 것인가?

구글 리서치는 이 문제를 정면으로 다루기 위해 Temporal Fusion Transformer(TFT)를 내놓았습니다. 이는 어텐션 기반 아키텍처로, 강력한 다중 기간 예측을 제공하는 동시에 어텐션 가중치와 변수 중요도 점수를 통해 내장된 해석 가능성을 제공합니다. 원 논문의 벤치마크에서 TFT는 차순위 모델 대비 분위수 손실을 평균적으로 7%(P50), 9%(P90) 줄였으며, 테스트 데이터셋 전반에서 가장 강력한 경쟁 베이스라인 대비 3~26%의 개선을 이루었습니다. 정량적 포트폴리오 매니저에게 TFT는 보기 드문 것을 제공합니다. 바로 강력하면서도 투명한 모델입니다.

이 글에서는 TFT 아키텍처를 해부하고, 이를 다중 기간 포트폴리오 예측에 적용하는 방법을 보여주며, pytorch-forecasting을 사용한 Python 구현을 단계별로 살펴보고, LSTM 및 일반 transformer 베이스라인과 비교합니다.

다중 기간 예측이 포트폴리오에 중요한 이유

전통적인 단일 스텝 예측은 시점 t+1t+1에서의 하나의 값을 예측합니다. 그러나 포트폴리오 배분 결정은 여러 기간에 걸쳐 동시에 작동합니다. 포트폴리오 매니저는 다음을 알아야 합니다.

  • 1일 기간: 장중 리밸런싱과 리스크 관리를 위해
  • 1주 기간: 전술적 배분 변경을 위해
  • 1개월 기간: 전략적 배분과 섹터 로테이션을 위해
  • 1분기 기간: 거시 요인 기반 포지셔닝을 위해

각 기간은 서로 다른 신호 대 잡음 특성을 가집니다. 단기 수익률은 미시구조와 주문 흐름이 지배합니다. 중기 수익률은 모멘텀과 평균 회귀에 반응합니다. 장기 수익률은 펀더멘털과 거시 국면이 좌우합니다.

이 모든 기간에 걸쳐 동시에 예측을 생성하는 모델, 그것도 각 기간에서 예측 불확실성에 대한 분위수 추정치까지 제공하는 모델은 각 기간별로 분리된 모델보다 근본적으로 더 유용합니다. 이것이 바로 TFT가 제공하는 것입니다. 과거 관측치로 이루어진 인코더 윈도우가 주어지면, TFT는 앞으로 τ=1,2,,τmax\tau = 1, 2, \ldots, \tau_{max} 스텝에 대한 분위수 예측의 집합을 출력합니다.

형식적으로, 엔티티 ii의 시점 tt에서의 관측치 {yi,t,xi,t,si}\{y_{i,t}, \mathbf{x}_{i,t}, \mathbf{s}_i\}로 이루어진 다변량 시계열이 주어지고, 여기서 yy는 타깃, xt\mathbf{x}_t는 시간에 따라 변하는 특성, si\mathbf{s}_i는 정적 메타데이터라 할 때, TFT는 다음을 학습합니다.

y^i(q,t,τ)=fq(yi,tk:t,xi,tk:t+τ,si)\hat{y}_{i}(q, t, \tau) = f_q\left(y_{i,t-k:t}, \mathbf{x}_{i,t-k:t+\tau}, \mathbf{s}_i\right)

여기서 qq는 분위수(확률적 예측을 가능하게 함), kk는 룩백 윈도우, τ\tau는 예측 기간입니다.

TFT 아키텍처: 전체 스택

Temporal Fusion Transformer 스택: 변수 선택 네트워크, 게이트 잔차 네트워크, LSTM 인코더-디코더, 그리고 해석 가능한 어텐션

TFT는 시계열에 일반 transformer를 그냥 갖다 붙인 것이 아닙니다. 다섯 개의 특화된 구성 요소를 갖춘 목적 지향적 아키텍처이며, 각 구성 요소는 시계열 예측의 특정 과제를 해결합니다.

1. 게이트 잔차 네트워크(GRN)

GRN은 TFT의 기본 구성 요소로, 비선형 처리가 필요한 아키텍처 곳곳에서 사용됩니다. 표준 순방향 레이어와 달리, GRN은 스킵 연결과 게이팅 메커니즘을 통합하여 네트워크가 정보 흐름을 적응적으로 제어할 수 있게 합니다.

주 입력 a\mathbf{a}와 선택적 컨텍스트 벡터 c\mathbf{c}가 주어지면, GRN은 다음을 계산합니다.

GRNω(a,c)=LayerNorm(a+GLUω(η1))\text{GRN}_\omega(\mathbf{a}, \mathbf{c}) = \text{LayerNorm}\left(\mathbf{a} + \text{GLU}_\omega(\boldsymbol{\eta}_1)\right)

여기서:

η1=W1,ωη2+b1,ω\boldsymbol{\eta}_1 = \mathbf{W}_{1,\omega} \boldsymbol{\eta}_2 + \mathbf{b}_{1,\omega}

η2=ELU(W2,ωa+W3,ωc+b2,ω)\boldsymbol{\eta}_2 = \text{ELU}\left(\mathbf{W}_{2,\omega} \mathbf{a} + \mathbf{W}_{3,\omega} \mathbf{c} + \mathbf{b}_{2,\omega}\right)

Gated Linear Unit(GLU)는 핵심 게이팅 메커니즘입니다.

GLU(γ)=σ(W4γ+b4)(W5γ+b5)\text{GLU}(\boldsymbol{\gamma}) = \sigma(\mathbf{W}_{4} \boldsymbol{\gamma} + \mathbf{b}_4) \odot (\mathbf{W}_{5} \boldsymbol{\gamma} + \mathbf{b}_5)

여기서 σ\sigma는 시그모이드 함수이고 \odot는 원소별 곱을 나타냅니다. 시그모이드 게이트는 입력의 어떤 차원을 억제할지 학습하여, 데이터가 요구하지 않을 때는 모델이 불필요한 비선형 처리를 완전히 건너뛸 수 있게 합니다. 이는 일부 특성이 특정 국면에서만 정보를 제공하는 금융 데이터에서 매우 중요합니다.

2. 변수 선택 네트워크(VSN)

이는 포트폴리오 응용에서 가장 가치 있는 구성 요소라 할 만합니다. 금융 데이터셋은 노이즈가 많기로 악명 높으며, 기술적 지표, 펀더멘털 비율, 거시 변수, 심리 점수 등 수십 개의 잠재적 특성을 포함하는데, 그중 상당수는 특정 시점에 중복되거나 무관합니다.

VSN은 모든 입력 특성에 대해 소프트 선택 가중치를 계산합니다.

vχt=Softmax(GRNvχ(Ξt,cs))\mathbf{v}_{\chi_t} = \text{Softmax}\left(\text{GRN}_{v_\chi}\left(\boldsymbol{\Xi}_t, \mathbf{c}_s\right)\right)

여기서 Ξt\boldsymbol{\Xi}_t는 시점 tt에서 변환된 모든 입력 특성을 평탄화한 벡터이고, cs\mathbf{c}_s는 정적 메타데이터에서 유도된 컨텍스트 벡터입니다. 각 개별 특성은 또한 자체 GRN을 통해 처리됩니다.

ξ~t(j)=GRNξ~(j)(ξt(j))\tilde{\boldsymbol{\xi}}^{(j)}_t = \text{GRN}_{\tilde{\xi}^{(j)}}\left(\boldsymbol{\xi}^{(j)}_t\right)

최종 선택된 표현은 가중합입니다.

ξ~t=j=1mχvχt(j)ξ~t(j)\tilde{\boldsymbol{\xi}}_t = \sum_{j=1}^{m_\chi} v_{\chi_t}^{(j)} \tilde{\boldsymbol{\xi}}^{(j)}_t

포트폴리오 맥락에서 vχt(j)v_{\chi_t}^{(j)}는 다음을 직접 알려줍니다. "시점 tt에서 모델은 특성 jj에 이만큼의 가중치를 두었다." 예를 들어 RSI가 횡보장에서 지배적이고, 거시 수익률 곡선 특성이 국면 전환기에 지배적임을 발견할 수도 있습니다. 이것은 사후적 설명이 아니라 아키텍처에 내장된 것입니다.

정적 공변량, 과거 관측 입력, 알려진 미래 입력에 대해 각각 별도의 VSN이 존재합니다. 이러한 분리는 예측 문제의 인과 구조를 존중합니다. 미래 관측치는 사용할 수 없지만, 알려진 미래 이벤트(실적 발표일, FOMC 회의, 옵션 만기, 요일 효과)는 사용할 수 있습니다.

3. 정적 공변량 인코더

포트폴리오 예측에서 정적 공변량은 시간이 지나도 변하지 않는 엔티티 수준의 메타데이터, 즉 자산군, 섹터, 거래소, 시가총액 구간, 지리적 지역 등을 나타냅니다. TFT는 이를 전용 GRN을 통해 처리하여 네 개의 서로 다른 컨텍스트 벡터를 생성합니다.

  • cs\mathbf{c}_s -- 시간적 변수 선택을 위한 컨텍스트
  • ce\mathbf{c}_e -- 시간적 특성의 정적 강화를 위한 컨텍스트(LSTM 이후에 적용)
  • cc\mathbf{c}_c -- LSTM의 셀 상태 초기화
  • ch\mathbf{c}_h -- LSTM의 은닉 상태 초기화

이것이 TFT가 횡단면 정보를 다루는 방식입니다. 500개 종목으로 이루어진 포트폴리오를 예측할 때, 정적 인코더는 별도의 모델을 둘 필요 없이 기술주와 유틸리티주가 근본적으로 다른 시간적 동학을 가진다는 것을 모델이 학습할 수 있게 합니다.

4. 시간적 처리: LSTM + 해석 가능한 멀티헤드 어텐션

TFT는 순환 아키텍처와 어텐션 기반 아키텍처의 장점을 결합한 2단계 시간적 처리 파이프라인을 사용합니다.

1단계: LSTM을 통한 지역 처리

시퀀스-투-시퀀스 LSTM 인코더-디코더가 시계열을 처리하여 지역적 시간 패턴, 즉 단기 모멘텀, 평균 회귀, 자기회귀 구조를 포착합니다. 인코더는 룩백 윈도우를 처리하고, 디코더는 알려진 미래 입력을 처리합니다. 둘 다 정적 컨텍스트 벡터 cc\mathbf{c}_c(셀 상태)와 ch\mathbf{c}_h(은닉 상태)로 초기화됩니다.

2단계: 해석 가능한 멀티헤드 어텐션을 통한 장거리 의존성

지역 처리 이후, TFT는 수정된 셀프 어텐션 메커니즘을 적용하여 장거리 의존성을 학습합니다. 핵심 수정 사항은 어텐션 헤드를 집계하는 방식에 있습니다. 표준 멀티헤드 어텐션은 헤드 출력을 연결(concatenate)합니다.

MultiHead(Q,K,V)=[head1;;headH]WO\text{MultiHead}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = [\text{head}_1; \ldots; \text{head}_H] \mathbf{W}_O

TFT는 대신 헤드 간에 값을 공유하고 어텐션 가중치를 평균합니다.

InterpretableMultiHead(Q,K,V)=H~WH\text{InterpretableMultiHead}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \tilde{\mathbf{H}} \mathbf{W}_H

H~=1Hh=1HAttention(QWQ(h),KWK(h),VWV)\tilde{\mathbf{H}} = \frac{1}{H} \sum_{h=1}^{H} \text{Attention}\left(\mathbf{Q} \mathbf{W}_Q^{(h)}, \mathbf{K} \mathbf{W}_K^{(h)}, \mathbf{V} \mathbf{W}_V\right)

Attention(Q,K,V)=Softmax(QKdattn)V\text{Attention}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{Softmax}\left(\frac{\mathbf{Q} \mathbf{K}^\top}{\sqrt{d_{\text{attn}}}}\right) \mathbf{V}

주목할 점은 WV\mathbf{W}_V에 헤드 위첨자가 없다는 것입니다. 모든 헤드가 동일한 값 투영을 공유합니다. 이는 각 헤드의 어텐션 가중치를 의미 있게 평균하여 시간적 중요도 점수로 해석할 수 있음을 뜻합니다. 주어진 예측에 대해, 모델이 어떤 과거 시간 스텝에 주의를 기울이는지, 그리고 어텐션 패턴이 헤드별로 어떻게 다른지를 정확히 시각화할 수 있습니다.

포트폴리오 예측에서 이는 모델이 최근 가격 움직임(모멘텀)에 주목하는지, 먼 과거의 패턴(계절성)에 주목하는지, 아니면 특정 캘린더 이벤트에 주목하는지를 드러냅니다. 각 헤드는 서로 다른 시간 패턴에 특화될 수 있습니다.

5. 분위수 출력 레이어

마지막 레이어는 여러 분위수에서의 예측을 출력하며, 분위수 손실로 최적화됩니다.

L(Ω)=ytΩqQτ=1τmaxQL(yt,y^(q,tτ,τ),q)Ωτmax\mathcal{L}(\Omega) = \sum_{y_t \in \Omega} \sum_{q \in \mathcal{Q}} \sum_{\tau=1}^{\tau_{\max}} \frac{QL(y_t, \hat{y}(q, t-\tau, \tau), q)}{|\Omega| \cdot \tau_{\max}}

QL(y,y^,q)=qmax(0,yy^)+(1q)max(0,y^y)QL(y, \hat{y}, q) = q \max(0, y - \hat{y}) + (1 - q) \max(0, \hat{y} - y)

여기서 Q\mathcal{Q}는 타깃 분위수의 집합입니다(예: {0.1,0.5,0.9}\{0.1, 0.5, 0.9\}). 이는 점 예측뿐만 아니라 각 기간에서 예측 구간의 분위수 추정치를 제공합니다. 포트폴리오 리스크 관리에서 10분위와 90분위 예측은 포지션 크기 조정과 손절 수준에 정보를 줍니다.

미리 짚어둘 한 가지 주의 사항이 있습니다. 핀볼 손실을 최소화하면 조건부 분위수 추정치가 나오지만, 이것이 표본 외에서 보정된 커버리지(calibrated coverage)를 보장하지는 않습니다. 비정상적이고 국면이 전환되는 시장에서 이러한 구간은 흔히 잘못 보정됩니다. 명목상 80% 구간이 실제 실현값의 80%보다 훨씬 적게(또는 많이) 포함할 수 있습니다. 분위수는 커버리지/신뢰도 검정을 통해 경험적으로 검증해야 할 추정치로 취급하고, 커버리지 보장이 필요하다면 컨포멀 예측(conformal prediction)으로 보강하십시오. 이에 대해서는 프로덕션 섹션에서 다시 다룹니다.

TFT vs LSTM vs 일반 Transformer

TFT 대 LSTM 대 일반 transformer: 서로 다른 선명도의 예측을 생성하는 세 가지 예측 아키텍처

TFT가 다른 아키텍처와 비교해 어디에 위치하는지 이해하면 언제 사용할지 결정하는 데 도움이 됩니다.

특성 LSTM 일반 Transformer TFT
장거리 의존성 제한적(기울기 소실) 강력함(셀프 어텐션) 강력함(LSTM + 어텐션)
변수 선택 없음(수동 특성 공학) 없음 내장 VSN
해석 가능성 불투명 어텐션 가중치(노이즈 많음) 구조화된 어텐션 + 변수 중요도
정적 공변량 임시방편적 연결 임시방편적 연결 전용 인코딩 파이프라인
다중 기간 출력 자기회귀(오차 누적) 직접 또는 자기회귀(디코딩 방식에 의존) 직접(병렬)
알려진 미래 입력 어색한 처리 기본 구분 없음 명시적 입력 분리
확률적 출력 수정 필요 수정 필요 네이티브 분위수 회귀
학습 안정성 보통 소규모 데이터에서 종종 불안정 안정적(게이팅이 도움)

LSTM이 여전히 우세한 경우

LSTM은 룩백 윈도우가 짧고 지역적 자기회귀 구조가 지배적인 초단기 예측(틱 수준, 분 이하)에서 여전히 경쟁력이 있습니다. 또한 배포가 더 간단하고 추론 시 지연이 더 낮습니다. 밀리초 이하의 예측이 필요한 마켓 메이킹 봇이라면 LSTM이 여전히 현실적인 선택입니다.

일반 Transformer가 부족한 경우

금융 시계열에 표준 transformer를 단순히 적용하면 종종 과적합됩니다. 시간 데이터에 필요한 귀납적 편향이 부족합니다. 정적 특성과 시간 가변 특성의 개념이 없고, 변수 선택이 없으며, 표준 연결형 멀티헤드 어텐션은 의미 있게 해석하기 어려운 어텐션 맵을 만들어냅니다.

TFT가 뛰어난 경우

TFT는 다음을 갖춘 경우에 최적입니다. (1) 여러 이질적인 입력 유형, (2) 횡단면 데이터(다수의 자산), (3) 다중 기간 확률적 예측의 필요성, (4) 모델 해석 가능성에 대한 요구. 이는 본질적으로 모든 기관급 포트폴리오 예측 문제를 묘사합니다.

PyTorch Forecasting을 사용한 Python 구현

다음은 pytorch-forecasting 라이브러리를 사용하여 다중 자산 포트폴리오 수익률을 예측하는 TFT의 실용적인 구현입니다.

데이터 준비

진정한 알려진 미래 입력 -- day_of_week, days_to_earnings, is_fomc, days_to_expiry -- 을 의도적으로 사용한 점에 주목하십시오. 이들은 예측 윈도우에 대해 우리가 미리 알고 있는 값이며, 이를 알려진 실수형/범주형으로 입력하는 것이 바로 이 아키텍처가 중심으로 삼는 TFT의 역량입니다. 알려진 실수에서 원시 time_idx는 제외합니다. add_relative_time_idx=True가 이미 상대 위치 인덱스를 주입하며, 원시 단조 증가 카운터는 대부분 추세를 누설하기 때문입니다.

import pandas as pd
import numpy as np
import lightning.pytorch as pl
from lightning.pytorch.callbacks import EarlyStopping, LearningRateMonitor
from lightning.pytorch.loggers import TensorBoardLogger

from pytorch_forecasting import (
    TimeSeriesDataSet,
    TemporalFusionTransformer,
    QuantileLoss,
    GroupNormalizer,
)


max_encoder_length = 60   # 60 trading days lookback (~3 months)
max_prediction_length = 20 # 20 trading days ahead (~1 month)

training_cutoff = df["time_idx"].max() - max_prediction_length

training = TimeSeriesDataSet(
    df[lambda x: x.time_idx <= training_cutoff],
    time_idx="time_idx",
    target="log_return",
    group_ids=["asset_id"],
    min_encoder_length=max_encoder_length // 2,
    max_encoder_length=max_encoder_length,
    min_prediction_length=1,
    max_prediction_length=max_prediction_length,

    static_categoricals=["sector", "market_cap_bucket"],

    time_varying_known_categoricals=["day_of_week", "is_fomc"],
    time_varying_known_reals=["days_to_earnings", "days_to_expiry"],

    time_varying_unknown_reals=[
        "log_return",
        "rsi_14",
        "macd",
        "bb_width",
        "pe_ratio",
        "earnings_yield",
        "vix",
        "yield_spread",
        "dxy",
    ],

    target_normalizer=GroupNormalizer(
        groups=["asset_id"],
        transformation="softplus",
    ),
    add_relative_time_idx=True,
    add_target_scales=True,
    add_encoder_length=True,
)

validation = TimeSeriesDataSet.from_dataset(
    training, df, predict=True, stop_randomization=True
)

batch_size = 64
train_dataloader = training.to_dataloader(
    train=True, batch_size=batch_size, num_workers=4
)
val_dataloader = validation.to_dataloader(
    train=False, batch_size=batch_size * 4, num_workers=4
)

모델 정의 및 학습

tft = TemporalFusionTransformer.from_dataset(
    training,
    learning_rate=1e-3,
    hidden_size=64,
    attention_head_size=4,
    dropout=0.1,
    hidden_continuous_size=32,
    output_size=7,  # 7 quantiles
    loss=QuantileLoss(quantiles=[0.02, 0.1, 0.25, 0.5, 0.75, 0.9, 0.98]),
    log_interval=10,
    optimizer="Ranger",
    reduce_on_plateau_patience=4,
)

print(f"Number of parameters: {tft.size() / 1e3:.1f}k")

early_stop_callback = EarlyStopping(
    monitor="val_loss",
    min_delta=1e-4,
    patience=10,
    verbose=False,
    mode="min",
)

lr_logger = LearningRateMonitor()
logger = TensorBoardLogger("lightning_logs")

trainer = pl.Trainer(
    max_epochs=100,
    accelerator="auto",
    enable_model_summary=True,
    gradient_clip_val=0.1,
    callbacks=[lr_logger, early_stop_callback],
    logger=logger,
)

trainer.fit(
    tft,
    train_dataloaders=train_dataloader,
    val_dataloaders=val_dataloader,
)

해석 가능한 출력 추출

해석 가능성 호출에는 한 가지 분명하지 않은 요구 사항이 있습니다. interpret_output()원시(raw) 출력 딕셔너리(encoder_variables, decoder_variables, static_variables, encoder_attention 등의 키를 가진)를 소비하는데, 이는 predict()mode="raw"에서만 생성합니다. 한 번 계산한 뒤, 동일한 객체를 변수 중요도와 어텐션 양쪽에 재사용하십시오.

best_model_path = trainer.checkpoint_callback.best_model_path
best_tft = TemporalFusionTransformer.load_from_checkpoint(best_model_path)

raw_predictions, x = best_tft.predict(val_dataloader, mode="raw", return_x=True)

interpretation = best_tft.interpret_output(raw_predictions, reduction="sum")

best_tft.plot_interpretation(interpretation)

preds = raw_predictions.output["prediction"]

예측에서 포트폴리오 가중치로

def forecasts_to_portfolio_weights(
    predictions: dict,
    index: pd.DataFrame,
    risk_aversion: float = 2.0,
) -> pd.DataFrame:
    """
    Convert TFT multi-horizon quantile forecasts into long-only portfolio
    weights using a mean-variance-INSPIRED score (not a full optimization:
    there is no covariance matrix here, only a per-asset risk-adjusted score).

    Uses the median forecast as the expected return and (q90 - q10) as a
    proxy for forecast uncertainty.
    """
    preds = predictions["prediction"]

    median_return = preds[:, :, 3].mean(dim=1).numpy()  # avg across horizons
    q90 = preds[:, :, 5].mean(dim=1).numpy()
    q10 = preds[:, :, 1].mean(dim=1).numpy()
    forecast_uncertainty = q90 - q10  # width of 80% PI

    scores = median_return / (risk_aversion * forecast_uncertainty + 1e-8)

    result = index[["asset_id"]].copy()
    result["score"] = scores
    result["raw_weight"] = np.maximum(scores, 0)  # long-only

    total = result["raw_weight"].sum()
    result["weight"] = result["raw_weight"] / (total + 1e-8)

    return result[["asset_id", "weight", "score"]]

실무에서의 해석 가능성: TFT가 시장에 대해 드러내는 것

TFT 해석 가능성: 모델이 어떤 입력과 시간 스텝에 의존하는지 드러내는 어텐션 및 변수 중요도 가중치

TFT의 해석 가능성 출력은 학문적 호기심거리가 아닙니다. 포트폴리오 매니저에게 실행 가능한 인텔리전스를 제공합니다.

국면별 변수 중요도

변수 선택 가중치를 시간에 따라 살펴보면, 시장 직관과 일치하는 패턴이 나타납니다.

  • 2022년 금리 인상 사이클 동안: 수익률 곡선 특성(yield_spread, fed_funds_rate)이 변수 중요도를 지배하여 선택 가중치의 35~40%를 차지했습니다. 기술적 지표는 10% 미만으로 떨어졌습니다.
  • 2024년 AI 주도 랠리 동안: 모멘텀 특성(rsi_14, macd)의 중요도가 급등했습니다. 랠리가 기술 부문에 고도로 집중되었기 때문에 섹터 수준의 정적 공변량도 유의미해졌습니다.
  • 횡보 구간 동안: 평균 회귀 지표(bb_width, relative_value)가 가장 높은 가중치를 받았고, 추세 추종 특성은 게이팅 메커니즘에 의해 억제되었습니다.

이것이 GRN 게이팅이 작동하는 모습입니다. 모멘텀 특성이 아무런 신호를 담지 못할 때, GLU 게이트는 그 기여도를 0을 향해 몰아가고, 모델은 자동으로 대체 특성으로 전환합니다. (이들은 탐색적 실행에서 나온 예시적 패턴이며, 벤치마크된 결과가 아닙니다. 직접 보유한 데이터로 검증하십시오.)

시간적 어텐션 패턴

어텐션 가중치 시각화는 모델의 실효적 메모리 구조를 드러냅니다.

  • 단기 어텐션 정점: 시차 1~5에서의 강한 어텐션은 자기상관 및 단기 모멘텀/반전 효과를 반영합니다.
  • 주간 패턴: 시차 5, 10, 15에서의 어텐션 급증은 주간 캘린더 효과에 대응합니다.
  • 월간 패턴: 시차 21(한 거래월) 부근의 일관된 어텐션 정점은 월간 리밸런싱 흐름과 옵션 만기 효과를 포착합니다.
  • 실적 사이클: 개별 종목의 경우, 어텐션은 약 63일 및 126일 시차에서 날카로운 급증을 보이며, 이는 분기별 실적 발표일에 대응합니다.

이러한 패턴은 모델이 노이즈를 학습한 것이 아니라 의미 있는 시간 구조를 학습했다는 독립적인 검증을 제공합니다.

실전 성능과 응용

벤치마크 결과

원 논문과 후속 연구에서, TFT는 강력하고 잘 문서화된 성능을 보여줍니다.

  • 논문의 벤치마크 데이터셋(전력, 교통, 소매, 변동성) 전반에서 차순위 모델 대비 평균적으로 7% 낮은 P50 및 9% 낮은 P90 분위수 손실, 그리고 데이터셋에 따라 가장 강력한 경쟁 베이스라인 대비 3~26% 개선을 보였습니다. 구체적인 경쟁자는 데이터셋마다 다릅니다. 예를 들어 DeepAR은 전력과 교통에서는 약한 베이스라인 축에 들지만 소매와 변동성에서는 더 경쟁력이 있습니다. 따라서 대표 수치는 어떤 단일 고정 베이스라인이 아니라 차순위 모델 대비 개선폭입니다.
  • 다중 기간 지표에서 고전적인 ARIMA, ETS, Prophet 베이스라인을 일관되게 능가합니다.

금융 분야의 연구 방향

TFT는 금융에 특화된 활발한 연구 흐름을 낳았습니다. 실제 보고된 지표와 함께 몇 가지 대표적인 갈래를 소개합니다(어느 것이든 의존하기 전에 인용하고 재현하십시오).

  • 암호화폐를 위한 적응형/멀티스케일 TFT. Adaptive Temporal Fusion Transformers for Cryptocurrency Price Prediction (arXiv:2509.10542) 같은 연구는 고정 길이 TFT 및 LSTM 베이스라인 대비 암호화폐 가격 예측에서의 개선을 보고합니다. 거래 수익성 수치는 보편적이라기보다 논문에 특수하고 국면에 의존하는 것으로 취급하십시오. 여기서 절대 샤프 델타를 인용하지 않는 것은 의도적입니다. 문헌에 떠도는 수치들이 예측 정확도실현 샤프를 혼동하는 경우가 흔하기 때문입니다.
  • 샤프 인식 목적 함수. MDPI Sensors의 "멀티센서 TFT / 적응형 샤프 비율" 계열 연구는 샤프 스타일의 목적 함수를 직접 최적화합니다. 다만 그 대표 결과는 대략 샤프 비율 예측 정확도의 18% 개선이며, 이는 절대 샤프 증가와는 다른 양임에 유의하십시오.
  • 하이브리드 TFT-GNN 모델. TFT와 그래프 신경망을 결합하여 자산 간 의존성을 포착하며, 하이브리드가 횡단면 종목 예측에서 단독 TFT를 능가한다고 보고됩니다.
  • 교차 모달 시간 융합. transformer 융합 레이어를 통해 구조화된 가격 데이터를 비구조화 데이터(뉴스, 실적 발표 콜 녹취록)와 통합하여, TFT 패러다임을 멀티모달 금융 데이터로 확장합니다.

이러한 방향은 실재하지만, 어느 것도 즉시 적용 가능한 엣지는 아닙니다. 배포하기 전에 자신의 유니버스와 비용으로 지표를 재현하십시오.

프로덕션을 위한 실무적 고려 사항

데이터 요구 사항: TFT는 상당한 양의 학습 데이터가 필요합니다. 자산당 최소 23년의 일별 데이터, 또는 612개월의 시간별 데이터를 계획하십시오. 횡단면 데이터(다수의 자산)는 상당히 도움이 됩니다. 500개 종목을 동시에 학습하는 것이 500개의 개별 모델을 학습하는 것보다 더 효과적입니다.

특성 공학: TFT가 변수 선택을 자동으로 수행하더라도, 후보 특성의 품질은 여전히 중요합니다. 기술적, 펀더멘털, 거시, 대체 데이터를 아우르는 다양한 특성 집합을 포함하십시오. 무엇이 유용한지는 VSN이 결정하게 두십시오.

계산 비용: TFT는 LSTM보다 학습 비용이 높지만 일반 transformer와는 비슷합니다. 단일 A100 GPU에서 3년치 일별 데이터로 500개 종목을 학습하는 데 100 에폭 기준 몇 시간 정도가 걸립니다. 추론은 빠릅니다. 전체 유니버스에 대한 예측 생성은 1초도 채 걸리지 않습니다.

보정을 검증하라, 가정하지 말라. 어떤 분위수든 포지션 크기 조정을 좌우하기 전에, 표본 외 데이터에서 경험적 커버리지를 확인하십시오. 명목상 80% 구간이 실제로 실현 수익률의 약 80%를 포함하는가? 비정상적 시장에서는 흔히 그렇지 않습니다. 기간별로 신뢰도 다이어그램을 실행하고, 커버리지를 복원하기 위해 모델을 컨포멀 예측으로 감싸는 것을 고려하십시오.

국면 적응: TFT는 (HMM과 달리) 국면 전환을 명시적으로 모델링하지 않습니다. 그러나 게이팅 메커니즘이 암묵적인 국면 적응을 제공합니다. 실무적으로는 확장 윈도우로 매월 재학습하는 것이 구조적 변화를 효과적으로 포착합니다.

과적합 완화: 금융 데이터는 노이즈가 많고 비정상적입니다. 공격적인 정규화를 사용하십시오. 드롭아웃 0.10.3, 기울기 클리핑 0.1, 1015 에폭의 인내심을 둔 조기 종료. 워크 포워드 검증은 필수입니다. 시계열에는 절대 무작위 학습/테스트 분할을 사용하지 마십시오.

모두 종합하기: TFT 기반 포트폴리오 파이프라인

TFT 기반 포트폴리오 파이프라인: 포지션 크기 조정과 리스크 예산에 공급되는 다중 자산 확률적 예측

TFT 기반 포트폴리오 관리를 위한 프로덕션 파이프라인은 다음과 같습니다.

  1. 데이터 수집: OHLCV, 펀더멘털, 거시, 대체 데이터를 매일 수집합니다. 진정한 알려진 미래 캘린더(실적, FOMC, 만기, 요일)를 포함하여 특성(200개 이상의 후보)을 계산합니다.
  2. 특성 저장소: 정규화되고 시간 인덱싱된 특성 저장소를 유지합니다. 결측 데이터, 기업 행위, 생존 편향을 처리합니다.
  3. 모델 학습: 워크 포워드 방법론을 사용하여 매월 TFT를 재학습합니다. 확장 윈도우로 가장 최근 3~5년의 데이터를 사용합니다.
  4. 예측 생성: 전체 자산 유니버스에 대해 1, 5, 10, 20일 기간의 분위수 예측을 매일 추론으로 생성합니다.
  5. 보정 점검: 기간별로 각 분위수 구간의 커버리지를 추적합니다. 커버리지가 표류하면 재보정(또는 컨포멀 조정을 적용)합니다.
  6. 해석 가능성 대시보드: 변수 중요도와 어텐션 가중치를 시각화합니다. 이상 징후(예: 특성 중요도의 급격한 변화)에 표시를 남깁니다.
  7. 포트폴리오 최적화: 평균-분산, 블랙-리터만, 또는 리스크 패리티를 사용하여 예측을 가중치로 변환하며, TFT 분위수가 수익률과 불확실성 입력을 제공합니다.
  8. 리스크 오버레이: 2분위와 98분위 예측을 꼬리 리스크 평가에 사용합니다. 예측 구간이 넓어지면 포지션 크기를 줄입니다.
  9. 실행: 목표 가중치를 실행 엔진에 전달합니다. 목표 포트폴리오와 실현 포트폴리오 간의 추적 오차를 모니터링합니다.

결론

Temporal Fusion Transformer는 정량적 포트폴리오 관리에 있어 진정한 진보를 나타냅니다. 이는 금융 데이터에 던져진 또 하나의 딥러닝 모델이 아닙니다. 다중 기간 시간 예측의 특정 과제들, 즉 이질적 입력, 횡단면 구조, 확률적 출력, 그리고 해석 가능성에 대한 결정적 필요를 위해 처음부터 설계된 아키텍처입니다.

변수 선택 네트워크는 모델이 무엇에 주의를 기울이는지 알려줍니다. 어텐션 가중치는 모델이 언제를 들여다보는지 알려줍니다. 게이팅 메커니즘은 모델이 무관한 특성과 국면 변화를 우아하게 처리하도록 보장합니다. 그리고 분위수 출력은 리스크 관리를 위한 불확실성 추정치를 제공합니다. 단, 그 보정을 맹신하지 말고 검증한다는 전제하에서 말입니다.

TFT는 만능 해결책이 아닙니다. 금융 시장은 어떤 예측 엣지든 일시적이고 국면에 의존하는 적대적 환경으로 남아 있습니다. 그러나 TFT는 강력하면서도 이해 가능한 예측 시스템을 구축하기 위한 원칙 있는 프레임워크를 제공합니다. 그리고 실전 트레이딩에서, 모델이 베팅을 하는지 이해하는 것은 그 베팅 자체만큼이나 중요합니다.


참고 문헌

  1. Lim, B., Arik, S.O., Loeff, N., & Pfister, T. (2021). "Temporal Fusion Transformers for Interpretable Multi-horizon Time Series Forecasting." International Journal of Forecasting, 37(4), 1748-1764. arXiv:1912.09363
  2. Oreshkin, B.N., Carpov, D., Chapados, N., & Bengio, Y. (2020). "N-BEATS: Neural basis expansion analysis for interpretable time series forecasting." ICLR 2020.
  3. Salinas, D., Flunkert, V., Gasthaus, J., & Januschowski, T. (2020). "DeepAR: Probabilistic forecasting with autoregressive recurrent networks." International Journal of Forecasting, 36(3), 1181-1191.
  4. pytorch-forecasting documentation -- TFT implementation with PyTorch Lightning.
  5. google-research/tft -- Original TFT reference implementation.
blog.disclaimer

Authors

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

시장에서 앞서 나가세요

뉴스레터를 구독하여 독점적인 AI 트레이딩 통찰력, 시장 분석 및 플랫폼 업데이트를 받아보세요.

귀하의 개인정보를 존중합니다. 언제든지 구독을 취소할 수 있습니다.