■ [Ai] Prophet Tutorial #2 - Saturating Forecasts
오늘은 Prophet의 두 번째 튜토리얼은 진행해보겠습니다.
오늘의 주제는 Saturating Forecasts 입니다.
https://facebook.github.io/prophet/docs/saturating_forecasts.html
● Saturating Forecasts
Prophet의 Logistic growth를 사용하여 트렌드를 예측을 할 때, 그 예측치의
최대 상한값과 하한값을 제어하고자 할 때 사용합니다.
Prophet은 Linear한 모델을 사용하기 때문에 이를 제어하지 않는다면 해당 카테고리의
최대 사이즈를 넘을 수 있기 때문입니다.
전체 시장 크기, 전체 인구 수 등 이미 정해진 최대치를 넘어설 수는 없겠죠.
예를 들어 최대치가 10인 어떠한 카테고리를 미래에 20이 된다고 예측한다면 잘못된
예측입니다. 마찬가지로 인구 수를 예측할 때 -값을 예측한다면 잘못이겠죠?
● Forecasting Growth
먼저 상한값을 제한하는 방법입니다.
데이터를 읽고 cap이라는 컬럼을 선언해줍니다. 이 cap이 상한 값을 설정해줍니다.
저한테 어떤 시계열 데이터가 있을까? 라고 생각을 해보았는데요.
지난번 저의 블로그 방문자 수 예측 프로그램에 예시로 적용해보겠습니다.
위의 결과에서 cap을 300으로 설정하여 값이 어떻게 보여지는지 한번 보겠습니다.
코드는 매우 간단합니다. 기존 코드에 아래 2줄의 코드만 추가하면 됩니다.
진한색 코드가 추가된 코드입니다.
df = pd.read_csv("./tubee.csv") df['cap']=300 m = Prophet(growth='logistic') m.fit(dif) future=m.make_future_dataframe(periods=30) future['cap']=300 |
나머지 코드는 이전 포스팅의 내용과 동일합니다.
결과는 다음과 같습니다. y=300에 상한선이 생겼습니다.
아마 이 이상의 값은 예측이 안될 것입니다.
● Saturating Minimum
이번에는 하한값을 제어하는 방법입니다.
여기서는 floor라는 컬럼을 선언해줍니다.
cap이 상한값이라면 floor은 하한값이라고 생각하시면 됩니다.
floor를 50으로 선언해보고 결과 값을 보겠습니다.
코드는 cap과 마찬가지로 2줄만 추가되면 됩니다.
df = pd.read_csv("./tubee.csv") df['cap']=300 df['floor']=50 m = Prophet(growth='logistic') m.fit(dif) future=m.make_future_dataframe(periods=30) future['cap']=300 future['floor']=50 |
결과는 아래와 같습니다.
상한선과 하한선이 생겼네요
그리고 가장 중요한 점은 실제 6월 예측치에서 50이하의 값이 사라졌습니다.
모두 50이상의 값으로 조정이되어 예측이 되었네요.
실제 하한선을 정해두면 어느정도 도움이 될 것 같습니다.
위 모델의 경우 최소 0으로는 선언해두는 것이 안전하긴 할 것 같습니다.
logistic growth의 경우에 유용할 것 같은 cap과 floor에 대해 정리해보았습니다.
간단한 선언 하나로 예측값이 변화하는 것이 신기하네요.
제 모델에 맞게끔 정하려면 여러 실험을 해보고 시도를 해봐야 할 것 같습니다.
우선은 cap=500 / floor=0 으로 정하겠습니다.
위 값으로 지난번 모델과 비교하여 정확도가 얼마나 올랐나 보겠습니다.
Date | 실제 | 예측_old | 정확도_old | 예측_new | 정확도_new |
2018-06-01 | 138 | 106.92 | 78% | 120.41 | 87% |
2018-06-02 | 91 | 71.83 | 79% | 85.81 | 94% |
2018-06-03 | 89 | 79.18 | 89% | 93.66 | 95% |
2018-06-04 | 239 | 96.25 | 41% | 111.46 | 47% |
2018-06-05 | 165 | 90.53 | 55% | 106.25 | 64% |
2018-06-06 | 128 | 101.84 | 80% | 118.06 | 92% |
2018-06-07 | 188 | 86.60 | 46% | 103.31 | 55% |
2018-06-08 | 173 | 80.90 | 47% | 98.31 | 57% |
2018-06-09 | 114 | 46.92 | 42% | 64.81 | 57% |
평균 정확도는 약 72%정도 입니다. 놀랍게도 지난번에 비해 10% 상승했습니다.
간단한 피쳐 하나로 이렇게나 높아지는게 신기합니다.
단순 우연인지는 좀 더 Prophet 튜토리얼을 진행하면서 지켜보기로 하겠습니다.
결론적으로는 이번 포스팅에서 좀 더 정확하게 변한 것 같습니다.
그렇기 때문에 다음 포스팅 또한 매우 기대가 됩니다.
그럼 이번 포스팅을 마치겠습니다. 감사합니다.
'AI > Prophet' 카테고리의 다른 글
[Prophet] Prophet Tutorial #5 - Multiplicative Seasonality (0) | 2018.06.30 |
---|---|
[Prophet] Prophet Tutorial #4 - Holiday Effects (444) | 2018.06.22 |
[Prophet] Prophet Tutorial #3 - Trend ChangePoints (0) | 2018.06.17 |
[Prophet] Prophet Tutorial #1 - Installation & Quick Start (2) | 2018.06.10 |
[Prophet] Facebook의 Prophet Tool (0) | 2018.06.09 |