14
15

More than 5 years have passed since last update.

Prophetを使って時系列解析してみた

Last updated at Posted at 2017-11-26

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などの多変量時系列解析で評価する必要がありそうです。

 今回はここまで。

14
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
15