본문으로 건너뛰기

074 PyCaret 시계열 모듈 시작하기

키워드: pycaret time series, 시계열 모듈

개요

PyCaret 3.0부터 시계열 예측 모듈이 추가되었습니다. 다양한 시계열 예측 알고리즘을 간편하게 사용할 수 있으며, 자동화된 모델 선택과 하이퍼파라미터 튜닝을 제공합니다.

실습 환경

  • Python 버전: 3.11 권장
  • 필요 패키지: pycaret[full]>=3.0

시계열 모듈 임포트

from pycaret.time_series import *

샘플 데이터 준비

import pandas as pd
import numpy as np

# 074 시계열 데이터 생성
np.random.seed(42)
dates = pd.date_range('2020-01-01', periods=365*2, freq='D')

# 074 구성 요소
trend = np.linspace(100, 150, len(dates))
seasonality = 20 * np.sin(2 * np.pi * np.arange(len(dates)) / 365)
weekly = 5 * np.sin(2 * np.pi * np.arange(len(dates)) / 7)
noise = np.random.normal(0, 5, len(dates))

values = trend + seasonality + weekly + noise

# 074 데이터프레임
data = pd.DataFrame({
'date': dates,
'value': values
})
data.set_index('date', inplace=True)

print(f"데이터 기간: {data.index.min()} ~ {data.index.max()}")
print(f"데이터 수: {len(data)}")
print(data.head())

setup() 함수

from pycaret.time_series import *

# 074 환경 설정
ts = setup(
data=data,
target='value',
fh=30, # 예측 기간 (forecast horizon)
session_id=42,
verbose=False
)

print("설정 완료!")

주요 파라미터

ts = setup(
data=data,
target='value',
fh=30, # 예측 기간
fold=3, # 교차 검증 폴드 수
seasonal_period=365, # 계절 주기 (자동 감지도 가능)
fold_strategy='expanding',# 교차 검증 전략
numeric_imputation_target='drift', # 결측치 처리
session_id=42,
verbose=False
)

교차 검증 전략

expanding: 학습 데이터 누적 증가
┌───────┐ test
├────────┐ test
├─────────┐ test

sliding: 고정 크기 윈도우 이동
┌───┐ test
┌───┐ test
┌───┐ test

지원 알고리즘 확인

from pycaret.time_series import *

ts = setup(data, target='value', fh=30, session_id=42, verbose=False)

# 074 지원 모델 목록
print(models())

주요 알고리즘:

모델 ID알고리즘설명
naiveNaive단순 예측 (마지막 값)
snaiveSeasonal Naive계절 단순 예측
polytrendPolynomial Trend다항식 추세
arimaARIMA자기회귀 통합 이동평균
auto_arimaAuto ARIMA자동 ARIMA
exp_smoothExponential Smoothing지수 평활
etsETS오차, 추세, 계절성 분해
thetaTheta세타 방법
prophetProphetFacebook Prophet
lr_cds_dtLinear w/ Deseasonalize선형 회귀 + 계절성 제거
en_cds_dtElastic Net w/ DeseasonalizeElastic Net + 계절성 제거
ridge_cds_dtRidge w/ DeseasonalizeRidge + 계절성 제거
lasso_cds_dtLasso w/ DeseasonalizeLasso + 계절성 제거
lightgbm_cds_dtLightGBM w/ DeseasonalizeLightGBM + 계절성 제거

create_model() 함수

from pycaret.time_series import *

ts = setup(data, target='value', fh=30, session_id=42, verbose=False)

# 074 단순 모델
naive = create_model('naive')

# 074 Auto ARIMA
arima = create_model('auto_arima')

# 074 지수 평활
exp_smooth = create_model('exp_smooth')

# 074 Prophet
prophet = create_model('prophet')

# 074 LightGBM
lgbm = create_model('lightgbm_cds_dt')

모델 비교

from pycaret.time_series import *

ts = setup(data, target='value', fh=30, fold=3, session_id=42, verbose=False)

# 074 여러 모델 비교
best = compare_models()

# 074 상위 3개 모델
top3 = compare_models(n_select=3)

# 074 특정 모델만 비교
selected = compare_models(include=['naive', 'arima', 'exp_smooth', 'prophet'])

예측 수행

from pycaret.time_series import *

ts = setup(data, target='value', fh=30, session_id=42, verbose=False)

# 074 모델 생성
model = create_model('auto_arima')

# 074 예측
predictions = predict_model(model)
print(predictions)

# 074 예측 기간 변경
predictions_60 = predict_model(model, fh=60)

시각화

from pycaret.time_series import *
import matplotlib.pyplot as plt

ts = setup(data, target='value', fh=30, session_id=42, verbose=False)

model = create_model('auto_arima')

# 074 예측 시각화
plot_model(model, plot='forecast')

# 074 진단 플롯
plot_model(model, plot='diagnostics')

# 074 분해 플롯
plot_model(model, plot='decomp')

# 074 잔차 ACF
plot_model(model, plot='acf')

# 074 잔차 분포
plot_model(model, plot='residuals')

교차 검증 결과 확인

from pycaret.time_series import *

ts = setup(data, target='value', fh=30, fold=5, session_id=42, verbose=False)

# 074 모델 생성 (교차 검증 자동 실행)
model = create_model('auto_arima')

# 074 각 폴드별 성능 확인
# 074 create_model 실행 시 출력되는 테이블에서 확인

# 074 최종 모델의 메트릭
# 074 MASE, RMSSE, MAE, RMSE, MAPE, SMAPE, R2

모델 저장 및 로드

from pycaret.time_series import *

ts = setup(data, target='value', fh=30, session_id=42, verbose=False)

model = create_model('auto_arima')

# 074 모델 저장
save_model(model, 'ts_model')

# 074 모델 로드
loaded_model = load_model('ts_model')

# 074 로드한 모델로 예측
predictions = predict_model(loaded_model)

전체 워크플로우 예제

from pycaret.time_series import *
import pandas as pd
import numpy as np

# 1. 데이터 준비
np.random.seed(42)
dates = pd.date_range('2020-01-01', periods=365*2, freq='D')
values = (100 + np.linspace(0, 50, len(dates)) +
20 * np.sin(2 * np.pi * np.arange(len(dates)) / 365) +
np.random.normal(0, 5, len(dates)))

data = pd.DataFrame({'date': dates, 'value': values})
data.set_index('date', inplace=True)

# 2. 환경 설정
ts = setup(
data=data,
target='value',
fh=30,
fold=3,
session_id=42,
verbose=False
)

# 3. 모델 비교
print("=== 모델 비교 ===")
best = compare_models(n_select=3)

# 4. 최적 모델로 예측
print("\n=== 예측 ===")
predictions = predict_model(best[0])
print(predictions.head())

# 5. 시각화
plot_model(best[0], plot='forecast')

# 6. 저장
save_model(best[0], 'best_ts_model')
print("\n모델 저장 완료!")

PyCaret 시계열 데이터세트

from pycaret.datasets import get_data

# 074 내장 시계열 데이터세트 사용
airline = get_data('airline')
print(airline.head())
print(f"Shape: {airline.shape}")

# 074 setup에 사용
from pycaret.time_series import *

ts = setup(
data=airline,
fh=12, # 12개월 예측
session_id=42,
verbose=False
)

best = compare_models()

자주 사용하는 설정

from pycaret.time_series import *

# 074 일별 데이터 (연간 계절성)
ts_daily = setup(
data=data,
target='value',
fh=30,
seasonal_period=365,
session_id=42
)

# 074 월별 데이터 (연간 계절성)
ts_monthly = setup(
data=monthly_data,
target='value',
fh=12,
seasonal_period=12,
session_id=42
)

# 074 주별 데이터 (연간 계절성)
ts_weekly = setup(
data=weekly_data,
target='value',
fh=52,
seasonal_period=52,
session_id=42
)

정리

  • PyCaret 시계열: from pycaret.time_series import *
  • setup()으로 환경 설정 (fh, fold 중요)
  • compare_models()로 최적 모델 탐색
  • create_model()로 개별 모델 생성
  • predict_model()로 예측 수행
  • plot_model()로 시각화

다음 글 예고

다음 글에서는 단변량 시계열 예측을 다룹니다.


PyCaret 머신러닝 마스터 시리즈 #074