ホーム » 「NeuralProphet 0.2」タグがついた投稿
タグアーカイブ: NeuralProphet 0.2
NeuralProphet 0.2 : ノートブック : 変化するトレンドへの適合 / トレンドの調整
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()
以上
NeuralProphet 0.2 : ノートブック : Sub-daily データ
NeuralProphet 0.2 : ノートブック : Sub-daily データ (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/24/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 : ノートブック : Sub-daily データ
NeuralProphet は ds カラムでタイムスタンプを持つデータフレームを渡すことにより sub-daily 観測を持つ時系列のための予測を行なうことができます。タイムスタンプの形式は YYYY-MM-DD HH:MM:SS であるべきです – ここ のサンプル csv を参照してください。sub-daily データが使用されるとき、daily 季節性は自動的に適合しています。
ここでは NeuralProphet を 5 分解像度のデータに適合させます (Yosemite の毎日の気温)。
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, set_log_level
# set_log_level("ERROR")
df = pd.read_csv(data_location + "example_data/yosemite_temps.csv")
今は次の 7 日間を予測することを試みます。5 分データ解像度は 60/5*24=288 の daily 値を持つことを意味します。従って、先の 7*288 期間を予測することを望みます。
幾つかの常識を使用して、以下を設定します :
- 最初に、weekly 季節性を無効にします、自然は人間の週のカレンダーに従いません。
- 2 番目に、変化点を無効にします、データセットは 2 ヶ月のデータだけを含むからです。
m = NeuralProphet(
n_changepoints=0,
weekly_seasonality=False,
)
metrics = m.fit(df, freq='5min')
future = m.make_future_dataframe(df, periods=7*288, n_historic_predictions=len(df))
forecast = m.predict(future)
fig = m.plot(forecast)
# fig_comp = m.plot_components(forecast)
fig_param = m.plot_parameters()
The daily seasonality seems to make sense, when we account for the time being recorded in GMT, while Yosemite local time is GMT-8.
トレンドと季節性を改良する
288 の記録された daily 値を持つので、過剰適合の危険性なしに、daily_seasonality の柔軟性を増やすことができます。
更に、天気で典型的であるように、データがトレンドで明瞭に変化を示していますので、変化点を無効にするという決定を再検討することを望むかもしれません。以下の変更を行ないます :
- 短期的な予測を行なっていますので、changepoints_range を増やします。
- トレンドの突然の変化に適合することを可能にするため n_changepoints を増やします。
- 過剰適合を回避するために trend_reg を設定することにより、トレンド変化点を注意深く正則化します。
m = NeuralProphet(
changepoints_range=0.95,
n_changepoints=50,
trend_reg=1.5,
weekly_seasonality=False,
daily_seasonality=10,
)
metrics = m.fit(df, freq='5min')
future = m.make_future_dataframe(df, periods=60//5*24*7, n_historic_predictions=len(df))
forecast = m.predict(future)
fig = m.plot(forecast)
# fig_comp = m.plot_components(forecast)
fig_param = m.plot_parameters()
以上
NeuralProphet 0.2 : ノートブック : スパースな自己回帰
NeuralProphet 0.2 : ノートブック : スパースな自己回帰 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/23/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 : ノートブック : スパースな自己回帰
ここでは NeuralProphet を 5 分解像度のデータに適合させます (Yosemite の毎日の気温)。これはスパース性にフォーカスした、example ノートブック autoregression_yosemite_temps の続きです。
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, set_log_level
set_log_level("ERROR")
df = pd.read_csv(data_location + "example_data/yosemite_temps.csv")
# df.head(3)
AR 係数をスパース化する
NeuralProphet の自己回帰コンポーネントは AR-Net として定義されます (論文, github)。そして、AR 係数にスパース性を誘導したいのであれば ar_sparsity をより小さい数値に設定できます。
けれども、複数のコンポーネントと正則化でモデルを適合させるのは困難である可能性があり、訓練ハイパーパラメータを手動制御する必要があるかもしれません。
スパース性を 50% に設定することで開始します。
m = NeuralProphet(
n_lags=6*12,
n_forecasts=3*12,
changepoints_range=0.95,
n_changepoints=30,
weekly_seasonality=False,
# batch_size=64,
# epochs=100,
# learning_rate=0.1,
ar_sparsity=0.5,
)
metrics = m.fit(df, freq='5min') # validate_each_epoch=True, plot_live_loss=True
fig_param = m.plot_parameters()
m = m.highlight_nth_step_ahead_of_each_forecast(1)
fig_param = m.plot_parameters()
m = m.highlight_nth_step_ahead_of_each_forecast(36)
fig_param = m.plot_parameters()
非ゼロ AR-係数を更に削減する
ar_sparsity を低く設定することで、非ゼロ重みの数を更に削減できます。ここではそれを 10 % に設定します :
m = NeuralProphet(
n_lags=6*12,
n_forecasts=3*12,
changepoints_range=0.95,
n_changepoints=30,
weekly_seasonality=False,
# batch_size=64,
# epochs=100,
# learning_rate=0.1,
ar_sparsity=0.1,
)
metrics = m.fit(df, freq='5min')
fig_param = m.plot_parameters()
m = m.highlight_nth_step_ahead_of_each_forecast(1)
fig_param = m.plot_parameters()
m = m.highlight_nth_step_ahead_of_each_forecast(36)
fig_param = m.plot_parameters()
極端なスパース性
より低く ar_sparsity を設定すれば、より少ない非ゼロ重みがモデルにより適合されます。ここではそれを 1 % に設定します、これは単一の非ゼロのラグに繋がるはずです。
Note : 極端な値は訓練の不安定性に繋がる可能性があります。
m = NeuralProphet(
n_lags=6*12,
n_forecasts=3*12,
changepoints_range=0.95,
n_changepoints=30,
weekly_seasonality=False,
# batch_size=64,
# epochs=100,
# learning_rate=0.1,
ar_sparsity=0.01,
)
metrics = m.fit(df, freq='5min')
fig_param = m.plot_parameters()
m = m.highlight_nth_step_ahead_of_each_forecast(1)
fig_param = m.plot_parameters()
m = m.highlight_nth_step_ahead_of_each_forecast(36)
fig_param = m.plot_parameters()
以上
NeuralProphet 0.2 : ノートブック : 乗法的季節性
NeuralProphet 0.2 : ノートブック : 乗法的季節性 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/22/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 : ノートブック : 乗法的季節性
デフォルトでは NeuralProphet は加法的季節性に適合します、これは予測を得るために季節効果がトレンドに追加されることを意味します。航空旅客数のこの時系列は加法的季節性が機能しない場合の例です :
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, set_log_level
# set_log_level("ERROR")
m = NeuralProphet()
df = pd.read_csv(data_location + "example_data/air_passengers.csv")
metrics = m.fit(df, freq="MS")
future = m.make_future_dataframe(df, periods=50, n_historic_predictions=len(df))
forecast = m.predict(future)
fig = m.plot(forecast)
# fig_param = m.plot_parameters()
この時系列は明瞭な yearly サイクルを持ちますが、予測 の季節性は時系列の開始時には大きすぎて終了時には小さぎます。この時系列では、季節性は NeuralProphet により想定された定数値の加法的因子ではなく、それはトレンドとともに成長します。これは乗法的季節性です。
NeuralProphet は入力引数で seasonality_mode=”multiplicative” を設定することにより乗法的季節性をモデル化できます :
m = NeuralProphet(seasonality_mode="multiplicative")
metrics = m.fit(df, freq="MS")
future = m.make_future_dataframe(df, periods=50, n_historic_predictions=len(df))
forecast = m.predict(future)
fig = m.plot(forecast)
# fig_param = m.plot_parameters()
コンポーネント図は今は季節性をトレンドのパーセントで示します :
fig_param = m.plot_components(forecast)
季節性は月の最初に発生するデータ上でのみ適合していることに注意してください。そのため、月の間の季節性のプロット値はランダム値を取るかもしれません。
Settingseasonality_mode=”multiplicative” は、add_seasonality で追加されたカスタム季節性を含め、総ての季節性を乗法的にモデル化します。
以上
NeuralProphet 0.2 : ノートブック : 休日と特殊イベントのモデリング
NeuralProphet 0.2 : ノートブック : 休日と特殊イベントのモデリング (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/22/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 : ノートブック : 休日と特殊イベントのモデリング
モデル化したい休日や他の繰り返しイベントを持つ場合、それらからデータフレームを作成しなければなりません。それは 2 つのカラム (event と ds) と休日の各発生のための行を持ちます。それは過去 (履歴データが続く限り後方に) と未来 (予測が成されている限り) の両者の休日の総ての発生を含まなければなりません。それらが未来に繰り返されない場合、Prophet はそれらをモデル化してから予測に含ません。
イベントは加法的か乗法的コンポーネントのいずれかとして追加できます。
更にイベントの前後の日を含めるためにウィンドウを定義できます。
例として 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")
ここで過去のイベントと未来のイベントを含む、Peyton Manning のプレーオフ出場の総ての日付を含むデータフレームを作成します :
## user specified events
# history events
playoffs = pd.DataFrame({
'event': 'playoff',
'ds': pd.to_datetime([
'2008-01-13', '2009-01-03', '2010-01-16',
'2010-01-24', '2010-02-07', '2011-01-08',
'2013-01-12', '2014-01-12', '2014-01-19',
'2014-02-02', '2015-01-11', '2016-01-17',
'2016-01-24', '2016-02-07',
]),
})
superbowls = pd.DataFrame({
'event': 'superbowl',
'ds': pd.to_datetime([
'2010-02-07', '2012-02-05', '2014-02-02',
'2016-02-07',
]),
})
events_df = pd.concat((playoffs, superbowls))
加法的イベント
ひとたびテーブルが作成されれば、イベント効果は add_events 関数でそれらを追加することでモデルに含まれます。
デフォルトでは、イベントは加法的イベントとしてモデル化されます。ここでは、プレーオフの両者を加法的イベントとしてモデル化します。
更に loss_func を ‘MSE’ に変更します、重みに適合しているイベントが幾つかの稀な外れ値であるためです。通常はモデルを少ない外れ値で歪めることを望まないので、デフォルトの損失関数は ‘Huber’ です。
# NeuralProphet Object
m = NeuralProphet(loss_func="MSE")
# set the model to expect these events
m = m.add_events(["playoff", "superbowl"])
# create the data df with events
history_df = m.create_df_with_events(df, events_df)
# fit the model
metrics = m.fit(history_df, freq="D")
# forecast with events
future = m.make_future_dataframe(history_df, events_df, periods=30, n_historic_predictions=len(df))
forecast = m.predict(df=future)
イベント効果は予測データフレームで確認することができます :
events = forecast[(forecast['event_playoff'].abs() + forecast['event_superbowl'].abs()) > 0]
events.tail()
イベント効果はプロットにも現れます、そこではスーパーボウルのための特に大きなスパイクとともに、プレーオフ出場の前後の日々にスパイクがあることを見ます :
## plotting forecasts
fig = m.plot(forecast)
## plotting components
fig_comp = m.plot_components(forecast)
## plotting parameters
fig_param = m.plot_parameters()
イベント・ウィンドウ
引数 lower_window と upper_window を含めることもできます、これらは休日を日付前後の [lower_window, upper_window] days に拡張します。
例えば、クリスマスに加えてクリスマスイブを含めることを望む場合、lower_window=-1, upper_window=0 を含めます。感謝祭に加えてブラックフライデーを使用したい場合、lower_window=0, upper_window=1 を含めます。
m = NeuralProphet(loss_func="MSE")
# set event configs to NeuralProphet object with windows
m = m.add_events(["playoff"], upper_window=1)
m = m.add_events(["superbowl"], lower_window=-1, upper_window=1)
# create the data df with events
history_df = m.create_df_with_events(df, events_df)
# fit the model
metrics = m.fit(history_df, freq="D")
# make future dataframe with events known in future
future = m.make_future_dataframe(df=history_df, events_df=events_df, periods=365, n_historic_predictions=len(df))
forecast = m.predict(df=future)
## plotting parameters
fig = m.plot(forecast)
fig_param = m.plot_parameters()
乗法的イベント
m = NeuralProphet(loss_func="MSE")
# set event configs to NeuralProphet object with windows
m = m.add_events(["playoff"], upper_window=1)
m = m.add_events(["superbowl"], lower_window=-1, upper_window=1, mode="multiplicative")
# create the data df with events
history_df = m.create_df_with_events(df, events_df)
# fit the model
metrics = m.fit(history_df, freq="D")
# make future dataframe with events known in future
future = m.make_future_dataframe(history_df, events_df, periods=30, n_historic_predictions=len(df))
forecast = m.predict(df=future)
## plotting components
fig_comp = m.plot(forecast)
# plot parameters
fig_param = m.plot_parameters()
国固有の休日
m = NeuralProphet()
# add the country specific holidays
m = m.add_country_holidays("US")
# fit the model
metrics = m.fit(df, freq="D")
# make future dataframe with events known in future
future = m.make_future_dataframe(df=df, periods=30, n_historic_predictions=len(df))
forecast = m.predict(df=future)
## plotting components
fig = m.plot(forecast)
fig_param = m.plot_parameters()
以上
NeuralProphet 0.2 : ノートブック : PV 予測データセットの例
NeuralProphet 0.2 : ノートブック : PV 予測データセットの例 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/21/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 : ノートブック : PV 予測データセットの例
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/energy/"
else:
data_location = "../"
この最初のセクションでは、太陽放射度データ (太陽 PV 生産のプロキシーになり得ます) の 1 ステップ先の予測器を訓練します。前の 24 ステップを考慮して neuralprophet に他のパラメータを自動的に選択させて、この予測器を訓練できます。
変更できるパラメータは AR スパース性とニューラルネットワーク・アーキテクチャのためです。
訓練はデータの 80% に存在し、最後の 20% は検証のために取っておきます。
import pandas as pd
from neuralprophet import NeuralProphet, set_log_level
# set_log_level("ERROR")
files = ['SanFrancisco_PV_GHI.csv', 'SanFrancisco_Hospital.csv']
raw = pd.read_csv(data_location + files[0])
df=pd.DataFrame()
df['ds'] = pd.date_range('1/1/2015 1:00:00', freq=str(60) + 'Min',
periods=(8760))
df['y'] = raw.iloc[:,0].values
df.head(3)
m = NeuralProphet(
n_lags=24,
ar_sparsity=0.5,
#num_hidden_layers = 2,
#d_hidden=20,
)
metrics = m.fit(df, freq='H', valid_p = 0.2)
df_train, df_val = m.split_df(df, freq='H',valid_p=0.2)
m.test(df_val)
future = m.make_future_dataframe(df_val, n_historic_predictions=True)
forecast = m.predict(future)
fig = m.plot(forecast)
fig_comp = m.plot_components(forecast)
fig_param = m.plot_parameters()
fig_fit = m.highlight_nth_step_ahead_of_each_forecast(1).plot(forecast)
fig_prediction = m.plot_last_forecast(forecast, include_previous_forecasts=48)
少なくとも一つの隠れ層を持つニューラルネットワークを考える場合、ここで考慮すべきことがあります。十分に高い学習率 (多分 > 0.1) については、勾配は消失するようで AR ネット出力を 0 に強制します。
下から、予測出力が奇妙な動作を持つことがわかります。出力は正確に、トレンドを持つ weekly, daily 季節性の合計であるように見えます。ノイズも変化も全くありません。
m = NeuralProphet(
n_lags=24,
ar_sparsity=0.5,
num_hidden_layers = 2,
d_hidden=20,
learning_rate = 0.1
)
metrics = m.fit(df, freq='H', valid_p = 0.2)
future = m.make_future_dataframe(df_val, n_historic_predictions=True)
forecast = m.predict(future)
fig = m.plot(forecast)
簡単な修正は学習率を十分に低い値に設定することです。
m = NeuralProphet(
n_lags=24,
ar_sparsity=0.5,
num_hidden_layers = 2,
d_hidden=20,
learning_rate = 0.001
)
metrics = m.fit(df, freq='H', valid_p = 0.2)
future = m.make_future_dataframe(df_val, n_historic_predictions=True)
forecast = m.predict(future)
fig = m.plot(forecast)
(電気) 負荷予測の例
別の一般的なエネルギー問題で予測器を訓練することができます。この場合、建物の電気消費量を予測するために 1 ステップ先の予測器を訓練しています。PV 予測のために使用したのと同様の NeuralProphet モデルを使用します。
import pandas as pd
from neuralprophet import NeuralProphet, set_log_level
# set_log_level("ERROR")
files = ['SanFrancisco_PV_GHI.csv', 'SanFrancisco_Hospital.csv']
raw = pd.read_csv(data_location + files[1])
df=pd.DataFrame()
df['ds'] = pd.date_range('1/1/2015 1:00:00', freq=str(60) + 'Min',
periods=(8760))
df['y'] = raw.iloc[:,0].values
df.head(3)
print(raw)
print(raw)
Electricity:Facility [kW](Hourly) 0 778.007969 1 776.241750 2 779.357338 3 778.737196 4 787.835835 ... ... 8755 845.563081 8756 827.530521 8757 829.256300 8758 813.937205 8759 815.588584 [8760 rows x 1 columns]
m = NeuralProphet(
n_lags=24,
ar_sparsity=0.5,
num_hidden_layers = 2,
d_hidden=20,
learning_rate=0.001
)
metrics = m.fit(df, freq='H', valid_p = 0.2)
df_train, df_val = m.split_df(df, freq='H',valid_p=0.2)
m.test(df_val)
future = m.make_future_dataframe(df_val, n_historic_predictions=True)
forecast = m.predict(future)
fig = m.plot(forecast)
fig_comp = m.plot_components(forecast)
fig_param = m.plot_parameters()
fig_fit = m.highlight_nth_step_ahead_of_each_forecast(1).plot(forecast)
fig_prediction = m.plot_last_forecast(forecast, include_previous_forecasts=48)
以上
NeuralProphet 0.2 : ノートブック : 自己回帰
NeuralProphet 0.2 : ノートブック : 自己回帰 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/19/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 : ノートブック : 自己回帰
ここでは NeuralProphet を 5 分解像度のデータに適合させます (Yosemite の毎日の気温)。
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, set_log_level
# set_log_level("ERROR")
df = pd.read_csv(data_location + "example_data/yosemite_temps.csv")
df.head(3)
Next-step 予測
データとの最初のコンタクトに基づいて、以下を設定します :
- 最初に、weekly_seasonality を無効にします、自然は人間の週のカレンダーに従わないからです。
- 2 番目に、短期の予測を行なっていますので、n_changepoints を増やし、そして changepoints_range を増やします。
更に、明日の天気が昨日の天気と同様である可能性が高いという事実も利用できます。これは最も最近の過去の値で時系列を回帰することを意味し、自己回帰としても知られています。
n_lags を (それに渡り) 回帰させるための過去の観測値の望まれる数に設定することによりこれを実現できます。この値はまた ‘AR order’ としても知られます。
ここでは、最後の 1 時間に基づいて次の 5 分の気温を予測します :
m = NeuralProphet(
n_lags=12,
changepoints_range=0.95,
n_changepoints=30,
weekly_seasonality=False,
batch_size=64,
epochs=10,
learning_rate=1.0,
)
metrics = m.fit(df, freq='5min')
自己回帰コンポーネントを持つモデルは適合させることが困難な可能性があることに注意してください。ハイパーパラメータの自動選択は理想的な結果に繋がらないかもしれません。最善の結果のためには、(重要性の高い順に) これらを手動で変更することを考えてください。
- learning_rate
- epochs
- batch_size
自動的に設定されたハイパーパラメータ (‘INFO’ レベルログとしてプリント出力されます) は良い開始点として役立つことができます。
future = m.make_future_dataframe(df, n_historic_predictions=True)
forecast = m.predict(future)
fig = m.plot(forecast)
予測は今では非常に正確ですが、これは大きな驚きではありません、すぐ次の 5 分間を予測しているだけだからです。
モデルパラメータをプロットするとき、パネル ‘AR weight’ は 12 の最後の観測値に与えられた重みを表示します、これらは ‘AR coefficients’ として解釈できます :
# fig_comp = m.plot_components(forecast)
m = m.highlight_nth_step_ahead_of_each_forecast(1) # temporary workaround to plot actual AR weights
fig_param = m.plot_parameters()
‘AR weight’ プロットは最も最近の観測はより離れた観測に比べてかなり多くの重みが与えられることを示しています。
マルチステップ予測
複数のステップを未来へ予測するためには、(一つの) ステップを前方に予測し、予測された値をデータに追加してから関心のある範囲に到達するまで次のステップを予測することによりシングルステップ・モデルを「展開」できます。けれども、これを行なうより良い方法があります : NeuralProphet で前方にマルチステップを直接予測できます。
n_forecasts を予測したいステップの望まれる数に設定できます (「予測区間」とも呼ばれます)。NeuralProphet は総ての単一ステップで、未来への n_forecasts ステップを予測します。従って、総ての履歴ポイントで n_forecasts の重なる予測を持ちます。
予測期間 n_forecasts を増やすとき、過去の観測 n_lags の数も少なくとも同じ値にまで増やすべきです。
ここでは、最後の観測 6 時間に基づいて次の 3 時間を 5 分ステップで予測します :
m = NeuralProphet(
n_lags=6*12,
n_forecasts=3*12,
changepoints_range=0.95,
n_changepoints=30,
weekly_seasonality=False,
batch_size=64,
epochs=10,
learning_rate=1.0,
)
metrics = m.fit(df, freq='5min')
future = m.make_future_dataframe(df, n_historic_predictions=True)
forecast = m.predict(future)
fig = m.plot(forecast)
予測は時に一日のための予測を誤ってからより正確な予測に再度戻ることを見ます。データの 6 日目のその over-予測を詳しく見ましょう :
fig = m.plot(forecast[144:6*288])
6 日目では、記録された気温は夜間に下がります。観測された低い夜間の気温に基づいて、モデルは低い日中のピークを予測します。けれども、実際の日中の気温は異常に低く、夜間よりもわずかに高くなっています。そのため、過大予測に繋がっています。
時間差 (= lag) の相対的な重要性を再度視覚化できます :
# fig_comp = m.plot_components(forecast)
fig_param = m.plot_parameters()
‘AR relevance’ は総ての n_forecasts に渡り平均化された、lag の相対的重要性であることに注意してください。
特定の予測ステップをレビューする
各予測の n-th ステップを強調することにより特定の予測期間を詳しく見ることができます。ここでは 3 時間先に予測される気温にフォーカスします (未来への最も離れた予測)。異なる 3 時間先の予測のための重みを詳しく見ましょう :
m = m.highlight_nth_step_ahead_of_each_forecast(3*12)
fig_param = m.plot_parameters()
次に、最初の 6 日間を再プロットしてそれを 1 ステップ先の予測と比較します。単一ステップ先の予測が 3 時間先の予測と比較して遥かに正確であることを観測します。けれども、いずれも 6 日目の異常を予測することはできません。
fig = m.plot(forecast[144:6*288])
m = m.highlight_nth_step_ahead_of_each_forecast(1)
fig = m.plot(forecast[144:6*288])
最近の予測をプロットする
モデル適合よりも実際の推測により関心があるとき、最も最近の推測をプロットできます :
m = m.highlight_nth_step_ahead_of_each_forecast(None) # reset highlight
fig = m.plot_last_forecast(forecast)
時間につれて予測がどのように変化したかを評価するために最後の幾つかの履歴予測が含められます。ここでは、最後の 2 時間に渡り与えられたとき、3 時間先の予測にフォーカスします。
m = m.highlight_nth_step_ahead_of_each_forecast(3*12)
fig = m.plot_last_forecast(forecast, include_previous_forecasts=2*12)
より大きな予測期間
未来への更なる予測について、データの解像度を減じることができます。5 分解像度の使用は高解像度短期予測のために有用かもしれませんが、長期予測のためには逆効果かもしれません。データの制限された総量 (約 2 ヶ月) を持つだけですので、モデルを過剰に指定することは回避することを望みます。
例として : 最後の日の気温 (n_lags=24*12) に基づいて未来への 24 時間 (nforecasts=24*12) を予測するように設定する場合、AR コンポーネントのパラメータ数は 24*12*24*12 = 82,944 に増大します。けれども、データセットにおよそ 2*30*24*12 = 17,280 サンプルを持つだけです。モデルは過剰指定されます。
最初にデータを hourly データにダウンサンプリングする場合、データセットを 2*30*24=1440 に、そしてモデルパラメータを 24*24=576 に減じます。こうして、モデルに適合させられます。けれども、より多くのデータを集めることがより良いです。
df.loc[:, "ds"] = pd.to_datetime(df.loc[:, "ds"])
df_hourly = df.set_index('ds', drop=False).resample('H').mean().reset_index()
len(df_hourly)
1561
df_hourly.head(3)
m = NeuralProphet(
n_lags=24,
n_forecasts=24,
changepoints_range=0.95,
n_changepoints=30,
weekly_seasonality=False,
learning_rate=0.3,
)
metrics = m.fit(df_hourly, freq='H')
future = m.make_future_dataframe(df_hourly, n_historic_predictions=True)
forecast = m.predict(future)
fig = m.plot(forecast)
# fig_param = m.plot_parameters()
最後に、最も最近のそして最後の 10 履歴の 24 時間予測をプロットし、24-th 時間先を ‘x’ でマークします。
m = m.highlight_nth_step_ahead_of_each_forecast(24)
fig = m.plot_last_forecast(forecast, include_previous_forecasts=10)
以上
NeuralProphet 0.2 : モデルの概要
NeuralProphet 0.2 : モデルの概要 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/18/2021 (Beta 0.2.7)
* 本ページは、NeuralProphet の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
スケジュールは弊社 公式 Web サイト でご確認頂けます。
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
- ウェビナー運用には弊社製品「ClassCat® Webinar」を利用しています。
人工知能研究開発支援 | 人工知能研修サービス | テレワーク & オンライン授業を支援 |
PoC(概念実証)を失敗させないための支援 (本支援はセミナーに参加しアンケートに回答した方を対象としています。) |
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション |
E-Mail:sales-info@classcat.com ; WebSite: https://www.classcat.com/ ; Facebook |
NeuralProphet 0.2 : モデルの概要
NeuralProphet は実践者のためのユーザフレンドリーな時系列予測ツールのニューラルネットワーク・ベースの PyTorch 実装です。これは Facebook により開発されたポピュラーな予想ツールである、Prophet により大きくインスパイアされています。NeuralProphet は完全にモジュール化アーキテクチャで開発されています、これは将来的に任意の追加コンポーネントを追加することをスケーラブルにします。私達のビジョンは解釈可能性、構成可能性のような Prophet の元の目的を維持して PyTorch をバックエンドに使用して自動微分機能のようなより多くのものを提供しながら、ユーザのための単純に使える予測ツールを開発することです。
時系列コンポーネント
NeuralProphet はコンポーネント、トレンド、季節性、自己回帰、特殊イベント、future リグレッサーと lagged リグレッサーを装備する分解可能な時系列モデルです。future リグレッサーは予測期間の未来値を知った外部変数である一方、lagged リグレッサーは観測期間の値だけを持つ外部変数です。トレンドは変化点を使用して線形または区分的 (= piece-wise) 線形トレンドのいずれかとしてモデル化できます。季節性はフーリエ項を使用してモデル化されますので、高頻度データのために複数の季節性を処理できます。自己回帰は AR-Net、時系列のための Auto-Regressive 順伝播ニューラルネットワークの実装を使用して処理されます。lagged リグレッサーはまた個別の順伝播ニューラルネットワークを使用してモデル化されます。future リグレッサーと特殊イベントは両者とも専用の係数を持つモデルの共変量としてモデル化されます。詳細については、個々のコンポーネントのドキュメントを参照してください。
データ前処理
モデルで幾つかのデータ前処理ステップを遂行します。時系列の観測値について、ユーザは値が正規化されることを望むか指定できます。デフォルトでは、y 値は min-max 正規化されます。ユーザが特に、normalize_y を true に設定する場合、データは z-score 正規化 (標準化) されます。正規化は共変量についても遂行できます。共変量の正規化のデフォルトモードは auto です。このモードでは、イベントのような二値特徴は別にして、他の総ては z-score 正規化されます。
データに欠損値がある場合にはimputation (データの補完) も遂行します。けれども、imputation はモデルで自己回帰が有効である場合にのみ成されます。そうでないなら、回帰モデルについて欠損値は実際には重要ではありません。二値データのためには特別な imputation は成されません。欠損日付についてはそれらは単純に 0 としてみなされます。y 値を含む数値データについては、正規化は 2 ステップのプロセスです。最初に、小さいギャップが線形 imputation で埋められ、それからより大きなギャップがローリング平均で埋められます。自己回帰が有効であるとき、観測された y 値は lagged 値から学習するために移動ウィンドウ形式で前処理されます。これは lagged リグレッサーのためにも行なわれます。
いつ NeuralProphet を使用するか
NeuralProphet は単一ステップとマルチステップの両者の前方予測を生成できます。現時点では、NeuralProphet はモデルを単変量で構築します。これは、(そのために) 予測を生成する想定する多くの系列を持つ場合、一度にこの一つを行なう必要があることを意味します。けれども、将来的にはグローバルな予測モデルの機能を NeuralProphet に統合することを望んでいます。
NeuralProphet は、時間につれてターゲット系列の動作を駆動できる他の外部要因があるようなシナリオのための予測モデルを構築するのに役立ちます。そのような外部情報の使用は系列の自己相関だけに依存するよりも予測モデルを大きく改良できます。NeuralProphet ツールは、予測、個々のコンポーネントとモデルの基礎的な係数を視覚化することによりモデリング・プロセス全体への洞察を得たい予測実践者に適しています。説明的なプロットを通して、ユーザは個々のコンポーネントの相互作用を視覚化できます。それらはまた正則化を通してスパース性を導入することにより必要に応じてこれらの係数を制御するためのパワーも持ちます。ドメイン知識のようにコンポーネントを加法的または乗法的に組み合わせることができます。
これは継続的な努力です。従って、NeuralProphet は今後のリリースで遥かにより多くの機能さえも装備されます。
以上
NeuralProphet 0.2 : クイックスタート
NeuralProphet 0.2 : クイックスタート (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/17/2021 (Beta 0.2.7)
* 本ページは、NeuralProphet の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
スケジュールは弊社 公式 Web サイト でご確認頂けます。
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
- ウェビナー運用には弊社製品「ClassCat® Webinar」を利用しています。
人工知能研究開発支援 | 人工知能研修サービス | テレワーク & オンライン授業を支援 |
PoC(概念実証)を失敗させないための支援 (本支援はセミナーに参加しアンケートに回答した方を対象としています。) |
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション |
E-Mail:sales-info@classcat.com ; WebSite: https://www.classcat.com/ ; Facebook |
NeuralProphet 0.2 : クイックスタート
このページは最小限の機能で NeuralProphet を使用して単純なモデルを構築する方法の詳細を含みます。
インストール
(git clone 経由で) コードレポジトリをダウンロードした後、レポジトリ・ディレクトリに移動して (cd neural_prophet) そして “pip install .” で python パッケージとして neuralprophet をインストールします。
Note : Jupyter ノートブックでパッケージを使用するつもりであれば、”pip install .[live]” で ‘live’ パッケージ・バージョンをインストールすることを勧めます。これは訓練 (と検証) 損失のライブ・プロットを取得するために train 関数で plot_live_loss を有効にすることを可能にします。
インポート
今ではコードで NeuralProphet を使用できます :
from neuralprophet import NeuralProphet
入力データ
neural_prophet パッケージにより想定される入力データ形式は元の prophet と同じです。それは 2 つのカラムを持つべきで、タイムスタンプを持つ ds と時系列の観測値を含む y カラムです。このドキュメントを通して、Peyton Manning Wikipedia ページのログ daily ページビューの時系列データを使用しています。データは次のようにインポートできます。
import pandas as pd
df = pd.read_csv('../example_data/example_wp_log_peyton_manning.csv')
データの形式は下のように見えます :
ds | y |
2007-12-10 | 9.59 |
2007-12-11 | 8.52 |
2007-12-12 | 8.18 |
2007-12-13 | 8.07 |
2007-12-14 | 7.89 |
単純なモデル
このデータセットのための neural_prophet を使用する単純なモデルは次のように NeuralProphet クラスのオブジェクトを作成して fit 関数を呼び出すことで適合できます。これはモデルのデフォルト設定でモデルを適合します。これらのデフォルト設定の詳細については、ハイパーパラメータの選択 のセクションを参照してください。
m = NeuralProphet()
metrics = m.fit(df, freq="D")
モデルがひとたび最適化されれば、最適化されたモデルを使用して予測を行なうことができます。このため、そのために予測する必要がある未来への時間ステップから成る未来のデータフレームを最初に作成する必要があります。NeuralProphet はこの目的のためにヘルパー関数 make_future_dataframe を提供します。データの頻度はここでグローバルに設定されることに注意してください。妥当な時系列頻度設定は pandas 時系列オフセット・エイリアス です。
future = m.make_future_dataframe(df, periods=365)
forecast = m.predict(future)
プロット
モデルから得られた予測を使用して、それらを視覚化できます。
forecasts_plot = m.plot(forecast)
これはデフォルトで推定されたトレンド、weekly 季節性と yearly 季節性を持つ単純なモデルです。下のように個々の成分を別々に見ることもできます。
fig_comp = m.plot_components(forecast)
個々の係数値は更なる洞察を得るために下のようにプロットすることもできます。
fig_param = m.plot_parameters()
検証
NeuralProphet のモデル検証は 2 つの方法で成されます。ユーザは引数 valida_p で検証のために使用されるデータの割合を指定することにより以下のようにモデル適合の後検証するために手動でデータセットを分割できます。この検証セットは系列の最後から取っておかれます。
m = NeuralProphet()
df_train, df_val = m.split_df(df, valid_p=0.2)
今は以下のように訓練と検証メトリクスを別々に見ることができます。
train_metrics = m.fit(df_train)
val_metrics = m.test(df_val)
モデル適合の間に総てのエポック毎に検証を遂行することもできます。これは以下のように fit 関数呼び出しで validate_each_epoch 引数を設定することにより成されます。これはモデル訓練の間に貴方に検証メトリックを見させます。
# or evaluate while training
m = NeuralProphet()
metrics = m.fit(df, validate_each_epoch=True, valid_p=0.2)
再現性
結果の変動性は異なる実行の異なる最適条件を見つける SGD に由来します。ランダム性の大半は重みのランダム初期化、異なる学習率とデータローダの異なるシャッフリングに由来します。そのシードを設定することでランダム数 generator を制御できます :
from neuralprophet import set_random_seed
set_random_seed(0)
これはモデルを実行するたびに同一の結果に繋がるはずです。モデルを適合する前にランダム・シードを毎回同じランダム数に明示的に設定しなければならないことに注意してください。
以上
NeuralProphet 0.2 : 概要 (README)
NeuralProphet 0.2 : 概要 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/17/2021 (Beta 0.2.7)
* 本ページは、NeuralProphet の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
スケジュールは弊社 公式 Web サイト でご確認頂けます。
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
- ウェビナー運用には弊社製品「ClassCat® Webinar」を利用しています。
人工知能研究開発支援 | 人工知能研修サービス | テレワーク & オンライン授業を支援 |
PoC(概念実証)を失敗させないための支援 (本支援はセミナーに参加しアンケートに回答した方を対象としています。) |
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション |
E-Mail:sales-info@classcat.com ; WebSite: https://www.classcat.com/ ; Facebook |
NeuralProphet 0.2 : 概要
Please note that the project is still in beta phase. Please report any issues you encounter or suggestions you have. We will do our best to address them quickly. Contributions are very welcome!
Facebook Prophet と AR-Net にインスパイアされ、PyTorch 上に構築された、時系列モデル・ベースのニューラルネットワークです。
ドキュメント
現在、改良された ドキュメントページ について作業しています。
NeuralProphet の視覚的イントロダクションについては、the 40th International Symposium on Forecasting で与えられたプレゼンテーションを見てください。
Contribute
ファミリーの一部になる手助けをする実践的な手順と更なるリソースを含む Contributing to NeuralProphet ページを編集しました。
コミュニティ
議論とヘルプ
質問や提案がある場合、GitHub のここにあるコミュニティ に参加できます。
Slack Chat
アクティブな Slack コミュニティ も持ちます。来て会話に参加してください!
チュートリアル
貴方が始める手助けをする幾つかの example ノートブック があります。
より多くのリソースについては ドキュメント・ページ を参照してください。
最小サンプル
from neuralprophet import NeuralProphet
パッケージをインポートした後、コードで NeuralProphet を使用できます :
m = NeuralProphet()
metrics = m.fit(df, freq="D")
future = m.make_future_dataframe(df, periods=30)
forecast = m.predict(future)
組込みのプロット関数で結果を視覚化できます :
fig_forecast = m.plot(forecast)
fig_components = m.plot_components(forecast)
fig_model = m.plot_parameters()
インストール
今は pip で neuralprophet を直接インストールできます :
pip install neuralprophet
Jupyter ノートブックでパッケージを使用するつもりなら、’live’ バージョンをインストールすることを勧めます :
pip install neuralprophet[live]
これは訓練 (そして検証) 損失のライブ・プロットを取得するために fit 関数の plot_live_loss を有効にします。
最新バージョンを必要とする場合には、代わりに github から直接インストールできます :
git clone <copied link from github>
cd neural_prophet
pip install .
モデルの特徴
- AR-Net を通した自己相関モデリング
- オプションの自動変化点検知を持つ区分的 (= piecewise) 線形トレンド
- yearly, daily, weekly, hourly のような異なる期間のフーリエ項季節性
- 遅延 (= lagged) リグレッサー (測定された特徴、e.g. 温度センサー)
- 未来リグレッサー (前もって知られる特徴、e.g. 気温予測)
- 休日 & 特殊イベント
- 正則化を通した係数のスパース性
- 予測成分、モデル係数と最終予測のためのプロット
- 訓練関連のハイパーパラメータの自動選択
以上