Python
Facebook
CentOS
時系列解析
Jupyter
More than 1 year has passed since last update.

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()

prophet001.png

モデルを構築してプロットしよう

 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()

prophet002.png

 2031年8月末までの予測になりますね。
 では、データの予測を行いたいと思います。

forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()

prophet003.png

 空の部分に予測データが入ってきました。
 それでは、このデータをプロットしてみましょう。

m.plot(forecast)

prophet004.png

 今後の人口は微増のようですね。
 ただ先に進めば$y_{lower}$のように減少傾向につながることが見られます。他の説明変数も関わってきそうなので、VARなどの多変量時系列解析で評価する必要がありそうです。

 今回はここまで。