본문 바로가기
Study/시계열

4. Prophet 패키지를 이용한 간단 시계열 예측

by 까망우동 2024. 7. 8.
반응형

 

Prophet는 Facebook에서 개발한 오픈 소스 시계열 데이터 예측 도구이다. 비정상적이고 결측치가 있는 데이터에 강하며, 주기적 패턴과 추세를 감지하는 데 효과적이다. Python과 R에서 사용할 수 있으며, 가장 큰 장점은 사용하기가 매우 쉽다. 

 

머신러닝, 딥러닝과 같은 인공지능 모델보다는 ARIMA와 같은 확률적 모형에 가깝다고 할 수 있고, 

다만 ARIMA 보다는 좀 더 도메인 지식(가정) 을 모델에 유연하게 입힐 수 있다. 


 

  • Prophet 모델의 생성과 학습은 아래 코드 3줄이 전부다. 
  • 주의할 점은, Prophet의 입력 데이터는 칼럼명을 ds (= 날짜), y (= 값)으로 설정해줘야 한다. 
  • Prophet 에는 사용가능한 다양한 옵션들이 있는데, 이들 각각에 대해서는 나중에 정리하겠다.. 여러가지 옵션을 통해서 연간 계절성이 있는지, 값이 급격히 바뀌는 특정 분기점(change point) 이 있는지 등.. 도메인 가정을 입힐 수 있다. 
from prophet import Prophet

ts.index=pd.date_range(start = '2013-01-01',end='2015-10-01', freq = 'MS') # Month Start
ts.columns=['ds','y']  # prophet 패키지를 이용할때는 컬럼명을 이렇게 바꿔줘야함 : ds = 날짜컬럼 , y = 값 컬럼 // ds 컬럼의 형식은 무조건 datetime 이어야한다.

# model = Prophet(model_params)
model = Prophet(yearly_seasonality=True)  # Instantiate the model : 프로펫 모델은 처음에 instantiate 를 먼저 한번 해줘야함. instantiate 한번에 피팅 한번밖에 못함

# Prophet params : 프로펫의 다양한 사용가능 옵션들
# Example

# growth(values = c("linear", "logistic"))

# changepoint_num(range = c(10L, 50L), trans = NULL)
# changepoint_range(range = c(0.6, 0.9), trans = NULL)

# seasonality_yearly(values = c(TRUE, FALSE))
# seasonality_weekly(values = c(TRUE, FALSE))
# seasonality_daily(values = c(TRUE, FALSE))

# prior_scale_changepoints(range = c(-3, 2), trans = log10_trans())
# prior_scale_seasonality(range = c(-3, 2), trans = log10_trans())
# prior_scale_holidays(range = c(-3, 2), trans = log10_trans())

model.fit(ts) # fit the model

 

  • 학습된 모델을 통한 예측
  • future 데이터프레임은 기존에 ds 로 정의한 칼럼에, 예측하고자 하는 구간인 period 기간만큼을 연장해서 만들어줌
# Predict for five months in the furure
future = model.make_future_dataframe(periods = 5, freq = 'MS')  # 모델이 피팅한 데이터 (ts) 에 5개 주기만큼을 더한 시점데이터를 만듬
forecast = model.predict(future)

 

  • 예측 결과에 대한 시각화. 예측값(점추정 + 구간추정) 과 실제값을 비교해서 시각화할 수 있고, 추세와 계절성에 대한 요소분해 결과도 볼 수 있다. 
model.plot(forecast)

 

# plot the model forecast chart with component charts in trend and seasonality
model.plot_components(forecast)

 

 

 

 

 

 

 

 

반응형

댓글