← 記事一覧に戻る
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

ディープラーニングをポートフォリオ運用に適用するうえで最大のフラストレーションは、ブラックボックス問題です。バックテストでは目を見張るようなシャープレシオを叩き出すニューラルネットワークを訓練しても、本番環境で戦略が損失を出し始めると、その理由がまったくわからないのです。どの入力特徴量が予測を駆動したのか。どの時間ホライズンが重要なのか。モデルはマクロシグナルに反応していたのか、それともマイクロストラクチャーのノイズに反応していたのか。

Google Researchは、この問題に正面から取り組みました。それがTemporal Fusion Transformer(TFT)です。これはアテンションベースのアーキテクチャで、強力なマルチホライズン予測を実現しつつ、アテンション重みと変数重要度スコアを通じた解釈可能性を組み込みで提供します。元のベンチマークでは、TFTは次点のモデルと比較して分位点損失を平均で7%(P50)、9%(P90)削減し、最も強力な競合ベースラインに対してテストデータセット全体で3〜26%の改善を達成しました。定量的ポートフォリオマネージャーにとって、TFTは稀有なものを提供します。すなわち、強力でありながら透明性のあるモデルです。

本稿では、TFTのアーキテクチャを分解し、それをマルチホライズン・ポートフォリオ予測に適用する方法を示し、pytorch-forecastingを用いたPython実装をたどり、LSTMやバニラのトランスフォーマーのベースラインと比較します。

なぜマルチホライズン予測がポートフォリオにとって重要なのか

従来の単一ステップ予測は、時刻t+1t+1における1つの値を予測します。しかしポートフォリオの配分判断は、複数のホライズンにまたがって同時に動きます。ポートフォリオマネージャーが知る必要があるのは次のことです。

  • 1日ホライズン: 日中のリバランスとリスク管理のため
  • 1週間ホライズン: 戦術的な配分シフトのため
  • 1ヶ月ホライズン: 戦略的な配分とセクターローテーションのため
  • 1四半期ホライズン: マクロ駆動のポジショニングのため

各ホライズンは、異なるシグナル対ノイズ特性を持っています。短期リターンはマイクロストラクチャーとオーダーフローに支配されます。中期リターンはモメンタムと平均回帰に反応します。長期リターンはファンダメンタルズとマクロレジームに駆動されます。

これらすべてのホライズンにまたがる予測を同時に生成し、各ホライズンで予測の不確実性を分位点推定するモデルは、各ホライズンごとに別々のモデルを用いるよりも本質的に有用です。これはまさに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は、時系列に汎用トランスフォーマーを貼り付けただけのものではありません。これは目的に特化して構築されたアーキテクチャであり、5つの専門コンポーネントを持ち、それぞれが時系列予測における特定の課題に対処します。

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)

ゲート付き線形ユニット(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を通じて処理し、4つの異なるコンテキストベクトルを生成します。

  • 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は修正された自己アテンション機構を適用して長距離依存関係を学習します。鍵となる修正は、アテンションヘッドの集約方法にあります。標準的なマルチヘッドアテンションはヘッド出力を連結します。

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パーセンタイルの予測は、ポジションサイジングと損切りレベルを決める情報となります。

最初に述べておくべき注意点が1つあります。ピンボール損失を最小化すると条件付き分位点推定が得られますが、それはアウトオブサンプルでのキャリブレーション済みカバレッジを保証しません。非定常でレジームスイッチングが起こる市場では、これらの区間はしばしばミスキャリブレーションされます。すなわち、名目上80%の区間が、実現値の80%よりもはるかに少ない(あるいは多い)割合しかカバーしないことがあります。分位点はカバレッジ・信頼性テストで経験的に検証すべき推定値として扱い、カバレッジ保証が必要であればコンフォーマル予測で引き締めてください。本番セクションでこの点に立ち返ります。

TFT vs LSTM vs バニラトランスフォーマー

TFT対LSTM対バニラトランスフォーマー:鋭さの異なる予測を生成する3つの予測アーキテクチャ

TFTが他のアーキテクチャと比べてどこに位置づけられるかを理解することは、いつそれを使うべきかを判断するのに役立ちます。

機能 LSTM バニラトランスフォーマー TFT
長距離依存関係 限定的(勾配消失) 強力(自己アテンション) 強力(LSTM + アテンション)
変数選択 なし(手動の特徴量エンジニアリング) なし 組み込みのVSN
解釈可能性 不透明 アテンション重み(ノイズが多い) 構造化アテンション + 変数重要度
静的共変量 アドホックな連結 アドホックな連結 専用のエンコーディングパイプライン
マルチホライズン出力 自己回帰(誤差の累積) 直接または自己回帰(デコーディング依存) 直接(並列)
既知の将来入力 扱いがぎこちない ネイティブな区別なし 明示的な入力分離
確率的出力 修正が必要 修正が必要 ネイティブな分位点回帰
訓練の安定性 中程度 小規模データではしばしば不安定 安定(ゲーティングが助ける)

LSTMが依然として勝る場面

LSTMは、ルックバックウィンドウが短く局所的な自己回帰構造が支配的な、極めて短期の予測(ティックレベル、分未満)では依然として競争力があります。デプロイもより単純で、推論レイテンシも低くなります。サブミリ秒の予測を必要とするマーケットメイキングのボットにとっては、LSTMは依然として実用的な選択肢です。

バニラトランスフォーマーが力不足になる場面

金融時系列に素朴に適用された標準的なトランスフォーマーは、しばしば過学習します。時系列データに必要な帰納的バイアスを欠いており、静的特徴量と時変特徴量の概念もなく、変数選択もなく、標準的な連結型マルチヘッドアテンションは意味のある解釈が難しいアテンションマップを生成します。

TFTが優れている場面

TFTが最適なのは、次を持つ場合です。(1)複数の異質な入力タイプ、(2)クロスセクショナルデータ(多数の資産)、(3)マルチホライズンの確率的予測の必要性、(4)モデルの解釈可能性の要件。これは本質的に、あらゆる機関投資家のポートフォリオ予測問題を言い表しています。

PyTorch ForecastingによるPython実装

ここでは、pytorch-forecastingライブラリを使用した、マルチアセット・ポートフォリオのリターン予測のためのTFTの実践的な実装を示します。

データ準備

day_of_weekdays_to_earningsis_fomcdays_to_expiryという、本物の既知の将来入力を意図的に使用している点に注目してください。これらは予測ウィンドウについて事前に分かっている値であり、それらをknown reals/categoricalsとして与えることは、まさにこのアーキテクチャの中核をなすTFTの能力です。known realsから生の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営業日のルックバック (約3ヶ月)
max_prediction_length = 20 # 20営業日先 (約1ヶ月)

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つの分位点
    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,
)

解釈可能な出力の抽出

解釈可能性の呼び出しには、自明でない要件が1つあります。interpret_output()生の出力辞書(encoder_variablesdecoder_variablesstatic_variablesencoder_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:
    """
    TFT のマルチホライズン分位点予測を、平均分散にインスパイアされたスコア
    (完全な最適化ではない: ここには共分散行列はなく、アセットごとの
    リスク調整済みスコアのみが存在する) を用いて、ロングオンリーの
    ポートフォリオウェイトに変換する。

    中央値予測を期待リターンとして、(q90 - q10) を予測の不確実性の
    プロキシとして使用する。
    """
    preds = predictions["prediction"]

    median_return = preds[:, :, 3].mean(dim=1).numpy()  # ホライズン全体の平均
    q90 = preds[:, :, 5].mean(dim=1).numpy()
    q10 = preds[:, :, 1].mean(dim=1).numpy()
    forecast_uncertainty = q90 - q10  # 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)  # ロングオンリー

    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ゲートはそれらの寄与をゼロへと駆動し、モデルは自動的に代替の特徴量へとシフトします。(これらは探索的な実行から得られた例示的なパターンであり、ベンチマーク済みの結果ではありません。ご自身のデータで検証してください。)

時系列アテンションのパターン

アテンション重みの可視化は、モデルの実効的なメモリ構造を明らかにします。

  • 短期アテンションのピーク: ラグ1〜5での強いアテンションは、自己相関と短期のモメンタム/反転効果を反映します。
  • 週次パターン: ラグ5、10、15でのアテンションのスパイクは、週次のカレンダー効果に対応します。
  • 月次パターン: ラグ21付近(1取引月)での一貫したアテンションのピークは、月次リバランスのフローとオプション満期効果を捉えます。
  • 決算サイクル: 個別株については、アテンションがおよそ63日および126日のラグで鋭いスパイクを示し、四半期決算日に対応します。

これらのパターンは、モデルがノイズにフィットしたのではなく、意味のある時系列構造を学習したことの独立した検証を提供します。

実世界のパフォーマンスと応用

ベンチマーク結果

元の論文とその後の研究から、TFTは強力で十分に文書化されたパフォーマンスを示しています。

  • 論文のベンチマークデータセット(電力、交通、小売、ボラティリティ)全体で、次点のモデルと比較して平均でP50分位点損失が7%、P90分位点損失が9%低く、データセットに応じて最も強力な競合ベースラインに対して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を上回ると報告されています。
  • クロスモーダルな時系列融合。 構造化された価格データを非構造化データ(ニュース、決算説明会のトランスクリプト)とトランスフォーマー融合層を通じて統合し、TFTのパラダイムをマルチモーダルな金融データへと拡張します。

これらの方向性は本物ですが、いずれもターンキーのエッジではありません。デプロイする前に、ご自身のユニバースとコストで指標を再現してください。

本番運用のための実践的な考慮事項

データ要件: TFTにはかなりの量の訓練データが必要です。アセットあたり最低でも2〜3年分の日次データ、または6〜12ヶ月分の時間足データを見込んでください。クロスセクショナルデータ(多数の資産)はかなり助けになります。500銘柄を同時に訓練する方が、500個の別々のモデルを訓練するよりも効果的です。

特徴量エンジニアリング: TFTは変数選択を自動的に行いますが、候補となる特徴量の質は依然として重要です。テクニカル、ファンダメンタル、マクロ、オルタナティブデータにまたがる多様な特徴量セットを含めてください。何が有用かはVSNに判断させましょう。

計算コスト: TFTはLSTMよりも訓練コストが高いですが、バニラトランスフォーマーとは同等です。単一のA100 GPUでは、3年分の日次データを持つ500銘柄での訓練は、100エポックでおよそ数時間かかります。推論は高速で、ユニバース全体の予測の生成は1秒を十分に下回ります。

キャリブレーションを検証せよ、仮定するな。 いずれかの分位点がポジションサイジングを駆動する前に、アウトオブサンプルデータで経験的なカバレッジを確認してください。名目上80%の区間は、実際に実現リターンのおよそ80%を含んでいますか。非定常な市場では、しばしば含んでいません。ホライズンごとに信頼性図を実行し、カバレッジ保証を回復するためにモデルをコンフォーマル予測でラップすることを検討してください。

レジーム適応: TFTは(HMMとは異なり)レジームスイッチを明示的にはモデル化しません。しかし、ゲーティング機構は暗黙的なレジーム適応を提供します。実務上は、拡張ウィンドウで月次に再訓練することで、構造変化を効果的に捉えられます。

過学習の緩和: 金融データはノイズが多く非定常です。積極的な正則化を使用してください。0.1〜0.3のドロップアウト、0.1での勾配クリッピング、10〜15エポックの忍耐値での早期停止。ウォークフォワード検証は不可欠です。時系列に対してランダムな訓練/テスト分割を決して使わないでください。

すべてを組み合わせる: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 -- PyTorch Lightning を用いた TFT 実装。
  5. google-research/tft -- 元の TFT リファレンス実装。
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取引の洞察、市場分析、プラットフォームの更新情報を受け取りましょう。

プライバシーを尊重します。いつでも配信停止可能です。