間歇需要の予測

予測をするときに,累積量をとってからProphetなどを使うと,不思議とよくなることを経験的に分かっていたが,理論を付加するべきだと気づいた.

予測には色々な手法があるが,Prohetは一般化加法モデルをもとに,実用的な条件を付加しているので使える.

ただし,間歇需要に代表されるように,予測すべき需要量が離散値だと,Prophetで仮定としている誤差が正規という条件を満たすのが難しいので,予測が当たらない.Poisson需要を仮定したベイズモデルを自分で作ってMCMCを適用すれば良いかもしれないが,自作するのは面倒だ.

需要量の累積値をとれば,傾向変動で予測した後の誤差は正規になることが多いので,それを使うのがアイディアだ.

例としてgithubのアクセス数を考える.vega_datasetsにデータがある.Google Colabだともとから入っている.モジュールをインポートする.

import pandas as pd
from fbprophet import Prophet
from vega_datasets import data
import plotly.express as px
import fbprophet.plot as fp
import plotly.io as pio
pio.renderers.default = "colab"

データを読み込む.

github = data.github()

ばらつきがひどいので,通常はlogをとるか,Yao-Johnson変換をするがいまいちだ.よって累積をとってからProphet用にrenameして,予測する.

github["cumsum"] = github["count"].cumsum()
github.rename(inplace=True,columns={"time":"ds","cumsum":"y"})

model = Prophet().fit(github)
future = model.make_future_dataframe(periods=200, freq='H')
forecast = model.predict(future)
model.plot(forecast);

驚くほど当たる.誤差も正規分布になる.

画像1

上の例題を含むProphetで予測をする例題と練習問題を作成しました.githubに置いておきます.

https://github.com/mickeykubo/analytics_book/blob/master/forecast1_0.ipynb

この記事が気に入ったらサポートをしてみませんか?