AI/Prophet

[Prophet] Prophet Tutorial #3 - Trend ChangePoints

zamezzz 2018. 6. 17. 17:45

 [Ai] Prophet Tutorial #3 - Trend ChangePoints


오늘은 Prophet 튜토리얼 세 번째 포스팅입니다.


오늘의 주제는 Trend Changepoints 입니다.

https://facebook.github.io/prophet/docs/trend_changepoints.html



 Trend ChangePoints


앞서 Prophet으로 예측한 결과의 그래프를 보면 그 트렌드가 변경하는 지점이 있었습니다


Prophet은 기본적으로 이러한 트렌드가 변경하는 지점을 자동으로 감지하여 트렌드를 


예측한다고 합니다. 하지만 이를 사용자가 직접 세밀하게 제어할 수 있는데요.


이러한 Trend ChangePoints에 대해서 알아보고 이를 어떻게 제어할 수 있는지 


튜토리얼을 진행하며 살펴보겠습니다.



 #1. Automatic changepoint detection in Prophet


첫 번째는 Prophet이 자동으로 Trend Changepoint를 찾는 모습을 보겠습니다


기본적으로 Prophet은 예측하고자 하는 시계열 데이터의 80%의 크기만큼에서 잠재적으로


ChangePoint를 지정합니다. 물론 이 크기는 변경시킬 수 있습니다.


아래 코드는 90%만큼 ChangePoint를 지정하도록 합니다.


m = Prophet(changepoint_range=0.9)


물론 50%만큼을 설정하고 싶다면 값을 0.5로 해주면 됩니다.


그리고 이 ChangePoint를 시각화 시키는 코드는 다음과 같습니다.


from fbprophet.plot import add_changepoints_to_plot

fig = m.plot(forecast)

a = add.changepoints_to_plot(fig.gca(), m, forecast)


이렇게 하여 fig를 출력해 주면 저의 코드에서는 아래와 같은 그래프가 나옵니다.



빨간 점선이 ChangePoint를 뜻하며, 빨간 실선은 Trend를 뜻합니다.



 #2. Adjusting trend flexibility


두 번째로는 이 ChangePoint의 유연성을 조정하는 방법을 확인해보겠습니다.


각 데이터의 트렌드에 따라 유연성을 조정할 수 있습니다.


너무 유연성이 심하거나 (Overfit) 유연성이 충분하지 않은 경우 (Underfit)


이를 활용할 수 있습니다. 기본적으로 이 값은 0.05가 Default값입니다.


이를 변화시키기 위해서는 아래 코드를 사용합니다.


m = Prophet(changepoint_prior_scale=0.05)


이 값을 늘린다면 더욱 트렌드가 유연해지며 Underfit 문제를 해결할 수 있습니다. 


반대로 이 값을 줄인다면 Overfit의 문제를 어느정도 해결할 수 있겠습니다.


위의 그래프를 보시면 제 데이터는 Underfit한 문제를 가지고 있습니다.


이를 위해 changepoint_prior_scale의 값을 0.5로 수정하여 조정해보겠습니다.


결과는 아래와 같습니다. 적절한 트렌드가 나타나는 것 같습니다.




 #3. Specifying the locations of the changepoints


세 번째로는 특정 point를 changepoint로 설정하는 방법입니다.


필요할 경우에 사용된다고 하지만, Prophet이 자체적으로도 잘 잡아주기는 합니다.


방법은 간단합니다.


m = Prophet(changepoints=['2018-05-01'])




Trend ChangePoints에 대한 Tutorial을 마치겠습니다.


포스팅을 마치기 전에 지난 Saturating Forecasts의 피쳐와 함께 적용한 정확도를 


비교해보겠습니다. 비교 데이터는 기존과 동일한 6월1일 ~ 6월9일 데이터입니다.


지난 Saturating Forecasts 피쳐를 적용하여 정확도는 약 72%로 상승했었습니다.


나머지 설정은 동일하며 changepoint에 대한 프로퍼티 값은 위에서와 같습니다.


Date

실제

 예측

정확도

2018-06-01

138

148.21

93%

2018-06-02

91

116.94

78%

2018-06-03

89

128.11

69%

2018-06-04

239

148.65

62%

2018-06-05

165

146.50

89%

2018-06-06

128

161.08

79%

2018-06-07

188

148.89

79%

2018-06-08

173

146.95

85%

2018-06-09

114

115.69

99%

합계

81.4%


이번 피쳐를 적용한 결과는 81.4%의 정확도입니다.


또 다시 약 10%가량 정확도가 상승했습니다. 신기하네요


ChangePoint의 유연성을 조정하여 UnderFit의 문제를 해결하였더니 더욱 높은 정확도가


되었습니다. 아직까지는 여러 피쳐들을 조합하여 사용하는 것이 의미가 있는 것 같습니다


우선은 이렇게 정하고 계속해서 tutorial을 진행하도록 하겠습니다.


그럼 포스팅을 마치겠습니다. 감사합니다

반응형