Prophetを使ってこの先を占ってみた

こんにちは。
エンジニアの伊藤です。

今は新サービスの立ち上げを行っています。

何事もそうなのですが、不確実なことがあるとどうしても先行きを占ってみたくなる‥
それが人間の心理というものではないでしょうか。
(コードを書くことによる安心感がそれに勝るのかもしれません)

そんな中、今年の2月にFacebookの方が時系列解析のライブラリをRとPythonでリリースしていたので、今回はそれを活用して、この先の見通しを行ってみたいと思います。

その名も Prophetです。

ソースのGithubのリンクは こちら

Prophetとは、直訳すると預言者という意味となり、まさにこの先を占うにはうってつけのライブラリの名称ですね。

普段の私であればR言語でサポートされているパッケージを使うのですが、AIファーストという大号令も出たことなので、Pythonのライブラリで今回はその予言のほどを試してみたいと思います。
 

事前準備

事前に準備が必要なライブラリは下記の通りです。

  • fbprophet
  • (pystan)
  • pandas
  • numpy
  • matplotlib

これらのパッケージをpipでインストールしましょう。
すでにパッケージをお持ちの方も最新バージョンにアップデートしておく方がよいでしょう。

pystanはfbprophetのMAP推定時に利用されています。
fbprophetをインストールすると依存ライブラリとしてpystanも勝手にインストールされるため()としています。
 

Pythonコード

ライブラリの準備も整ったところで、実際にPythonのコードを書いていきましょう。

コンソールでPythonコードを書いていくのも良いですが、現代ではJupyter Notebookという非常に優れた環境があるので、こちらで進めていくことを推奨します。

$ jupyter notebook
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
% matplotlib inline

まずは必要なライブラリをimportします。

jupyter notebookのようなインタープリター型の応答を求める場合は% matplotlib inlineというようなおまじないを1文介す必要があります。
このおまじないを行わないときちんと描画処理がなされません。

また、実際の処理コード上では出現しませんが、pystanも必要です。これはprophetのMAP推定を行う際にデフォルトでstanに搭載されているL-BFGSという最適化手法を実行するため、必須のライブラリとなります。ただし、前述の通り依存ライブラリなので、改めて意識する必要はありません。

この先の占う元データには我々サービスの利用者数の推移をDBから抽出しましょう。
いわゆるDAUの推移と呼ばれるものです。このファイルをdau.csvと名付けます。

それでは、まずこのCSVを読み込みましょう。

df2 = pd.read_csv('dau.csv')
--- prophetを呼び出してモデルに当てはめます
from fbprophet import Prophet
model = Prophet()
model.fit(df2) 

これで、読み込んだCSVデータに対してモデルの学習を済ませました。

次は予測モデルの作成です。
予測には3年分のデータを作りましょう。

future_df2 = model.make_future_dataframe(365*3)
print future_df2.tail()

             ds
2691 2020-05-20
2692 2020-05-21
2693 2020-05-22
2694 2020-05-23
2695 2020-05-24

forecast_df2 = model.predict(future_df2)

このように3年分の予測フレームを作成し、予測させます。

データ自体はこれによって生成されたので、次はこの予測を描画させます。

model.plot(forecast_df2)
plt.show()

大人の事情でスケールや軸などについてはお見せできませんが、これまでの実績データから今後3年間の予測値の最尤推定値と上限値、下限値の帯域が表示されていますね。

prophetはARモデルやARIMAモデルなどの従来の時系列予測モデルに近しい形で、データさえあれば今後の予測をしてくれる素晴らしくお手軽なツールに仕上がっています。

このモデルに改良を加えたい場合は、引数においてトレンドの選択や変化点、週周期、年周期の追加、イベント効果の追加などで適宜カスタマイズが可能になります。(今回は割愛)

予測モデリング自体の精緻さを求める場合はそのような引数を駆使して精緻にモデリングするのも良いでしょう。

それ以外の実践方法として、この予測値をベンチマークとして、自分の考えた施策がいかに過去の延長線上のベンチマークをアウトパフォームできたかの試金石となるように活用することもできます。

予測は未来を当てるものではなく、その予測結果を持って自分たちがどのような施策を行っていくべきかの意思決定につなげるためのツールとして活用することがやはり一番良いのではないでしょうか。

皆様もよい予測ライフをProphetでお楽しみください。

最後に

マネーフォワードではこの予測値を軽々と超えていける施策を打ち出せるメンバーを募集しています。
ご応募お待ちしています。

【採用サイト】
マネーフォワード採用サイト
Wantedly | マネーフォワード

【プロダクト一覧】
自動家計簿・資産管理サービス『マネーフォワード』
Web
iPhone,iPad
Android

ビジネス向けクラウドサービス『MFクラウドシリーズ』
会計ソフト『MFクラウド会計』
確定申告ソフト『MFクラウド確定申告』
請求書管理ソフト『MFクラウド請求書』
給与計算ソフト『MFクラウド給与』
経費精算ソフト『MFクラウド経費』
入金消込ソフト『MFクラウド消込』
マイナンバー管理ソフト『MFクラウドマイナンバー』
資金調達サービス『MFクラウドファイナンス』

メディア
くらしの経済メディア『MONEY PLUS』

Pocket