NeuralProphet 0.2 : ノートブック : 変化するトレンドへの適合 / トレンドの調整 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/25/2021 (Beta 0.2.7)
* 本ページは、NeuralProphet の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- テレワーク & オンライン授業を支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
- ウェビナー運用には弊社製品「ClassCat® Webinar」を利用しています。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション |
E-Mail:sales-info@classcat.com ; WebSite: https://www.classcat.com/ ; Facebook |
NeuralProphet 0.2 : ノートブック : 変化するトレンドに適合させる
変化するトレンドにどのように適合させるかを示すための例として Peyton Manning の Wikipedia ページのログ daily ページビューの時系列を使用します。
最初に、データをロードします :
if 'google.colab' in str(get_ipython()):
!pip install git+https://github.com/ourownstory/neural_prophet.git # may take a while
#!pip install neuralprophet # much faster, but may not have the latest upgrades/bugfixes
data_location = "https://raw.githubusercontent.com/ourownstory/neural_prophet/master/"
else:
data_location = "../"
import pandas as pd
from neuralprophet import NeuralProphet
df = pd.read_csv(data_location + "example_data/wp_log_peyton_manning.csv")
df.head(3)
今はどのようなカスタマイズもなく初期モデルを適合させることができます。
データ頻度を daily に指定します。モデルは後で未来を予測するときにこれを記憶します。
m = NeuralProphet()
metrics = m.fit(df, freq="D")
metrics.head(3)
返されるメトリック・データフレームは各訓練エポックのための記録されたメトリックを含みます。
次に、その上で予測するためのデータフレームを作成します。ここでは、未来へ 1 年間を予測することを望みそして履歴全体を含めることを望むことを指定します。
future = m.make_future_dataframe(df, periods=365, n_historic_predictions=len(df))
future.tail(3)
Note: 未来に拡張された期間の ‘y’ と ‘y_scaled’ は与えられません、それらの真の値を知らないからです。
forecast = m.predict(future)
print(list(forecast.columns))
['ds', 'y', 'yhat1', 'residual1', 'trend', 'season_yearly', 'season_weekly']
返された予測データフレームは元の日付スタンプ 、’y’ 値、予測された ‘yhat’ 値、残差と総ての個々のモデル・コンポーネントを含みます。
# plots the model predictions
fig1 = m.plot(forecast)
# plots the individual forecast components for the given time period.
# fig = m.plot_components(forecast, residuals=True)
# visualizes the model parameters.
fig2 = m.plot_parameters()
NeuralProphet 0.2 : ノートブック : トレンドの調整
デフォルト値はこの例ではかなり上手く機能します。けれども、5 変更点のデフォルトはトレンドの実際の変化がポイント間の領域にたまたま収まる場合には十分ではないかもしれません。
トレンドの柔軟性の増加
過剰適合の危険性において、変化点の数を増やし、トレンドにより柔軟性を与えることでこれに対処できます。
変化点の数を 30 に増やす場合何が起きるか試しましょう。更に、最後の 10 % (デフォルトは 20 %) だけを除外するために (その上で) トレンド変化点を適合させるデータの範囲を増やすことができます。
m = NeuralProphet(
n_changepoints=30,
changepoints_range=0.90,
)
metrics = m.fit(df, freq="D")
future = m.make_future_dataframe(df, n_historic_predictions=len(df))
forecast = m.predict(future)
fig1 = m.plot(forecast)
fig2 = m.plot_parameters()
トレンドレートの変化を見ると、トレンドが短期的な変動に過剰適合していることが明白になります。
自動トレンドポイント選択
正則化を追加することで、最も関連性のある変化点の自動選択を実現できて、ゼロに近い他のポイントのレート変化を引き出すことができます。
m = NeuralProphet(
n_changepoints=30,
trend_reg=1.00,
changepoints_range=0.90,
)
metrics = m.fit(df, freq="D")
future = m.make_future_dataframe(df, n_historic_predictions=len(df))
forecast = m.predict(future)
fig1 = m.plot(forecast)
fig2 = m.plot_parameters()
今は、モデルは幾つかの関連するトレンド変化点だけを選択して、残りをゼロに近づけます。
手動トレンド変化点
トレンド変化点を手動で指定することもできます。
Note: 変化点は常に最初に追加されます。それを無視することができます。
m = NeuralProphet(
changepoints=['2012-01-01', '2014-01-01'],
)
metrics = m.fit(df, freq="D")
future = m.make_future_dataframe(df, n_historic_predictions=len(df))
forecast = m.predict(future)
fig1 = m.plot(forecast)
fig2 = m.plot_parameters()
トレンドの柔軟性を微調整する
非ゼロ・レート変化を持つポイントを多かれ少なかれ得るために正則化の強さを調整できます。
Note : 高すぎる正則化強度については、モデルの適合プロセスが不安定になります。
m = NeuralProphet(
n_changepoints=30,
trend_reg=3.00,
changepoints_range=0.90,
)
metrics = m.fit(df, freq="D")
future = m.make_future_dataframe(df, n_historic_predictions=len(df))
forecast = m.predict(future)
fig1 = m.plot(forecast)
fig2 = m.plot_parameters()
以上