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)
以上