🤗 Transformers を用いた時系列トランスフォーマーの確率的予測

TL;DR

Hugging Face は Time Series Transformer を導入しました。これは、単変量系列に対してグローバルな確率的予測を学習するバニラのエンコーダ‑デコーダトランスフォーマーで、Tourism Monthly データセットにおいて従来のベースラインを上回ります。


なぜグローバル確率的モデルなのか?

多くの関連する系列に対して単一のモデルを訓練する(グローバル モデル)ことで、ネットワークは共有パターンや潜在表現を捉えることができます。これは、各系列を個別にフィットさせる従来の「ローカル」手法とは異なります。確率的予測—点推定ではなく完全な分布を予測すること—は、下流の意思決定に不可欠な不確実性の定量化を提供します。

アーキテクチャ概要

The Time Series Transformer は、エンコーダ‑デコーダ構成で標準的な Transformer(Vaswani et al., 2017)を再利用します。

  • Encoder は過去観測の固定サイズコンテキストウィンドウを消費します。
  • Decoder は因果マスキングを用いて自己回帰的に将来の値を生成し、テキスト生成に類似しています。
  • Distribution head(デフォルト: Student‑t)は、各予測ステップの確率分布のパラメータを出力します。

Key benefits

  • attention_mask のようなメカニズムで欠損値を処理します。
  • ウィンドウトレーニングにより、任意のコンテキスト長と予測長をサポートします。
  • NLPモデルと同じ API を活用し、推論時に generate() を使用可能にします。

モデル構成の詳細

from transformers import TimeSeriesTransformerConfig, TimeSeriesTransformerForPrediction

config = TimeSeriesTransformerConfig(
    prediction_length=24,               # forecast horizon (months)
    context_length=48,                  # encoder window (2× horizon)
    lags_sequence=[1,2,3,4,5,6,7,11,12,13,23,24,25,35,36,37],
    num_time_features=2,                # month‑of‑year + age feature
    num_static_categorical_features=1, # series ID
    cardinality=[366],                  # 366 regions in the dataset
    embedding_dimension=[2],
    encoder_layers=4,
    decoder_layers=4,
    d_model=32,
)

model = TimeSeriesTransformerForPrediction(config)
  • モデルは Student‑t 分布を学習します(model.config.distribution_output == "student_t")。
  • 静的カテゴリ埋め込みは各系列の識別子をエンコードし、単一のモデルで 366 系列すべてに対応できるようにします。

データパイプライン(GluonTS + 🤗 Datasets)

  1. Monash の tourism_monthly データセットをロードします(train/validation/test に分割、366 系列)。
  2. start タイムスタンプを pandas.Period に変換し、時系列特徴量の生成を容易にします。
  3. GluonTS の変換チェーンを定義し、
    • 未使用の静的/動的フィールドを削除します。
    • フィールドを NumPy 配列に変換します。
    • 欠損値用の observed‑mask を追加します。
    • 時系列特徴量(month_of_year)とエイジ特徴量を生成します。
    • 時間的特徴量をスタックし、Transformer API に合わせてフィールド名を変更します。
  4. InstanceSplitter を作成し、エンコーダ用に context_length + max(lags)、デコーダ用に prediction_length のウィンドウをサンプリングします。3 つのモードをサポートします:train(ランダムウィンドウ)、validation(最後のウィンドウ)、test(最後のコンテキストのみ)。
  5. 変換されたインスタンスをテンソル(past_values、past_time_features、future_time_features など)にバッチ化する DataLoaders を構築します。

トレーニングループ(Accelerate)

from accelerate import Accelerator
from torch.optim import AdamW

accelerator = Accelerator()
model.to(accelerator.device)
optimizer = AdamW(model.parameters(), lr=6e-4, betas=(0.9, 0.95), weight_decay=1e-1)
model, optimizer, train_loader = accelerator.prepare(model, optimizer, train_loader)

model.train()
for epoch in range(40):
    for batch in train_loader:
        optimizer.zero_grad()
        outputs = model(**batch)
        accelerator.backward(outputs.loss)
        optimizer.step()
  • デコーダは future_values を自動的にシフトして尤度損失を計算します。
  • ハイパーパラメータの探索は行わず、40 エポックで十分な結果が得られました。

自己回帰生成による推論

model.eval()
forecasts = []
for batch in test_loader:
    out = model.generate(**batch)
    forecasts.append(out.sequences.cpu().numpy())
forecasts = np.vstack(forecasts)   # shape: (366, 100, 24)
  • generate() は学習された分布からサンプリングし、各系列につき 100 本のモンテカルロ軌跡を生成します。
  • サンプルの中央値を点予測の評価に使用します。

評価指標

Using the evaluate library:

  • MASE(Mean Absolute Scaled Error) = 1.256(366 系列の平均)。
  • sMAPE(Symmetric Mean Absolute Percentage Error) = 0.161。

ベンチマーク比較

モデル MASE
SES 3.306
Theta 1.649
TBATS 1.751
ETS 1.526
(DHR‑)ARIMA 1.589
PR 1.678
CatBoost 1.699
FFNN 1.582
DeepAR 1.409
N‑BEATS 1.574
WaveNet 1.482
Transformer (this work) 1.256

Transformer はデータセット固有のチューニングなしで最も低い MASE を達成し、グローバルな注意メカニズムが季節性とトレンドパターンを効果的に捉えられることを示唆しています。

実践的なポイント

  • グローバル確率的予測は、🤗 Transformers ライブラリを用いて数行のコードで実装できます。
  • 言語モデルで使用される同じ API(generate、forward、loss)が時系列データにも適用でき、実務者のハードルを下げます。
  • 欠損データの処理は attention mask によってネイティブに行われ、補完の必要がなくなります。
  • 二次的な注意コストがコンテキスト長を制限するため、将来的には効率的な注意機構の導入が検討されます。

コミュニティへの次のステップ

  • 多変量拡張 – 対角独立および全共分散分布ヘッドをサポートします。
  • 時系列分類 – 異常検知などのタスク向けに分類ヘッドを追加します。
  • 事前学習チェックポイント – NLP/ビジョンに類似した、異種時系列コーパスでの大規模事前学習を検討します。
  • 任意の日時入力 – 明示的なタイムスタンプがないデータセット(例:神経科学の記録)にパイプラインを適応させます。
  • 効率的な注意 – スパースまたは線形計算量の注意機構を統合し、実用的なコンテキストウィンドウを拡大します。

このリリースは、適切な確率ヘッドとデータパイプラインを組み合わせたバニラTransformerが、単変量予測において競争力があることを示しています。研究者やエンジニアは、Hugging Face Hub の他のデータセットで実験し、周波数固有のパラメータを調整し、ライブラリに追加モデルを貢献することが奨励されています。

Sources

関連

  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch