-
[GluonTS 1탄] GluonTS란 무엇일까?PROGRAMMING/python 2024. 9. 15. 20:58
※ 모든 내용은 gluonts 홈페이지에서 번역하여 가져온 내용입니다. 출처는 GluonTS 홈페이지에 있음을 알려드립니다.
https://ts.gluon.ai/stable/index.html
Target and Features
target time series (타겟) : 예측하고자 하는 시간
features(피처) : 타겟에 영향을 미치는 추가적인 값으로 정적 피터(static feature) / 동적 피터 (dynamic feature) 또는 범주형 피처(categorical feature) / 연속형 피처(continuous feature)로 나눈다.
- 동적 피처 : 각 시간 지점마다 다를 수 있는 정보
- 정적 피처 : 시간과 관계없이 시간 시리즈를 설명하는 정보
- 연속형 피처 : 숫자 자체가 의미를 갖는 피처
- 범주형 피처 : 동일한 특성을 갖지 않으며, 숫자에는 의미가 없는 피처
💫 대부분의 모델은 예측을 할 때 미래 시간 범위에서도 동적 피처가 필요하다.
Probabilistic Forecasting
GluonTS는 단순한 값이 아니라 분포를 예측할 수 있다.
Local and Global Models
GluonTS에서는 로컬 모델과 글로벌 모델을 사용한다.
- 로컬 모델 : 단일 시간 시리즈에 맞게 학습되며, 그 시간 시리즈에 대한 예측을 수행
- 글로벌 모델 : 여러 시간 시리즈를 학습하여, 단일 글로벌 모델이 데이터셋의 모든 시간 시리즈에 대한 예측을 수행
Gluonts에서는 로컬 모델이 예측기(predictor)로 직접 제공되는 반면, 글로벌 모델은 먼저 훈련이 필요한 추정기(estimator)로 제공된다.
Estimator and Predictor
GluonTS는 Estimator과 Predictor라는 두 개의 추상화(abstraction)을 사용한다.
* abstraction : 복잡한 개념을 간단하게 표현하거나, 서로 다른 방식으로 구현될 수 있는 개념을 일반화하는 것
- Estimator : 모델을 학습시키는 역할을 담당하는 클래스로 주어진 데이터셋으로 모델을 훈련한 후, 예측할 수 있는 Predictor를 생성한다. → 훈련하는 단계
- Predictor : 실제로 예측을 수행하는 클래스로 이미 훈련된 모델을 바탕으로 주어진 입력에 대해 미래의 값을 예측한다. → `하는 단계
predictor = estimator.train(train_data) forecasts = predictor.predict(data)
Estimator와 Predictor, 이렇게 두 개의 클래스로 나눈 이유는 모델을 훈련하는 단계(Estimator)와 훈련된 모델로 예측을 수행하는 단계(Predictor)를 분리해서 관리하기 위함이다.
이는 로컬 모델과는 대조적으로, 로컬 모델은 개별 시간 시리즈에 맞게 학습되어 각 시간 시리즈의 특성을 포착하려 하지만, 데이터셋 전체의 특성은 반영하지 않는다.
글로벌 모델은 훈련하는데 많은 시간이 걸리므로 별도의 오프라인 단계에서 학습이 이루어지지만, 로컬 모델은 빠르게 학습되며 예측 과정이 온라인으로 진행된다.
# 글로벌 DeepAR 모델 estimator = DeepAREstimator(prediction_length=24, freq="H") predictor = estimator.train(train_data) # 로컬 Prophet 모델 predictor = ProphetPredictor(prediction_length=24)
Dataset
GluonTS에서 Dataset은 시간 시리즈 객체들의 모음이다. 각 객체는 시간 시리즈의 속성을 나타내는 여러 열(또는 필드, field)을 가진다. 대부분의 모델은 미래에 예측하고자 하는 시간 시리즈를 나타내기 위해 target 열을 사용한다.
{"target": [1, 2, 3, 4, 5, 6]}
target열은 GluonTS에서 강제되는 것은 아니지만, 대부분의 모델에서 관례적으로 사용한다.
좀 더 자세히 말하자면 Dataset은 아래와 같이 정의된다.
DataEntry = dict[str, Any] # DataEntry : 하나의 시간 시리즈와 그 관련 데이터를 저장하는 역할 # key : str, value : 모든 타입 가능 # 예시 : { "target": [1, 2, 3, 4, 5], # 예측하려는 시간 시리즈 "dynamic_feat": [[0.1, 0.2, 0.3, 0.4, 0.5]], # 시간에 따라 변하는 추가적인 피처 "start": "2023-01-01" # 시간 시리즈의 시작 시간 } class Dataset(Protocol): # Protocol : 해당 클래스가 특정 인터페이스를 만족한다는 것을 명시하는 추상적 개념 # Dataset이 특정 매서드(__iter__, __len__)을 반드시 구현해야 한다는 것을 의미 def __iter__(self) -> Iterator[DataEntry]: ... # 사용 예시 : #for data_entry in dataset: # print(data_entry["target"]) def __len__(self) -> int: ...
Available models
https://ts.gluon.ai/stable/getting_started/models.html 에서 확인 가능
대부분 PyTorch나 MXNet으로 구현되어 있다.
'PROGRAMMING > python' 카테고리의 다른 글
[1] pykan 라이브러리 사용법 : Hello KAN! (2) 2024.10.13 [GluonTS 3탄] GluonTS로 시계열 데이터 예측해보기 - 심화편 (0) 2024.09.20 [GluonTS 2탄] GluonTS로 시계열 데이터 예측해보기 (1) 2024.09.15 [PyTorch] gather 함수 설명(slicing 없이 특정 인덱스만 추출하기) (0) 2024.09.11