#Prophetとは
- Facebookが開発したオープンソースの時系列解析パッケージ
- PythonとRのいずれでも利用可能
- 「トレンド」「季節効果」「イベント」の3つで時系列を解析
#開発環境
- CentOS 7.2
- Jupyter 4.3.0
- Python 3.6.3 :: Anaconda, Inc.
#ライブラリをインストールしよう
まずはライブラリをインストールします。
scopyやpandasといった他のライブラリについては、Anacondaインストール時に入っているので省略します。
pip install pystan
pip install fbprophet
#データを読み込もう
今回は定番のデータセットを用意せず、総務省が公開している総人口数を1921~2015年分を用意して、csv形式に整形して今後の人口変動を予測してみました。
dateparse = lambda dates: pd.datetime.strptime(dates, '%Y-%m')
df=pd.read_csv("total_population.csv",names=("ds","y"),date_parser=dateparse)
df.tail()
#モデルを構築してプロットしよう
csvファイルが読み込めたことが上記で確認できました。
それでは、ここからが本題。モデルを用意して、用意したデータに合うようフィットさせます。ここで、1年に1個のデータでありデータ数も少ないことから季節効果は考慮しないようFalseにしました。
from fbprophet import Prophet
m = Prophet(yearly_seasonality=False)
m.fit(df)
では2015年1月から200ヶ月先の人口変動を予測したいと思います。
まずは日付だけの空のデータを用意します。
future = m.make_future_dataframe(periods=200,freq='m')
future.tail()
2031年8月末までの予測になりますね。
では、データの予測を行いたいと思います。
forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()
空の部分に予測データが入ってきました。
それでは、このデータをプロットしてみましょう。
m.plot(forecast)
今後の人口は微増のようですね。
ただ先に進めば$y_{lower}$のように減少傾向につながることが見られます。他の説明変数も関わってきそうなので、VARなどの多変量時系列解析で評価する必要がありそうです。
今回はここまで。