상세 컨텐츠

본문 제목

[머신러닝] Prophet 사용해보기

coding/머신러닝

by golduny_zoo 2022. 8. 29. 12:41

본문

728x90

기간에 따른 현황파악을 할 수 있도록  Prophet을 다시 공부 해봤다

너무 어렵다.. 데이터 구해서 진행해보면서 실전에서 사용할 수 있도록 준비준비..

0. 설치하기

! pip3 install prophet
! pip3 install pystan
더보기

오류가 있어 pip 업그레이드를 해주었다.

1. 불러오기

import os 
import pandas as pd
from prophet import Prophet

2. 컬럼명 변경 하기

df[['STATS_DTTM', 'ORDER_CNT']].rename(columns={'기간':'ds', '실측값': 'y'})
# 시간은 ds로 예측값은 y로 컬럼명을 변경해야 한다.

3. 데이터 확인(시각화) 해보기

from matplotlib import pyplot
df1.plot(   y= 'y', x= 'ds', figsize = (20,8))
pyplot.show()

4. 시계열 예측 

m = Prophet()
# 학습
m.fit(df1)
# 예측하고 싶은 데이터를 만들어 놓는다. 
future = m.make_future_dataframe(periods=100) # periods : 예측 일 수
# 예측
forecast = m.predict(future) 
# 시각화
flg1 = m.plot(forecast, figsize = (20,8))
flg2 = m.plot_components(forecast, figsize = (20,8))

기본으로 나올 수 있는 그래프 데이터의 기간에 따른 트랜드를 볼 수 있다. 

내 데이터는 일자별로 있기에 주 별로 데이터가 어떻게 나오는지 알 수 있다.

 

모델을 정의 할 땐 파라미터 값이 있다. 

값을 조정할 경우 그래프가 세밀하게 조정 될 수 있다. 

# 파라미터값 조정해보기
# 모델 정의
m1 = Prophet(changepoint_prior_scale=0.1 # 값이 높을 수록 OVERFITTING위험 있음 0.3도 현재 오버피팅되있을 수 있음
            , weekly_seasonality=10   
            , yearly_seasonality=20
            , daily_seasonality=False  # 시간에 대한 자료가 존재하지 않음
            , seasonality_mode='additive' # 곱셈'multiplicative', 덧셈'additive'(default) 계절성 효과
)
m1.add_seasonality(name='monthly', period=30.5, fourier_order=5) # 필요한 seasonality는 추가 가능함
# 학습 
m1.fit(df1)  
# 예측데이터 
future = m1.make_future_dataframe(periods=365) # periods : 예측 일 수
forecast = m1.predict(future) 
flg3 = m1.plot(forecast, figsize = (20,8))
flg4 = m1.plot_components(forecast, figsize = (20,8))

관련글 더보기