🤗 Transformers를 이용한 시계열 Transformer 확률적 예측

TL;DR

Hugging Face는 Time Series Transformer를 소개했습니다. 이는 단일 변수 시계열에 대한 전역 확률적 예측을 학습하는 기본적인 인코더‑디코더 Transformer이며, Tourism Monthly 데이터셋에서 기존 베이스라인보다 우수한 성능을 보입니다.


왜 전역 확률 모델인가?

많은 관련 시계열에 대해 하나의 모델을 학습하는 (global 모델) 은 네트워크가 공유 패턴과 잠재 표현을 포착하도록 해줍니다. 이는 각 시계열을 독립적으로 맞추는 고전적인 “local” 방법과 다릅니다. 확률적 예측—점 추정이 아니라 전체 분포를 예측하는 것—은 하위 의사결정에 필수적인 불확실성 정량화를 제공합니다.

아키텍처 개요

Time Series Transformer는 표준 Transformer (Vaswani et al., 2017)를 인코더‑디코더 구성으로 재사용합니다:

  • Encoder 고정 크기의 과거 관측값 컨텍스트 윈도우를 소비합니다.
  • Decoder 인과 마스킹을 사용해 미래 값을 자동회귀적으로 생성합니다. 이는 텍스트 생성과 유사합니다.
  • Distribution head (default: Student‑t) 각 예측 단계에 대한 확률 분포의 파라미터를 출력합니다.

핵심 장점:

  • 누락된 값을 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)과 age 특성을 생성합니다.
    • 시간 특성을 스택하고 필드명을 Transformer API에 맞게 변경합니다.
  4. InstanceSplitter를 생성합니다 인코더용 context_length + max(lags) 크기의 윈도우와 디코더용 prediction_length 크기의 윈도우를 샘플링합니다. 세 가지 모드를 지원합니다: train(무작위 윈도우), validation(마지막 윈도우), test(마지막 컨텍스트만).
  5. DataLoaders를 구축합니다 변환된 인스턴스를 텐서(past_values, past_time_features, future_time_features 등)로 배치합니다.

학습 루프 (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를 자동으로 시프트하여 likelihood loss를 계산합니다.
  • 하이퍼파라미터 탐색을 수행하지 않았으며, 40 epoch만으로도 강력한 결과를 얻었습니다.

자동회귀 생성으로 추론

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개의 Monte‑Carlo 궤적을 생성합니다.
  • 샘플들의 중앙값을 점 예측 평가에 사용합니다.

평가 지표

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 (본 연구) 1.256

Transformer는 데이터셋‑특정 튜닝 없이 가장 낮은 MASE를 달성했으며, 전역 어텐션 메커니즘이 계절성 및 추세 패턴을 효과적으로 포착할 수 있음을 시사합니다.

실용적인 시사점

  • 전역 확률 예측은 🤗 Transformers 라이브러리를 사용해 몇 줄의 코드만으로 구현할 수 있습니다.
  • 언어 모델에 사용되는 동일한 API(generate, forward, loss)가 시계열 데이터에도 적용되어 실무자의 진입 장벽을 낮춥니다.
  • 누락 데이터 처리는 attention mask를 통해 기본적으로 지원되어 별도의 보간이 필요하지 않습니다.
  • 이차 시간 복잡도의 attention은 컨텍스트 길이를 제한하므로, 향후 연구에서는 효율적인 attention 변형을 도입할 수 있습니다.

커뮤니티를 위한 다음 단계

  • 다변량 확장 – 대각선 독립 및 전체 공분산 분포 헤드를 지원합니다.
  • 시계열 분류 – 이상 탐지 및 기타 작업을 위한 분류 헤드를 추가합니다.
  • 사전 학습 체크포인트 – NLP/비전과 유사하게 이질적인 시계열 코퍼스에 대한 대규모 사전 학습을 탐색합니다.
  • 선택적 날짜‑시간 입력 – 명시적 타임스탬프가 없는 데이터셋(예: 신경과학 기록)에 맞게 파이프라인을 조정합니다.
  • 효율적인 attention – 희소 또는 선형 복잡도 attention을 통합하여 실현 가능한 컨텍스트 윈도우를 확대합니다.

이번 릴리스는 적절한 확률 헤드와 데이터 파이프라인을 결합한 기본적인 Transformer가 단변량 예측에서도 경쟁력을 갖춘다는 것을 보여줍니다. 연구자와 엔지니어는 Hugging Face Hub의 다른 데이터셋을 실험하고, 주파수별 파라미터를 조정하며, 라이브러리에 추가 모델을 기여하도록 권장됩니다.

SUMMARY: Hugging Face는 전역 확률 시계열 예측을 위한 기본 Transformer 모델을 출시했으며, Tourism Monthly 벤치마크에서 최첨단 성능을 입증했습니다.

TITLE: 🤗 Transformers를 이용한 시계열 Transformer 확률적 예측

Sources

관련

  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch