Prophetverse
Prophetverse
- Prophet 모형의 원리를 확장한 시계열 예측 라이브러리
sktime과 호환되는fit()·predict()인터페이스- 기본 모형에 계절성을 추가하여 예측 결과 비교
pip install prophetverse
실습 준비
import pandas as pd
- 맥주 생산량과 다음 20개 분기의 예측 날짜를 준비
beer = pd.read_excel('beer.xlsx', parse_dates=True, index_col='quarter')
y = beer.production
start_date = beer.index[-1] + pd.offsets.QuarterBegin(startingMonth=1) # 다음 달력 분기초
future_dates = pd.date_range(start=start_date, periods=20, freq='QS')
기본 모형으로 예측
fit(y=y): 과거 생산량으로 모형 적합predict(fh=future_dates): 미래 날짜에 대한 생산량 예측- 기본 모형에는 연간·주간 계절성이 자동으로 포함되지 않음
from prophetverse.sktime import Prophetverse
pp = Prophetverse()
pp.fit(y=y)
실행 결과
Prophetverse()
y_pp = pp.predict(fh=future_dates)
pred_pp = pd.DataFrame({'production': y_pp}, index=future_dates)
pred_pp.head()
실행 결과
production
2010-07-01 414.790253
2010-10-01 414.199615
2011-01-01 413.608917
2011-04-01 413.031158
2011-07-01 412.446716
beer.production.plot()
pred_pp.production.plot()
실행 결과
<Axes: xlabel='quarter'>
<Figure size 640x480 with 1 Axes>

- 위 그림은 슬라이드의 예시. 아래는 현재 환경에서 실제 계산한 결과

계절성 추가
LinearFourierSeasonality: 사인·코사인 형태의 푸리에 항으로 계절성 표현freq='D': 주기의 기준 단위를 일로 지정sp_list=[365.25]: 평균적인 1년 길이에 해당하는 주기fourier_terms_list=[10]: 연간 계절성을 표현할 푸리에 항 개수- 항 개수가 커질수록 표현할 수 있는 계절 곡선이 복잡해짐
- 설정 예: 연간 10, 주간 3, 월간 3~10. 자료와 목적에 맞게 조절
no_input_columns: 이 계절성 효과는 별도의 입력 컬럼 없이 날짜 인덱스로 생성
from prophetverse.effects.fourier import LinearFourierSeasonality
from prophetverse.utils import no_input_columns
pps = Prophetverse(
exogenous_effects=[
('seasonality',
LinearFourierSeasonality(
freq='D', sp_list=[365.25], fourier_terms_list=[10]), # 연간 계절성
no_input_columns),
])
pps.fit(y=y)
실행 결과
Prophetverse(exogenous_effects=[('seasonality',
LinearFourierSeasonality(fourier_terms_list=[10],
freq='D',
sp_list=[365.25]),
'^$')])
y_pps = pps.predict(fh=future_dates)
pred_pps = pd.DataFrame({'production': y_pps}, index=future_dates)
pred_pps.head()
실행 결과
production
2010-07-01 388.728455
2010-10-01 486.886230
2011-01-01 418.340973
2011-04-01 372.630920
2011-07-01 386.312622
beer.production.plot()
pred_pps.production.plot()
실행 결과
<Axes: xlabel='quarter'>
<Figure size 640x480 with 1 Axes>

- 위 그림은 슬라이드의 예시. 아래는 현재 환경에서 실제 계산한 결과

- 기본 모형과 비교하여 계절성을 추가했을 때의 반복 패턴 확인
퀴즈
Prophetverse 기본 모형에 연간 계절성을 반영하려면 어떤 준비가 필요한가요?
퀴즈를 풀려면 대화형 기능을 불러와야 합니다.