Prophetを使って時系列予測をしてみる

時系列予測が必要になってきたので、まずは基礎から試してみる。

Prophetの使い方メモを参考にした。感謝。

予測手順

Google Colabでやった。まずはインストール&インポート。

!pip install fbprophet

import pandas as pd
from fbprophet import Prophet
from fbprophet import plot
from fbprophet.diagnostics import cross_validation, performance_metrics

例示されていた、あるアメフト選手のWikipediaアクセス数を読み込む。dsが日付で、yが予測値。prophetは2列あれば予測が可能。

中身は2007年12月10日から2016年1月20日までのデータが入っている。

df = pd.read_csv('http://logopt.com/data/peyton_manning.csv')
df

-------------------

	ds	y
0	2007-12-10	9.590761
1	2007-12-11	8.519590
2	2007-12-12	8.183677
3	2007-12-13	8.072467
4	2007-12-14	7.893572
...	...	...
2900	2016-01-16	7.817223
2901	2016-01-17	9.273878
2902	2016-01-18	10.333775
2903	2016-01-19	9.125871
2904	2016-01-20	8.891374
2905 rows × 2 columns

インスタンスを作成して、 fitする。

m = Prophet() # インスタンスの作成
m.fit(df)

からの予測。列数の多いDFが返ってくる。

future = m.make_future_dataframe(periods=365) # 予測用のDFを365日単位で作成
forecast = m.predict(future) # 予測
forecast.head(3)

---------------------------

ds	trend	yhat_lower	yhat_upper	trend_lower	trend_upper	additive_terms	additive_terms_lower	additive_terms_upper	weekly	weekly_lower	weekly_upper	yearly	yearly_lower	yearly_upper	multiplicative_terms	multiplicative_terms_lower	multiplicative_terms_upper	yhat
0	2007-12-10	8.040603	8.199655	9.485692	8.040603	8.040603	0.803055	0.803055	0.803055	0.352293	0.352293	0.352293	0.450762	0.450762	0.450762	0.0	0.0	0.0	8.843657
1	2007-12-11	8.039061	7.967984	9.253545	8.039061	8.039061	0.553139	0.553139	0.553139	0.119645	0.119645	0.119645	0.433495	0.433495	0.433495	0.0	0.0	0.0	8.592200
2	2007-12-12	8.037518	7.784938	8.988550	8.037518	8.037518	0.350502	0.350502	0.350502	-0.066660	-0.066660	-0.066660	0.417162	0.417162	0.417162	0.0	0.0	0.0	8.388020

公式のチュートリアルに従って、列を絞る。yhatが予測値となる。

forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()

--------------------

	ds	yhat	yhat_lower	yhat_upper
3265	2017-01-15	8.200924	7.516356	8.930180
3266	2017-01-16	8.525932	7.754122	9.260552
3267	2017-01-17	8.313330	7.602456	9.031121
3268	2017-01-18	8.145923	7.443560	8.888622
3269	2017-01-19	8.157831	7.418938	8.870197

plotlyで視覚化する。黒点が実際の値、青い帯が予測値の範囲になる。

plot.plot_plotly(m, forecast)

外れ値らしいものや、大きくズレている期間もあるが概ねいい感じに収まっている。

予測の分解

予測した値を分解して表示することもできる。予測値は以下の要素の組み合わせで計算されている。

デフォルトでの出力内容は、トレンド、季節性(年)、季節性(週)で、ホリデーシーズンなどの自ら追加した要素にも分解することが可能。

plot.plot_components_plotly(m, forecast)

トレンドは2012年をピークに下降気味。予測もおおむね下がる傾向を示している。いずれの季節性にも特徴があるようだが、アメフトドメインがないのでよく分からない。

ひとまずチュートリアルはここまで。特に特微量の指定などなく、そこそこの予測値を得られて便利。オプションなどの使い方も紐解いていく。

このサイトの主
投稿を作成しました 98

関連投稿

検索語を上に入力し、 Enter キーを押して検索します。キャンセルするには ESC を押してください。

トップに戻る