logo

Prophetverse

Prophetverse

  • Prophet 모형의 원리를 확장한 시계열 예측 라이브러리
  • sktime과 호환되는 fit()·predict() 인터페이스
  • 기본 모형에 계절성을 추가하여 예측 결과 비교
pip install prophetverse

실습 준비

  • 맥주 생산량과 다음 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>

슬라이드의 기본 Prophetverse 모형 예측 예시

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

현재 환경에서 실행한 기본 모형의 맥주 생산량 예측

계절성 추가

  • 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 예측 예시

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

현재 환경에서 실행한 연간 계절성을 추가한 모형의 맥주 생산량 예측

  • 기본 모형과 비교하여 계절성을 추가했을 때의 반복 패턴 확인

퀴즈

문제 1 / 4맞음: 0힌트: 0틀림: 0채점중: 0남음: 4

Prophetverse 기본 모형에 연간 계절성을 반영하려면 어떤 준비가 필요한가요?

  • ○예측 결과를 정수로 반올림한다.
  • ○마지막 관측값만 반복한다.
  • ○계절성 효과를 명시적으로 추가한다.
  • ○미래 날짜를 과거 날짜로 바꾼다.

퀴즈를 풀려면 대화형 기능을 불러와야 합니다.

Previous
시계열 예측