Facebookが公開している時系列解析用のライブラリProphetの公式ドキュメントを翻訳していきます。
目次
1.Prophet公式ドキュメント翻訳(概要&特徴編)
2.Prophet公式ドキュメント翻訳(インストール編)
3.Prophet公式ドキュメント翻訳(クイックスタート編)
4.Prophet公式ドキュメント翻訳(飽和状態の予測編)
5.Prophet公式ドキュメント翻訳(トレンドの変化点編)
6.Prophet公式ドキュメント翻訳(周期性・イベント効果・説明変数の追加編)
7.Prophet公式ドキュメント翻訳(増加し続ける周期性編)
8.Prophet公式ドキュメント翻訳(誤差の間隔編)
9.Prophet公式ドキュメント翻訳(外れ値編)
10.Prophet公式ドキュメント翻訳(1日単位ではないデータ編)
11.Prophet公式ドキュメント翻訳(モデルの診断編)
12.Prophet公式ドキュメント翻訳(ヘルプ編)
2018/10/25公開。原文リンクは以下。
・Prophet概要&特徴:https://facebook.github.io/prophet/
・公式ドキュメント:https://facebook.github.io/prophet/docs/quick_start.html
#増加し続ける周期性
デフォルト設定では、Prophetは複数の周期性のみをフィッティングします。それは予測を得るために周期性の効果がトレンドに追加されていることを意味します。以下にある飛行機の乗客数についての時系列データは、複数の周期性を追加していく方法ではうまくいかない例です。
# R
df <- read.csv('../examples/example_air_passengers.csv')
m <- prophet(df)
future <- make_future_dataframe(m, 50, freq = 'm')
forecast <- predict(m, future)
plot(m, forecast)
# Python
df = pd.read_csv('../examples/example_air_passengers.csv')
m = Prophet()
m.fit(df)
future = m.make_future_dataframe(50, freq='MS')
forecast = m.predict(future)
fig = m.plot(forecast)
この時系列データは非常に明確な周期性があります。しかし、時系列データの始めの方は予測した周期性の値が実測値より大きく、時系列データの終わりの方では予測値が小さいという問題があります。この時系列データには、Prophetが推測したような、連続的に周期性を追加するという方法は適応できません。むしろ、このデータは周期的に値が上昇しているといえます。これが増加し続ける周期性です。
Prophetはseasonality_mode='multiplicative'
という引数を用いることで、増加し続ける周期性をモデリングすることができます。
# R
m <- prophet(df, seasonality.mode = 'multiplicative')
forecast <- predict(m, future)
plot(m, forecast)
# Python
m = Prophet(seasonality_mode='multiplicative')
m.fit(df)
forecast = m.predict(future)
fig = m.plot(forecast)
この周期性についての詳細について、周期性をパーセント表示したトレンドをプロットすることで表示します。
# R
prophet_plot_components(m, forecast)
# Python
fig = m.plot_components(forecast)
seasonality_mode='multiplicative'
という引数を用いて増加し続ける周期性をモデリングするやり方でイベント効果をモデリングすることができます。デフォルト設定では、seasonality_mode
という引数を指定することで、どんな追加の周期性や追加の説明変数についても使うことができます。しかし、mode='additive'
やmode='multiplicative'
といった形で引数を指定することで、追加するものが周期性なのか、説明変数なのか明確化することができます。
たとえば、以下のコードでは周期性をmode = 'multiplicative'
に指定しています。ですが、そこには四半期ごとの周期性と説明変数を追加しています。
# R
m <- prophet(seasonality.mode = 'multiplicative')
m <- add_seasonality(m, 'quarterly', period = 91.25, fourier.order = 8, mode = 'additive')
m <- add_regressor(m, 'regressor', mode = 'additive')
# Python
m = Prophet(seasonality_mode='multiplicative')
m.add_seasonality('quarterly', period=91.25, fourier_order=8, mode='additive')
m.add_regressor('regressor', mode='additive')
このモデルの予測結果をプロットすることで、モデルに周期性を加えた結果と、増加し続ける周期性をモデルに加えた結果をそれぞれ別々にみることができます。