楽しんで学習するITエンジニアの備忘録ブログ

~日常生活の中にも楽しみを見出したい~

【第1弾】Facebook開発の「Prophet」で時系列分析に挑戦【LSTMとSARIMAと比較して扱いやすいのか?】

時系列データ分析に挑んでいる。自分にとっては夢がある。

 

これまで、LSTMとSARIMAを利用して「時系列データ分析」のスキル向上に励んできた。しかし、LSTMやSARIMAのモデル構築を、一から自分の手で構築することになった場合には、まだまだ実力不足な点は否めない。

 

「時系列予測は学問として大きな一分野。正確かつ安定的な予測を行うために、経験と知識の両方が必要。さらに、企業の中で使いこなすにはビジネス理解が不可欠。」といった解釈もあり、正直、素人が手を出す分野ではない気がする。

「Prophet」とは――Facebook製時系列予測OSSは何が便利なのか:非統計家が高精度な時系列予測を行えるProphet(前編)(1/2 ページ) - @IT (atmarkit.co.jp)

 

しかし、最近実務でよく使われ、とにかく使いやすいとされる、Facebookが開発した時系列予測のオープンソースソフトウェア(OSS)ライブラリ「Prophetを試してみたいと思う。

 

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

■■■時系列データは、アメリカンフットボールプレイヤーのWikiアクセス数■■■

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

 

レコード数は2904行。

2007年12月10日から2016年1月20日まで。

 

       f:id:takanarukodou2:20210713172621p:plain
      図1.アメリカンフットボールプレイヤーのWikiアクセス数
 

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

■■■■■■■■■■モデル構築、推測■■■■■■■■■■■■■■■

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

  

from fbprophet import Prophet
model = Prophet()
model.fit(df)
future_df = model.make_future_dataframe(365)
forecast_df = model.predict(future_df)
 

 

物凄く短い行数で、モデル構築から推論まで実現できている点に驚きを少し感じた。

make_future_dataframe関数は、予測した期間を追加したデータフレームが得られるとのこと。え~と、まったく理解できない。そこで、形を見てみることにする。

・future_df.shape:(3270,1)

・dfは、(2905,2)

make_future_dataframe関数の引数は、365

 

このことから、3270=2905+365という数式が見えてくる。

make_future_dataframe関数を実行することで、2016年1月21日から2017年1月19日までの365日が追加されていることが理解できた。

時系列解析ライブラリProphet 公式ドキュメント翻訳3(クイックスタート編) - Qiita

 

推論結果をプロットした結果は、下記のとおりである。

散布図が実測値になっているが、当てはまりが良さそうとのこと。

ただ、濃い青線と薄い青線は何を示しているのかが分からない。

どうやら、青い線が点予測の線(yhat)で、薄い青が信頼区間(yhat_lowerとyhat_upper)のようだ。

f:id:takanarukodou2:20210716220711p:plain

                図2 推論結果

 

■■■■■■■■■■■■■■■■■■■■■■■■

■■■■■■■■■■次回■■■■■■■■■■■

■■■■■■■■■■■■■■■■■■■■■■■■

 

モデル構築時のパラメータを指定した場合にどうなるかを見てみたい。

model = Prophet(daily_seasonality=False,
                weekly_seasonality=False,
                yearly_seasonality=True,
                holidays=event_df)