Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

시계열 트랜스포머

시계열(temporal) 데이터는 시간 축을 따라 순서대로 관측되는 값의 흐름입니다. 전력 수요, 가격, 센서 신호처럼 "지금"의 값이 “이전” 값들에 의존하는 데이터가 모두 여기에 속합니다. Part 1에서 다룬 합성곱·완전연결 신경망은 입력의 순서나 시간 간격을 본질적으로 모델링하지 못하지만, 트랜스포머는 시퀀스 전체를 토큰의 집합으로 보고 어텐션으로 토큰 간 관계를 학습합니다. 이 장에서는 트랜스포머 아키텍처를 시계열 예측에 적용한 Temporal Transformer의 개념과, 사전학습된 시계열 기반 모델을 곧바로 활용하는 방법을 살펴봅니다.

1시계열을 토큰 시퀀스로 다루기

Temporal Transformer의 핵심 발상은 시계열의 각 시점(또는 일정한 구간)을 하나의 토큰으로 간주하는 것입니다. 그러면 길이 TT의 시계열은 자연어 문장과 동일하게 토큰의 시퀀스 x1,x2,,xTx_1, x_2, \dots, x_T 로 표현되고, 어텐션을 통해 임의의 두 시점 사이의 관계를 직접 학습할 수 있습니다.

순환신경망이 정보를 시간 순서대로 한 칸씩 전달하면서 먼 과거의 신호가 희미해지는 것과 달리, 어텐션은 멀리 떨어진 시점이라도 한 번의 연산으로 직접 연결합니다. 덕분에 Temporal Transformer는 시계열의 장기 의존성(long-range dependency) 을 효과적으로 포착하며, 예측과 분석 작업에서 강한 성능을 보입니다.

예측 대상이 되는 과거 값(target) 외에, 함께 주어지는 부가 정보를 공변량(covariate) 이라고 합니다. 예를 들어 전력 가격을 예측할 때 요일·기온·발전량 같은 변수가 공변량이 되며, 그중 미래 값을 미리 알 수 있는 것(달력 정보 등)은 예측 구간에 대해서도 입력으로 넣어 정확도를 높일 수 있습니다.

2사전학습 시계열 모델로 곧바로 예측하기

최근에는 대규모 시계열 코퍼스로 미리 학습된 시계열 기반 모델(time series foundation model) 이 등장하여, 직접 학습 과정을 거치지 않고도 새로운 시계열에 바로 예측을 수행할 수 있습니다. 아래에서는 Amazon의 Chronos 계열 모델(chronos-2)을 사용합니다. 사전학습된 파이프라인을 불러온 뒤, 과거 데이터(context_df)와 미래 공변량(future_df)을 넘기면 지정한 길이만큼의 예측을 생성합니다.

import pandas as pd  # requires: pip install 'pandas[pyarrow]'
from chronos import Chronos2Pipeline

pipeline = Chronos2Pipeline.from_pretrained("amazon/chronos-2", device_map="cuda")

# Load historical target values and past values of covariates
context_df = pd.read_parquet("https://autogluon.s3.amazonaws.com/datasets/timeseries/electricity_price/train.parquet")

# (Optional) Load future values of covariates
test_df = pd.read_parquet("https://autogluon.s3.amazonaws.com/datasets/timeseries/electricity_price/test.parquet")
future_df = test_df.drop(columns="target")

# Generate predictions with covariates
pred_df = pipeline.predict_df(
    context_df,
    future_df=future_df,
    prediction_length=24,  # Number of steps to forecast
    quantile_levels=[0.1, 0.5, 0.9],  # Quantiles for probabilistic forecast
    id_column="id",  # Column identifying different time series
    timestamp_column="timestamp",  # Column with datetime information
    target="target",  # Column(s) with time series values to predict
)

여기서 짚어 둘 인자들은 다음과 같습니다.

인자의미
prediction_length앞으로 몇 스텝을 예측할지(여기서는 24 스텝)
quantile_levels확률적 예측을 위한 분위수. [0.1, 0.5, 0.9] 는 중앙값과 함께 80% 예측 구간을 제공
id_column여러 시계열을 구분하는 식별자 열
timestamp_column시점 정보를 담은 열
target예측 대상이 되는 값의 열

주목할 점은 단일 값이 아니라 분위수(quantile) 를 출력한다는 것입니다. 시계열 예측은 미래의 불확실성을 동반하므로, 하나의 점 추정 대신 "중앙값은 이쯤이고 변동 범위는 이 정도"라는 확률적 예측이 의사결정에 더 유용합니다. 미래 공변량을 함께 넣으면 모델이 알려진 미래 조건을 반영해 예측을 보정합니다.

3예측 결과 확인

반환된 pred_df 는 시계열 식별자와 타임스탬프별로, 요청한 분위수 예측값을 담은 데이터프레임입니다.

pred_df

각 행은 한 시계열의 한 미래 시점에 대응하며, 분위수 열을 통해 점 추정(중앙값 0.5)과 불확실성 구간(0.1~0.9)을 동시에 읽을 수 있습니다. 이렇게 사전학습된 Temporal Transformer를 활용하면, 시계열마다 모델을 새로 학습하지 않고도 어텐션 기반의 장기 의존성 모델링 능력을 즉시 가져와 예측에 쓸 수 있습니다.