Google TimesFM 2.5 리뷰: 시계열 데이터에도 파운데이션 모델이 통할까?
시계열 예측(Time-series forecasting)은 엔지니어들에게 늘 골칫거리입니다. 주기성, 트렌드, 노이즈가 뒤섞인 데이터를 다루다 보면 결국 ARIMA나 Prophet 같은 고전적인 통계 모델로 돌아가거나, LightGBM에 엄청난 Feature Engineering을 쏟아붓게 되죠. 그런데 최근 Google Research에서 시계열 데이터를 위한 파운데이션 모델인 TimesFM 2.5를 내놓았습니다. 솔직히 처음엔 ‘LLM 유행에 편승한 또 다른 장난감 아닌가?’ 하는 의구심이 들었습니다. 하지만 코드를 뜯어보고 논문을 읽어보니, 실무적으로 꽤 흥미로운 접근법을 취하고 있더군요.
TimesFM 2.5: 무엇이 달라졌나?
이전 버전과 비교했을 때, 이번 2.5 릴리즈는 다분히 ‘프로덕션 환경’을 의식한 업데이트입니다. 핵심적인 변경 사항은 다음과 같습니다.
- 파라미터 경량화: 500M에서 200M으로 파라미터 크기를 줄였습니다. 텍스트나 이미지와 달리 시계열 데이터는 정보 밀도가 낮습니다. 무식하게 파라미터만 키우는 것은 Overfitting의 지름길이죠. 구글도 이를 깨닫고 모델을 다이어트시킨 것으로 보입니다.
- 컨텍스트 확장: Context Length를 2048에서 16k로 대폭 늘렸습니다. 16k면 분 단위 데이터라도 꽤 긴 주기의 Seasonality(계절성)를 캡처할 수 있는 수준입니다. 시계열에서 과거 데이터의 긴 흐름을 보는 것은 매우 중요합니다.
- Quantile Forecast 지원: 30M 크기의 Quantile Head를 추가해 최대 1k horizon까지 연속적인 분위수 예측을 지원합니다. 개인적으로 가장 마음에 드는 부분입니다. 예측값 하나만 던져주는 모델은 실무에서 쓸 수 없습니다. Confidence Interval(신뢰 구간)이 있어야 비즈니스 리스크를 관리할 수 있으니까요.
- Frequency Indicator 제거: 데이터의 주기(일, 주, 월 등)를 명시적으로 알려줄 필요 없이 모델이 스스로 추론하도록 변경되었습니다.
과연 ‘범용’ 시계열 모델이라는 게 존재할 수 있을까?
Hacker News 커뮤니티에서도 이 모델을 두고 격렬한 토론이 벌어졌습니다. 가장 눈에 띄는 질문은 이것이었습니다. ‘어떻게 하나의 모델이 이탈리아의 계란 가격과 글로벌 인플레이션을 동시에 신뢰할 수 있는 수준으로 예측할 수 있는가?’
저 역시 비슷한 의문을 가졌습니다. 이미지나 텍스트 모델은 범용적인 ‘문법’이나 ‘물리 법칙(예: 중력에 의한 형태)‘이 존재합니다. 하지만 시계열은 도메인마다 생성 원리가 완전히 다릅니다. 금융 데이터와 센서 데이터가 같은 구조를 가질 리 없죠.
하지만 본질을 파고들면, 이 모델은 ‘계란 가격’이나 ‘인플레이션’이라는 도메인 지식을 이해하는 게 아닙니다. 시계열 데이터의 기저에 깔린 Trend, Seasonality, Residual의 패턴을 학습할 뿐입니다. 구글은 이 모델을 학습시킬 때 합성 데이터(Piece-wise linear, ARMA, 다양한 주기의 삼각함수)를 대량으로 사용했습니다. 즉, 모델은 수많은 신호의 조합 패턴을 기억하는 거대한 Pattern Matcher 역할을 하는 겁니다.
물론 한계는 명확합니다. 누군가 이 모델로 비트코인의 단기 방향성을 예측하려 한다면 도시락 싸들고 다니며 말리고 싶습니다. HN의 한 유저가 지적했듯, 비트코인 같은 Random Walk에 가까운 혼돈의 시스템은 과거 패턴이 미래를 보장하지 않습니다. 반면, 전력 수요 예측, 서버 트래픽, 리테일 재고 관리처럼 인간의 활동이나 자연 현상(날씨, 휴일 등)에 의해 발생하는 주기적인 데이터라면 이 모델의 진가가 발휘될 것입니다.
코드와 사용성
API는 최근 트렌드에 맞게 Hugging Face 생태계와 잘 통합되어 있습니다. PyTorch와 Flax 백엔드를 모두 지원하는 것도 장점입니다.
import torch
import numpy as np
import timesfm
torch.set_float32_matmul_precision("high")
model = timesfm.TimesFM_2p5_200M_torch.from_pretrained("google/timesfm-2.5-200m-pytorch")
model.compile(
timesfm.ForecastConfig(
max_context=1024,
max_horizon=256,
normalize_inputs=True,
use_continuous_quantile_head=True,
)
)
point_forecast, quantile_forecast = model.forecast(
horizon=12,
inputs=[
np.linspace(0, 1, 100),
np.sin(np.linspace(0, 20, 67)),
],
)
위 코드에서 보듯 use_continuous_quantile_head=True 옵션 하나로 평균값뿐만 아니라 10th에서 90th 분위수까지 한 번에 뽑아낼 수 있습니다. XReg를 통한 공변량(Covariate) 지원이 다시 추가된 것도 실무 적용성을 크게 높여줍니다. 외부 변수(예: 프로모션 여부, 휴일 등)를 모델에 태울 수 있다는 건 엄청난 무기입니다.
결론: 그래서 프로덕션에 쓸 만한가?
TimesFM 2.5는 결코 마법의 지팡이가 아닙니다. ‘이 모델이 데이터의 의미를 이해하고 있다’는 환상은 버려야 합니다. 이 모델은 철저히 고도화된 Curve Fitting 도구입니다.
하지만 Zero-shot으로 이 정도 성능을 내는 시계열 모델이 오픈소스로 풀렸다는 것은 큰 의미가 있습니다. 새로운 도메인의 데이터를 만났을 때, 복잡한 Feature Engineering 없이 즉각적으로 투입해볼 수 있는 매우 강력한 Baseline 모델을 얻게 된 셈입니다. 기존의 LightGBM 기반 파이프라인을 완전히 대체하기보다는, 초기 검증이나 보조 지표로 활용하기에 완벽한 도구라고 평가하고 싶습니다.
References
- Original Article: https://github.com/google-research/timesfm
- Hacker News Thread: https://news.ycombinator.com/item?id=47583045