Nixtla

Nixtla (TimeGPT)

Nixtla는 시계열(time series) 예측과 이상 감지(anomaly detection)를 위한 파운데이션 모델 TimeGPT를 만드는 회사예요. 특히 StatsForecastMLForecast처럼 널리 쓰이는 시계열 예측 라이브러리들을 운영하는 곳이기도 하죠. 이 문서에서 다룰 nixtla SDK는 TimeGPT를 파이썬 코드 몇 줄로 불러 쓸 수 있게 해 주는 오픈소스 클라이언트예요. TimeGPT-1은 "시계열 예측과 이상 감지를 위한 최초의 파운데이션 모델"이라는 타이틀을 내걸고 있는데, 사전 학습(pre-trained)된 거대 트랜스포머가 시계열 데이터를 보고 바로 예측을 내놓는 방식이에요.

출처: 문서

본문

TimeGPT란?

TimeGPT는 생산(production)에서 바로 쓸 수 있도록 만들어진, 시계열을 위한 생성형 사전 학습 트랜스포머(generative pretrained transformer)예요. 소매(retail), 전력(electricity), 금융(finance), 사물인터넷(IoT) 같은 다양한 도메인의 데이터를 단 몇 줄의 코드만으로 정확하게 예측할 수 있어요.

과거에는 ARIMA, ETS, MSTL, Theta, CES 같은 통계적 방법이나 XGBoost, LightGBM 같은 머신러닝 모델, 그리고 딥러닝 모델들이 시계열 분석의 표준이었어요. TimeGPT는 이 흐름을 바꿔서 zero-shot inference(제로샷 추론)만으로도 뛰어난 성능과 효율, 그리고 단순함을 제공해요. 데이터만 업로드하면 한 줄의 코드로 예측이나 이상 감지를 할 수 있으니, 코딩 경험이 많지 않은 사람도 쉽게 쓸 수 있어요.

TimeGPT의 아키텍처

TimeGPT는 "Attention is all you need" 논문에서 나온 self-attention(자기 주의) 개념을 기반으로 해요. 기존의 대형 언어 모델(LLM)을 그대로 가져다 쓴 게 아니라, 방대한 시계열 데이터셋으로 독립적으로 학습시킨 대형 트랜스포머 모델이에요. 예측 오차를 최소화하도록 설계됐죠.

아키텍처는 encoder-decoder 구조로 여러 개의 레이어로 이루어져 있고, 각 레이어에는 residual connections(잔차 연결)과 layer normalization(레이어 정규화)이 들어 있어요. 마지막에는 선형 레이어(linear layer)가 디코더의 출력을 forecasting window(예측 구간) 차원에 맞게 매핑해 줘요. 주의 기반 메커니즘(attention-based mechanisms)이 과거 사건들의 다양성을 포착하고 잠재적인 미래 분포를 올바르게 외삽(extrapolate)할 수 있다는 게 핵심 아이디어예요.

TimeGPT는 공개된 시계열 데이터 중 가장 큰 규모로 학습됐어요. 총 1,000억 개(100 billion)가 넘는 데이터 포인트를 포함하고요. 금융, 경제, 인구통계, 의료, 날씨, IoT 센서 데이터, 에너지, 웹 트래픽, 판매, 운송, 은행 등 다양한 도메인의 시계열이 섞여 있어서, 다양한 특성의 시계열을 학습했어요.

주요 기능

  • Zero-shot Inference: 사전 학습 데이터 없이도 시계열 데이터만 주어지면 바로 예측과 이상 감지를 해 줘요. 즉시 배포하고 빠르게 통찰을 얻을 수 있어요.
  • Fine-tuning: 여러분의 특정 데이터셋으로 모델을 파인튜닝해서 성능을 높일 수 있어요.
  • API Access: 공개 API를 통해 애플리케이션에 TimeGPT를 통합할 수 있고, 자체 인프라에 배포할 수도 있어요.
  • Exogenous Variables 추가: 예측에 영향을 주는 추가 변수(예: 특별한 날짜, 이벤트, 가격)를 넣어 정확도를 높일 수 있어요.
  • Multiple Series Forecasting: 여러 시계열을 동시에 예측할 수 있어요.
  • Custom Loss Function: 파인튜닝 과정에서 맞춤형 손실 함수를 사용할 수 있어요.
  • Cross Validation: 교차 검증 기법을 바로 쓸 수 있어 모델의 견고성을 확인할 수 있어요.
  • Prediction Intervals: 예측 구간을 제공해 불확실성을 정량화할 수 있어요.
  • Irregular Timestamps: 불규칙한 타임스탬프가 있는 데이터도 전처리 없이 처리할 수 있어요.

설치하기

먼저 nixtla SDK를 설치해요.

pip install nixtla>=0.7.0

라이브러리와 데이터를 임포트해요.

import pandas as pd
from nixtla import NixtlaClient

TimeGPT로 예측하기 (3단계)

# Get your API Key at https://nixtla.io/free-trial?utm_source=nixtla.io&utm_campaign=/docs/readme

# 1. Instantiate the NixtlaClient
nixtla_client = NixtlaClient(api_key = 'YOUR API KEY HERE')

# 2. Read historic electricity demand data
df = pd.read_csv('https://raw.githubusercontent.com/Nixtla/transfer-learning-time-series/main/datasets/electricity-short.csv')

# 3. Forecast the next 24 hours
fcst_df = nixtla_client.forecast(df, h=24, level=[80, 90])

# 4. Plot your results (optional)
nixtla_client.plot(df, fcst_df, level=[80, 90])

NixtlaClient를 만들 때 API 키를 넣고, forecast(df, h=24, level=[80, 90])를 호출하면 다음 24시간을 예측해 줘요. level은 예측 구간(prediction interval)을 의미해요.

이상 감지하기 (3단계)

# Get your API Key at https://nixtla.io/free-trial?utm_source=nixtla.io&utm_campaign=/docs/readme

# 1. Instantiate the NixtlaClient
nixtla_client = NixtlaClient(api_key = 'YOUR API KEY HERE')

# 2. Read Data # Wikipedia visits of NFL Star (
df = pd.read_csv('https://datasets-nixtla.s3.amazonaws.com/peyton-manning.csv')


# 3. Detect Anomalies
anomalies_df = nixtla_client.detect_anomalies(df, time_col='timestamp', target_col='value', freq='D')

# 4. Plot your results (optional)
nixtla_client.plot(df, anomalies_df,time_col='timestamp', target_col='value')

detect_anomalies 메서드에 시계열 컬럼과 타깃 컬럼, 그리고 빈도(freq='D' = 일별)를 지정하면 이상치를 찾아 줘요.

Zero-shot 성능

TimeGPT는 30만 개가 넘는 고유한 시계열에서 제로샷 추론 능력을 테스트했어요. 테스트 데이터셋에 대한 추가 파인튜닝 없이 모델을 사용하는 방식인데도, 잘 알려진 통계적 모델과 최신 딥러닝 모델을 포함한 다양한 기준 모델을 뛰어넘고 여러 주기(frequency)에서 항상 상위 3위 안에 들었다고 해요. 사용하기도 쉬워서 사전 학습된 모델로 간단하고 빠르게 예측할 수 있고, 내부 테스트 기준 제로샷 추론의 평균 GPU 추론 속도는 시리즈당 0.6ms로 단순한 Seasonal Naive 모델과 거의 비슷할 정도로 빨라요.

라이선스

TimeGPT 자체는 클로즈드소스(closed source)지만, 이 SDK는 오픈소스로 Apache 2.0 License 아래 제공돼요. 깃허브의 Contributing 가이드를 참고해 기여할 수도 있어요.

더 알아보기 (Learn more)