Prophetで簡単に時系列予測をする


1.はじめに

最近簡単に時系列予測をするために、Prophetを使ってみた。
せっかくなので導入から動かすところまでを共有しようと思い、記事にしました。

  • 動作環境
    • OS : Windows10
    • Python : 3.8.3 // Miniconda 4.9.1
    • Visual Studio Community : 2019

2.Prophetって何?

Prophetはfacebook社がOSS(MITライセンス)として公開している時系列の予測パッケージ。
細かい理論に関してはここで触れないが、一般化加法モデルを用いて予測が行われている。

公式ページ
github

3.検証用に仮想環境を作成、仮想環境に切り替え

#prophet_envという仮想環境をpython3.7系で作成(3.8系だとfbprophet 0.6に非対応)
conda create -n prophet_env python=3.7

#base環境から作成したprophet_env仮想環境に切り替える
conda activate prophet_env

4.導入~動作確認

まずは、Visual Stuido Communityをインストールしておく。
※C++ Compilerが必要になる
Visual Studio Code のサイト

その上で以下ライブラリを導入する

#ProphetはPyStanに依存している為に導入
conda install plotly -y

#fbprophetを導入(2020/11/1時点のバージョンは0.7.1だったがエラーが出たので0.6)
conda install -c conda-forge fbprophet==0.6

#環境がminicondaなので・・(numpyやpandasは↑でたまたま一緒に導入されたので個別には入れなかった)
conda install matplotlib

下記コマンドでエラーが出なければ導入成功

from fbprophet import Prophet

5.実際に使ってみる

今回はサンプルデータセットとしてシンプルな「AirPassengers」というデータセットを使用する
Monthカラムに時系列部分、Passengersカラムに飛行機乗客数の推移が入っている。
データセットのリンク

Month #Passengers
1949/1/1 112
1949/2/1 118
1949/3/1 132

5-1:ファイル読み込みまで

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from fbprophet import Prophet

#AirPassengersのcsvを読み取る
df = pd.read_csv('AirPassengers.csv')

5-2:Prophetを学習

#Prophetではカラム名をdsとyに変更する必要があるので変更する
df.columns = ['ds', 'y']

#今回はProphetにデータフレーム後ろから10番目までを学習(fit)させる
m = Prophet()
m.fit(df[:-10])

5-3:Prophetで予測

'''
periods=10:10マス分予測させる
freq='M':単位は「Month」
 →つまり10か月分予測させるという意味
'''
future = m.make_future_dataframe(periods=10, freq='M')

forecast = m.predict(future)

#forecastの結果を図示する
fig = m.plot(forecast)

↓のように表示されるはず。
※黒い点は学習データ

6.最後に

どうだっただろうか?
プログラム自体は簡単に動作するので、むしろ導入のほうが手こずるかもしれない。
バージョンが違ったりするとどこかでエラーになるかもしれないし、実際私も最初はそこで躓いた。
(PyStan、libpython等はfbprophet==0.6で一緒に導入されたので最終的には個別では導入しなかった)
お手軽なのでぜひ試してみてほしい。