ホーム » 2021
年別アーカイブ: 2021
sktime 0.7 : チュートリアル (1) sktime で予測する
sktime 0.7 : チュートリアル (1) sktime で予測する (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/30/2021 (v0.7.0)
* 本ページは、sktime の以下のノートブックを翻訳した上で適宜、補足説明したものです:
- Tutorials : Forecasting with sktime
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- テレワーク & オンライン授業を支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
- ウェビナー運用には弊社製品「ClassCat® Webinar」を利用しています。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション |
E-Mail:sales-info@classcat.com ; WebSite: https://www.classcat.com/ ; Facebook |
sktime 0.7 : チュートリアル (1) sktime で予測する
セットアップ手順 : このノートブックは sktime でサポートされる予測学習タスクのチュートリアルを与えます。binder では、これはそのまま実行できるはずです。
このノートブックを意図したとおりに実行するには、基本的な依存性 requirements とともに sktime が貴方の python 環境にインストールされていることを確実にしてください。
sktime のローカル開発版でこのノートブックを実行するには、以下をアンコメントして実行するか、sktime main ブランチのローカル・クローンを “pip install -e” します。
# from os import sys
# sys.path.append("..")
◆ 予測では、時系列の時間的前方予測を行なうために過去のデータが使用されます。これは scikit-learn と類似のライブラリによりサポートされる表形式予測タスクと顕著に異なります。
sktime は様々な古典的そして ML-スタイルの予測アルゴリズムに一般的な、scikit-learn ライクなインターフェイスを時間調整スキームを含む、パイプラインと合成的な機械学習モデルを構築するためのツール、あるいは scikit-learn リグレッサーの walk-forward アプリケーションのようなリダクションとともに提供します。
- セクション 1 は sktime によりサポートされる一般的な予測ワークフローの概要を提供します。
- セクション 2 は sktime で利用可能な予測器のファミリーを説明します。
- セクション 3 はパイプライン構築、リダクション、調整、アンサンブルと autoML を含む、高度な合成パターンを説明します。
- セクション 4 は sktime インターフェイスに準拠するカスタム推定器をどのように書くかのイントロダクションを与えます。
その他のリファレンス :
- 予測が教師あり予測とどのように異なるかの更なる詳細、そして予測を教師あり予測として誤診する落とし穴については、このノートブック を見てください。
- 科学的なリファレンスについては、sktime による予測の論文 を見てください、ここでは sktime の予測モジュールを詳しく説明して M4 study を複製して拡張するためにそれを利用します。
基本的な予測ワークフロー
パッケージのインポート
import numpy as np
import pandas as pd
このセクションは基本的な予測ワークフロー、そしてそのための主要なインターフェイス・ポイントを説明します、
以下の 3 つのワークフローをカバーします (訳注: 原文ママ) :
- 基本的な配備ワークフロー : 適合と予測のバッチ処理
- 基本的な評価ワークフロー : 正解観測に対する予測のバッチの評価
- 上位配備ワークフロー : 適合と更新/予測のローリング
- 上位評価ワークフロー : ローリング予測分割を使用して、一般的なバックテスト・スキームを含む分割毎と集計誤差を計算します。
1.1 データ・コンテナ形式
総てのワークフローは入力データ形式に共通の仮定を持ちます。
sktime は時系列を表すために pands を利用します :
- 単変量時系列とシークエンスのための pd.Series
- 多変量時系列とシークエンスのための pd.Series
Series.index and DataFrame.index は時系列やシークエンスのインデックスを表すために使用されます。sktime は pandas の integer, period と timestamp インデックスをサポートします。
NOTE : 現時点 (v0.6x) では、多変量時系列の予測は安定的な機能ではありません、これは優先的なロードマップ項目です。多変量外因的な時系列は安定的な機能の一部です。
Example : このチュートリアルの実行例として、テキストブックのデータセット、Box-Jenkins 航空会社データセットを使用します、これは 1949 – 1960 の国際航空会社の旅客の月間合計数から成ります。値は千単位です。”Makridakis, Wheelwright and Hyndman (1998) Forecasting: 手法とアプリケーション”, 課題セクション 2 と 3 を見てください。
from sktime.datasets import load_airline
from sktime.utils.plotting import plot_series
y = load_airline()
# plotting for visualization
plot_series(y)
y.index
一般に、ユーザは予測のためのデータセットをロードするために read_csv のような pandas と pandas 互換パッケージの組込みロード機能や、データが他のインメモリ形式 e.g., numpy.array で利用可能な場合には Series or DataFrame コンストラクタを使用することが想定されています。
sktime 予測器は pandas 隣接 (= pandas-adjacent) 形式の入力を受け取るかもしれませんが、pandas 形式で出力を生成し、そして (pandas 形式で) 入力を強制しようとします。
Note : 貴方の好みの形式に正しく変換あるいは強制されない場合、その機能を sktime に親切に寄与することを考えてください。
1.2 基本的な配備ワークフロー – 適合と予測のバッチ処理
最も単純なユースケース・ワークフローは適合と予測のバッチ処理です、つまり、予測モデルを過去のデータの 1 つのバッチに適合させてから、未来の時間ポイントで予測を要求します。
このワークフローのステップは以下のようなものです :
- データの準備
- 予測がリクエストされる時間ポイントの仕様。これは numpy.array or ForecastingHorizon オブジェクトを使用します。
- 予測器の仕様とインスタンス化。これは scikit-learn ライクなシンタクスに従います ; 予測器オブジェクトはお馴染みの scikit-learn BaseEstimator インターフェイスに従います。
- 予測器の fit メソッドを使用して、予測器をデータに適合させます。
- 予測器の predict メソッドを使用して、予測を行ないます。
下では最初に基本的な配備ワークフローの vanilla 変種を段階的に概説します。
最後に、パターンからの一般的な deviations を伴う、1 セル・ワークフローが提供されます (セクション 1.2.1 とそれ以降)。
ステップ 1 – データの準備
セクション 1.1 で説明されたように、データは pd.Series or pd.DataFrame 形式にあることが仮定されています。
from sktime.datasets import load_airline
from sktime.utils.plotting import plot_series
# in the example, we use the airline data set.
y = load_airline()
plot_series(y)
ステップ 2 – 予測期間を指定する
次に予測期間を指定してそれを予測アルゴリズムに渡す必要があります。
2 つの主要な方法があります :
- 整数の numpy.array を使用する。これは時系列の整数インデックスか periodic インデックスのいずれかを想定しています ; 整数は (そのために) 前もって予測したい時間ポイントか期間の数を示します。E.g., 1 は次の期間を予測すること、2 は 2 番目の次の期間を予測することを意味します、等々。
- ForecastingHorizon を使用する。これは引数としてサポートされるインデックス型を使用して、予測範囲を定義するために使用できます。periodic インデックスは想定されていません。
予測範囲は絶対的、つまり未来の特定の時間ポイントを参照するか、相対的、つまり現在までの時間差を参照することができます。デフォルトとして、現在は予測器に渡される任意の y で見られる最新の時間ポイントです。
numpy.array ベースの予測範囲は常に相対的です ; ForecastingHorizon オブジェクトは相対的と絶対的にの両者であることが可能です。特に絶対的予測範囲は ForecastingHorizon を使用してのみ指定できます。
numpy 予測範囲を使用する
fh = np.arange(1, 37)
fh
これは次の 3 年間の monthly 予測を求めます、何故ならば元の系列期間は 1 ヶ月だからです。別の例では、先の 2 番目と 5 番目の月だけを予測するために、次のように書けます :
import numpy as np
fh = np.array([2, 5]) # 2nd and 5th step ahead
ForecastingHorizon ベースの予測範囲を使用する
ForecastingHorizon オブジェクトは入力として絶対的インデックスを取りますが、is_relative フラグに応じて入力を絶対的または相対的と見なします。
pandas から時間差タイプが渡される場合、ForecastingHorizon は自動的に相対的範囲を想定します ; pandas から値タイプが渡される場合、それは絶対的範囲を想定します。
この例で絶対的な ForecastingHorizon を定義するためには :
from sktime.forecasting.base import ForecastingHorizon
fh = ForecastingHorizon(
pd.PeriodIndex(pd.date_range("1961-01", periods=36, freq="M")), is_relative=False
)
fh
ForecastingHorizon は to_relative と to_absolute メソッドを通して相対的から絶対的に (そしてその反対に) 変換できます。
これらの変換の両者は互換なカットオフが渡されることを要求します :
cutoff = pd.Period("1960-12", freq="M")
fh.to_relative(cutoff)
fh.to_absolute(cutoff)
ステップ 3 – 予測アルゴリズムを指定する
予測を行なうためには、予測アルゴリズムが指定される必要があります。これは scikit-learn のようなインターフェイスを使用して成されます。最も重要なことは、総ての sktime 予測器が同じインターフェイスに従いますので、どの予測器が選択されても、これまでのそして残りのステップが同じであることです。
この例については、最後の観測値を予測する naive 予測メソッドを選択します。パイプラインとリダクション構築シンタクスを使用して、より複雑な仕様が可能です。これはセクション 2 で後でカバーされます。
from sktime.forecasting.naive import NaiveForecaster
forecaster = NaiveForecaster(strategy="last")
ステップ 4 – 予測器を観測データに適合させる
今は予測器は観測値に適合される必要があります :
forecaster.fit(y)
ステップ 5 – 予測を要求する
最後に、指定された予測範囲のための予測を要求します。予測器に適合させた後これは成される必要があります :
y_pred = forecaster.predict(fh)
# plotting predictions and past data
plot_series(y, y_pred, labels=["y", "y_pred"])
基本的な配備ワークフロー (in a nutshell)
便利のために、基本的な配備ワークフローを一つのセルで表します。これは同じデータを使用しますが、異なる予測器です : 同じ月に観測された最新の値を予測します。
from sktime.datasets import load_airline
from sktime.forecasting.base import ForecastingHorizon
from sktime.forecasting.naive import NaiveForecaster
# step 1: data specification
y = load_airline()
# step 2: specifying forecasting horizon
fh = np.arange(1, 37)
# step 3: specifying the forecasting algorithm
forecaster = NaiveForecaster(strategy="last", sp=12)
# step 4: fitting the forecaster
forecaster.fit(y)
# step 5: querying predictions
y_pred = forecaster.predict(fh)
# optional: plotting predictions and past data
plot_series(y, y_pred, labels=["y", "y_pred"])
… 翻訳中 …
以上
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)
これはモデルを実行するたびに同一の結果に繋がるはずです。モデルを適合する前にランダム・シードを毎回同じランダム数に明示的に設定しなければならないことに注意してください。
以上