ホーム » sales-info の投稿 (ページ 2)

作者アーカイブ: sales-info

NeuralProphet 0.2 : モデルの概要

NeuralProphet 0.2 : モデルの概要 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/18/2021 (Beta 0.2.7)

* 本ページは、NeuralProphet の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

無料 Web セミナー開催中 クラスキャット主催 人工知能 & ビジネス Web セミナー

人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。
スケジュールは弊社 公式 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 セミナー

人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。
スケジュールは弊社 公式 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 セミナー

人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。
スケジュールは弊社 公式 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 ProphetAR-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. 気温予測)

  • 休日 & 特殊イベント

  • 正則化を通した係数のスパース性

  • 予測成分、モデル係数と最終予測のためのプロット

  • 訓練関連のハイパーパラメータの自動選択
 

以上



Prophet 1.0 : 追加のトピック

Prophet 1.0 : 追加のトピック (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/16/2021 (1.0)

* 本ページは、Prophet の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

無料 Web セミナー開催中 クラスキャット主催 人工知能 & ビジネス Web セミナー

人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。
スケジュールは弊社 公式 Web サイト でご確認頂けます。
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
  • ウェビナー運用には弊社製品「ClassCat® Webinar」を利用しています。
クラスキャットは人工知能・テレワークに関する各種サービスを提供しております :

人工知能研究開発支援 人工知能研修サービス テレワーク & オンライン授業を支援
PoC(概念実証)を失敗させないための支援 (本支援はセミナーに参加しアンケートに回答した方を対象としています。)

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
E-Mail:sales-info@classcat.com  ;  WebSite: https://www.classcat.com/  ;  Facebook

 

 

Prophet 1.0 : 追加のトピック

モデルをセーブする

適合された Prophet モデルを後でロードして利用できるようにセーブすることは可能です。

Python では、モデルは pickle でセーブされるべきではありません ; モデルオブジェクトに装着される Stan バックエンドは上手く pickle しません、そして Python の特定のバージョンで問題が発生します。代わりに、モデルを json にシリアライズする組込みのシリアリゼーション関数を使用するべきです :

import json
from prophet.serialize import model_to_json, model_from_json

with open('serialized_model.json', 'w') as fout:
    json.dump(model_to_json(m), fout)  # Save model

with open('serialized_model.json', 'r') as fin:
    m = model_from_json(json.load(fin))  # Load model

json ファイルはシステム間で可搬で、デシリアリゼーションは prophet の古いバージョンと後方互換です。

 

フラットなトレンドとカスタムトレンド

トレンド変化よりも強い季節性パターンを示す時系列については、トレンド成長率をフラットに強制することは有用かもしれません。これはモデルを作成するとき単純に growth=flat を渡すことにより実現されます :

m = Prophet(growth='flat')

これが定数トレンドを持たない時系列で使用される場合、任意のトレンドはノイズ項で適合されて従って予測で高い予測不確実性があることに注意してください。

これらの 3 つの組込みトレンド関数 (piecewise linear, piecewise logistic growth と flat) 以外のトレンドを使用するために、github からソースコードをダウンロードして、ローカルブランチで要望どおりトレンド関数を変更し、それからそのローカルバージョンをインストールできます。この PR はカスタム・トレンドを実装するために成されなければならないものの良い例を提供します、これ は step 関数 trend をそして これ は R で新しいトレンドを実装するものです。

 

適合されたモデルを更新する

予測の一般的な設定はモデルを適合させます、これは追加のデータが入ってくるとき更新される必要があります。Prophet モデルは一度だけ適合させることが可能で、新しいデータが利用可能になるとき新しいモデルが再適合されなければなりません。殆どの設定では、モデル適合はスクラッチから再適合することによるどのような問題もないほど十分に高速です。けれども、先のモデルのモデルパラメータから適合をウォームアップすることにより少しスピードアップすることは可能です。このコードサンプルは Python でこれがどのように成されるかを示します :

def stan_init(m):
    """Retrieve parameters from a trained model.
    
    Retrieve parameters from a trained model in the format
    used to initialize a new Stan model.
    
    Parameters
    ----------
    m: A trained model of the Prophet class.
    
    Returns
    -------
    A Dictionary containing retrieved parameters of m.
    
    """
    res = {}
    for pname in ['k', 'm', 'sigma_obs']:
        res[pname] = m.params[pname][0][0]
    for pname in ['delta', 'beta']:
        res[pname] = m.params[pname][0]
    return res

df = pd.read_csv('../examples/example_wp_log_peyton_manning.csv')
df1 = df.loc[df['ds'] < '2016-01-19', :]  # All data except the last day
m1 = Prophet().fit(df1) # A model fit to all data except the last day


%timeit m2 = Prophet().fit(df)  # Adding the last day, fitting from scratch
%timeit m2 = Prophet().fit(df, init=stan_init(m1))  # Adding the last day, warm-starting from m1

1.33 s ± 55.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
185 ms ± 4.46 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

ご覧のように、前のモデルからのパラメータが kwarg init で次の (モデルの) ための適合に渡されます。この場合、ウォームスタートを使用するときモデル適合はおよそ 5x 高速でした。スピードアップは新しいデータの追加で最適なモデルパラメータがどの程度変化したかに一般に依存します。

ウォームスタートを考えるとき留意するべき幾つかの注意があります。最初に、ウォームアップスタートは (上のサンプルに 1 日を追加するような) データへの小さい更新のために上手く機能しますが、データへの大きな変更がある場合 (i.e., 多くの日付が追加される場合) スクラッチから適合させるよりも悪い可能性があります。これは履歴の大きあ総量が追加されるとき、変化点の位置が 2 つのモデル間で非常に異なり、従って前のモデルからのパラメータは実際には悪いトレンド初期化を生成するかもしれないからです。2 番目に、詳細として、changepoints の数は一つのモデルから次のモデルへ一貫している必要があります、そうでなければエラーが上げられます、何故ならば changepoint prior パラメータ delta が誤ったサイズになるからです。

 

外部リファレンス

これらの github レポジトリは幅広い関心があるかもしれない方法で Prophet の上に構築するサンプルを提供します :

  • forecastr : Prophet のための UI を提供する web app。

  • NeuralProphet : pytorch で実装された Prophet スタイルのモデル、より適応可能で拡張可能です。
 

以上



Prophet 1.0 : 診断 (Diagnostics)

Prophet 1.0 : 診断 (Diagnostics) (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/15/2021 (1.0)

* 本ページは、Prophet の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

無料 Web セミナー開催中 クラスキャット主催 人工知能 & ビジネス Web セミナー

人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。
スケジュールは弊社 公式 Web サイト でご確認頂けます。
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
  • ウェビナー運用には弊社製品「ClassCat® Webinar」を利用しています。
クラスキャットは人工知能・テレワークに関する各種サービスを提供しております :

人工知能研究開発支援 人工知能研修サービス テレワーク & オンライン授業を支援
PoC(概念実証)を失敗させないための支援 (本支援はセミナーに参加しアンケートに回答した方を対象としています。)

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
E-Mail:sales-info@classcat.com  ;  WebSite: https://www.classcat.com/  ;  Facebook

 

 

Prophet 1.0 : 診断 (Diagnostics)

交差検証

Prophet は履歴データを使用して予測誤差を測定するための時系列交差検証の機能を含みます。これは、履歴のカットオフポイントを選択し、それらの各々についてそのカットオフポイントまでのデータのみを使用してモデルを適合させることによって成されます。そして予測された値を実際の値と比較できます。この図は Peyton Manning データセット上のシミュレートされた履歴予測を示します、そこではモデルは 5 年の初期履歴に適合され、予測は 1 年の範囲で行なわれました。

Prophet 論文 はシミュレートされた履歴予測の更なる説明を与えます。

この交差検証手続きは cross_validation 関数を使用して履歴のカットオフの範囲のために自動的に成されます。予測範囲 (horizon)、それからオプションで初期訓練期間のサイズ (initial) とカットオフ日の間の間隔 (period) を指定します。デフォルトでは、initial 訓練期間は horizon の 3 倍に設定されて、カットオフは horizon の半分毎に行なわれます。

cross_validation の出力は各シミュレートされた予測日と各カットオフ日における真の値 y とサンプル外の予測値 yhat を持つデータフレームです。特に、予測はカットオフとカットオフ + horizon の間の総ての観測点のために行なわれます。そしてこのデータフレームは yhat vs. y の誤差測定値を計算するために使用されます。

ここでは 365 日の horizon の予測性能を評価するために交差検証を行ないます、最初のカットオフの 730 日の訓練データから始めて 180 日毎に予測を行ないます。この 8 年間の時系列では、これは合計 11 の予測に相当します。

from prophet.diagnostics import cross_validation
df_cv = cross_validation(m, initial='730 days', period='180 days', horizon = '365 days')
df_cv.head()

R では、引数 units は as.difftime により受け入れられるタイプでなければなりません、これは weeks か shorter です。Python では、initial, period と horizon のための文字列は Pandas Timedelta で使用される形式であるべきです、これは days or shorter の単位を受け取ります。

カスタム・カットオフは Python と R の cross_validation 関数の cutoffs キーワードへの日付のリストとして供給されることもできます。例えば、6 ヶ月間隔の 3 つのカットオフは次のような日付形式で cutoffs 引数に渡される必要があります :

cutoffs = pd.to_datetime(['2013-02-15', '2013-08-15', '2014-02-15'])
df_cv2 = cross_validation(m, cutoffs=cutoffs, horizon='365 days')

performance_metrics ユティリティはカットオフからの距離の関数として、予測性能の幾つかの有用な統計値を計算するために使用できます (yhat, yhat_lower と y に比較した yhat_upper )。計算される統計値は平均二乗誤差 (MSE)、二乗平均平方根誤差 (RMSE)、平均絶対誤差 (MAE)、平均絶対パーセント誤差 (MAPE)、中央値絶対パーセント誤差 (MDAPE)、そして yhat_lower と yhat_upper 範囲の推定値です。これらは horizon (ds minus カットオフ) によりソートされた後 df_cv の予測のローリング・ウィンドウ上で計算されます。デフォルトでは予測の 10% は各ウィンドウに含まれますが、これは rolling_window 引数で変更できます。

from prophet.diagnostics import performance_metrics
df_p = performance_metrics(df_cv)
df_p.head()

交差検証性能メトリクスは plot_cross_validation_metric で可視化できます、ここでは MAPE のために表示されます。ドットは df_cv の各予測のための絶対パーセント誤差を表します。青い線は MAPE を示し、そこでは平均はドットのローリング・ウィンドウに渡り取られます。この予測については、1ヶ月先への予測については 5% 前後の誤差が典型的で、1 年後の予測については誤差は 11% 前後にまで増加することがわかります。

from prophet.plot import plot_cross_validation_metric
fig = plot_cross_validation_metric(df_cv, metric='mape')

図のローリング・ウィンドウのサイズはオプション引数 rolling_window で変更できます、これは各ローリング・ウィンドウで使用する予測の比率を指定します。デフォルトは 0.1 で、各ウィンドウに含まれる df_cv からの行の 10% に相当し、これを増やすことは図での滑らかな平均カーブに繋がります。initial 期間は特に季節性と追加のリグレッサーでモデルの総ての成分を捕捉できるように十分に長くあるべきです : yearly 季節性のためには少なくとも 1 年、weekly 季節性のためには少なくとも 1 週間、等。

 

交差検証の並列化

交差検証は parallel キーワードの指定を設定することにより Python の並列モードで実行することもできます。4 つのモードがサポートされます :

  • parallel=None (デフォルト, 並列化なし)
  • parallel=”processes”
  • parallel=”threads”
  • parallel=”dask”

大きすぎない問題については、parallel=”processes” を使用することを勧めます。並列交差検証が単一マシン上で成されるときそれは最高の性能を達成します。大きな問題については、多くのマシン上で交差検証を行なうために Dask クラスタが使用されます。個別に Dask をインストール する必要があります、それは prophet と一緒にはインストールされないからです。

from dask.distributed import Client



client = Client()  # connect to the cluster

df_cv = cross_validation(m, initial='730 days', period='180 days', horizon='365 days',

                         parallel="dask")

 

ハイパーパラメータ調整

changepoint_prior_scale と seasonality_prior_scale のような、モデルのハイパーパラメータを調整するために交差検証は利用できます。カットオフに渡る並列化、それら 2 つのパラメータの 4×4 グリッドによる、Python サンプルは下で与えられます。ここではパラメータは 30 日 horizon に渡り平均された RMSE で評価されますが、異なる性能メトリクスが異なる問題のために適切かもしれません。

# Python
import itertools
import numpy as np
import pandas as pd

param_grid = {  
    'changepoint_prior_scale': [0.001, 0.01, 0.1, 0.5],
    'seasonality_prior_scale': [0.01, 0.1, 1.0, 10.0],
}

# Generate all combinations of parameters
all_params = [dict(zip(param_grid.keys(), v)) for v in itertools.product(*param_grid.values())]
rmses = []  # Store the RMSEs for each params here

# Use cross validation to evaluate all parameters
for params in all_params:
    m = Prophet(**params).fit(df)  # Fit model with given params
    df_cv = cross_validation(m, cutoffs=cutoffs, horizon='30 days', parallel="processes")
    df_p = performance_metrics(df_cv, rolling_window=1)
    rmses.append(df_p['rmse'].values[0])

# Find the best parameters
tuning_results = pd.DataFrame(all_params)
tuning_results['rmse'] = rmses
print(tuning_results)
    changepoint_prior_scale  seasonality_prior_scale      rmse
0                     0.001                     0.01  0.757694
1                     0.001                     0.10  0.743399
2                     0.001                     1.00  0.753387
3                     0.001                    10.00  0.762890
4                     0.010                     0.01  0.542315
5                     0.010                     0.10  0.535546
6                     0.010                     1.00  0.527008
7                     0.010                    10.00  0.541544
8                     0.100                     0.01  0.524835
9                     0.100                     0.10  0.516061
10                    0.100                     1.00  0.521406
11                    0.100                    10.00  0.518580
12                    0.500                     0.01  0.532140
13                    0.500                     0.10  0.524668
14                    0.500                     1.00  0.521130
15                    0.500                    10.00  0.522980
best_params = all_params[np.argmin(rmses)]
print(best_params)
{'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 0.1}

代わりに、上のループを並列化することによりパラメータの組合せについて並列化を行なうことができるでしょう。

Prophet モデルは調整を考えるかもしれない多くの入力パラメータを持ちます。ここに良い出発点であるかもしれないハイパーパラメータ調整のための幾つかの一般的な推奨があります。

 

調整可能なパラメータ

  • changepoint_prior_scale : これは多分最も影響力のあるパラメータです。トレンドの柔軟性、特にトレンド変化点でどのくらいのトレンド変化があるかを決定します。このドキュメントで説明されているように、それが小さすぎれば、トレンドは過小適合になりそしてトレンド変化でモデル化されるべき分散は代わりにノイズ項で処理されることになります。それが大きすぎれば、トレンドは過剰適合となり最も極端な場合には yearly 季節性を捕捉するトレンドで終わる可能性があります。0.05 のデフォルトは多くの時系列のために動作しますが、これは調整できます ; [0.001, 0.5] の範囲がおそらく概ね適切です。このようなパラメータ (正則化ペナルティ ; これは実質的には lasso ペナルティです) はしばしば対数スケールで調整されます。

  • seasonality_prior_scale : このパラメータは季節性の柔軟性を制御します。同様に、大きな値は季節性を大きな変動に適合させることを可能にし、小さい値は季節性の大きさを縮小します。デフォルトは 10. で、これは基本的には正則化を適用しません。これはここでは滅多に過剰適合を見ないからです (それは truncated フーリエ級数でモデル化されているという事実により固有の正則化はありますので、それは本質的には low-pass フィルタ処理されています)。それを調整するための合理的な範囲は多分 [0.01, 10] です ; 0.01 に設定するとき季節性の大きさが非常に小さくなるように強制されることを見出すはずです。これはまた対数スケール上でも意味がある傾向にあります、何故ならばそれはリッジ回帰のように実質的には L2 ペナルティであるからです。

  • holidays_prior_scale : これは休日効果に適合させるための柔軟性を制御します。seasonality_prior_scale と同様に、それは 10.0 がデフォルトです、これは基本的には正則化を適用しません、何故ならば通常は休日の複数の観測を持ち上手く効果の推定を行えるからです。これは seasonality_prior_scale と同様に [0.01, 10] の範囲でも調整できます。

  • seasonality_mode : オプションは [‘additive’, ‘multiplicative’] です。デフォルトは ‘additive’ ですが、多くのビジネス時系列は乗法的季節性を持ちます。これは時系列を単に見て、季節的変動の大きさが時系列の大きさとともに増大するかを見ることにより最善に識別されます (乗法的季節性についてはここのドキュメントを見てください) が、それが可能ではないとき、それは調整できるでしょう。

 

多分調整 (可能)?

  • changepoint_range : これはトレンドが変化することが許容されている履歴の割合です。これは履歴の 0.8, 80% がデフォルトで、時系列の最後の 20% ではどのようなトレンド変化にもモデルが適合されないことを意味します。これはかなり保守的で、(上手く適合するために十分な走路が残されていない) 時系列の本当に最後でトレンド変化への過剰適合を回避するためです。ループで人間によれば、これは非常に容易に視覚的に識別できます : 最後の 20% で予測が上手くいかないかを非常に明瞭に見ることができます。完全自動設定では、保守性を低くすることは有益かもしれません。上で説明されたようにカットオフによる交差検証でこのパラメータを効果的に調整することは可能ではないかもしれません。時系列の最後の 10% のトレンド変化から一般化するモデルの能力は、最後の 10% でトレンド変化を持たないかもしれない先のカットオフを見ることから学習することは困難です。従って、このパラメータは多分調整されないことが良いです、大規模な数の時系列に渡る場合を多分除いて。その設定では、[0.8, 0.95] が妥当な範囲であるかもしれません。

 

調整されない傾向にあるパラメータ

  • growth : オプションは ‘linear’ と ‘logistic’ です。これはおそらく調整されません ; 既知の飽和点とそのポイントに向けての成長がある場合、それは含まれて logistic トレンドが使用され、そうでなければそれは linear です。

  • changepoints : これは変化点の位置を手動で指定するためのものです。デフォルトは None で、これはそれらを自動的に配置します。

  • n_changepoints : これは自動的に配置された変化点の数です。25 のデフォルトは典型的な時系列でトレンド変化を捕捉するために十分であるはずです (少なくとも Prophet が上手く動作するタイプ)。変化点の数を増やしたり減らしたりするよりも、それらのトレンド変化で柔軟性を増やしたり減らしたりすることに焦点を当てることがより効果的かもしれません、これは changepoint_prior_scale で成されます。

  • yearly_seasonality : デフォルト (‘auto’) では、これは年間データがあれば yearly 季節性をオンに、そうでなければオフにします。オプションは [‘auto’, True, False] です。1 年間以上のデータがあれば、HPO の間にこれをオフにしようとするよりも、それをオンのままにして、seasonality_prior_scale を調整して季節的効果を無効にすることがより効果的であるかもしれません。

  • weekly_seasonality : yearly_seasonality と同じです。

  • daily_seasonality : yearly_seasonality と同じです。

  • holidays : これは指定された休日のデータフレームを渡すためです。休日効果は holidays_prior_scale で調整されます。

  • mcmc_samples : MCMC が使用されるか否かは時系列の長さとパラメータ不確実性の重要度のような要因で決定される可能性があります (これらの考慮点はドキュメントで説明されます)。

  • interval_width : Prophet は予測 yhat に対する yhat_lower と yhat_upper のように、各成分に対して不確定区間を返します。これらは事後予測分布の分位点として計算され、interval_width はどの分位点を使用するかを指定します。0.8 のデフォルトは 80% 予測区間を提供します。95% 区間を望む場合はそれを 0.95 に変更できます。これは不確定区間だけに影響し、そして予測 yhat は全く変更しませんので、調整される必要はありません。

  • uncertainty_samples : 不確定区間は事後予測区間の分位点として計算され、事後予測区間は Monte Carlo サンプリングで推定されます。このパラメータは使用するサンプリングの数です (デフォルトは 1000)。予測のための実行時間はこの数で線形です。それを小さくすると不確定区間の分散 (Monte Carlo 誤差) を増加させ、大きくすればその分散を減じます。従って、不確実性推定がギザギザ (jagged) に見えるなら、それらを更に滑らかにするためにこれを増加できますが、変更される必要はないかもしれません。interval_width と同様に、このパラメータは不確定区間に影響を与えるだけで、それの変更は予測 yhat にはどのようにも影響しません ; それは調整される必要はありません。

  • stan_backend : pystan と cmdstanpy の両者がセットアップされる場合、バックエンドが指定できます。予測は同じで、これは調整されません。
 

以上



Prophet 1.0 : 非日次データ

Prophet 1.0 : 非日次データ (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/14/2021 (1.0)

* 本ページは、Prophet の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

無料 Web セミナー開催中 クラスキャット主催 人工知能 & ビジネス Web セミナー

人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。
スケジュールは弊社 公式 Web サイト でご確認頂けます。
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
  • ウェビナー運用には弊社製品「ClassCat® Webinar」を利用しています。
クラスキャットは人工知能・テレワークに関する各種サービスを提供しております :

人工知能研究開発支援 人工知能研修サービス テレワーク & オンライン授業を支援
PoC(概念実証)を失敗させないための支援 (本支援はセミナーに参加しアンケートに回答した方を対象としています。)

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
E-Mail:sales-info@classcat.com  ;  WebSite: https://www.classcat.com/  ;  Facebook

 

 

Prophet 1.0 : 非日次データ

Sub-daily データ

Prophet は ds カラムでタイムスタンプを持つデータフレームを渡すことにより sub-daily 観測をもつ時系列のために予測を行なうことができます。タイムスタンプの形式は YYYY-MM-DD HH:MM:SS であるべきです – ここ のサンプル csv を見てください。sub-daily データが使用されるとき、daily 季節性は自動的に適合されます。ここでは Prophet を 5 分解像度のデータに適合させます (Yosemite の daily 気温) :

df = pd.read_csv('../examples/example_yosemite_temps.csv')
m = Prophet(changepoint_prior_scale=0.01).fit(df)
future = m.make_future_dataframe(periods=300, freq='H')
fcst = m.predict(future)
fig = m.plot(fcst)

daily 季節性は成分プロットに現れます :

fig = m.plot_components(fcst)

 

規則的なギャップ (= regular gap) を持つデータ

上のデータセットは 12a から 6a までの観測だけを持ったと仮定します :

df2 = df.copy()
df2['ds'] = pd.to_datetime(df2['ds'])
df2 = df2[df2['ds'].dt.hour < 6]
m = Prophet().fit(df2)
future = m.make_future_dataframe(periods=300, freq='H')
fcst = m.predict(future)
fig = m.plot(fcst)

予測は非常に貧弱のようで、履歴で見られたものよりも未来は遥かに大きな上下動を持ちます。ここでの問題は 1 日の一部 (12a to 6a) のためのデータだけを持つ daily サイクルを時系列に適合させたことです。そのため daily 季節性は 1 日の残りのために制約されずに上手く推定されません。解法は履歴データがある時間帯のためだけに予測を行なうことです。ここでは、それは未来のデータフレームを 12a から 6a の時間に制限することを意味します。

future2 = future.copy()
future2 = future2[future2['ds'].dt.hour < 6]
fcst = m.predict(future2)
fig = m.plot(fcst)

同じ原理はデータに規則的なギャップを持つ他のデータセットに適用されます。例えば、履歴が平日だけを含む場合、予測は平日のためだけに行なわれるべきです、何故ならば weekly 季節性は週末のためには上手く推定されないからです。

 

月次 (= Monthly) データ

Prophet を月次データに適合させるために利用できます。けれども、基礎的なモデルは連続時間です、これはモデルを月次データに適合させて日次予測を求める場合、奇妙な結果を得る可能性があることを意味します。ここでは次の 10 年間の US 小売販売量を予測します :

df = pd.read_csv('../examples/example_retail_sales.csv')
m = Prophet(seasonality_mode='multiplicative').fit(df)
future = m.make_future_dataframe(periods=3652)
fcst = m.predict(future)
fig = m.plot(fcst)

これはデータセットが定期的なギャップを持つ、上記と同じ問題です。yearly 季節性に適合させるとき、それは各月の最初のためのデータだけを持ち残りの日のための季節性成分は識別できずに過剰適合になります。これは季節性の不確実性を見るために MCMC を行なうことにより明瞭に見ることができます :

m = Prophet(seasonality_mode='multiplicative', mcmc_samples=300).fit(df)
fcst = m.predict(future)
fig = m.plot_components(fcst)
WARNING:pystan:481 of 600 iterations saturated the maximum tree depth of 10 (80.2 %)
WARNING:pystan:Run again with max_treedepth larger than 10 to avoid saturation

季節性はデータポイントがある各月の最初では低い不確実性を持ちますが、その間は非常に高い事後分散を持ちます。Prophet を月次データに適合させるとき、月次予測だけを行ないます、これは頻度を make_future_dataframe に渡すことにより成されます :

future = m.make_future_dataframe(periods=120, freq='MS')
fcst = m.predict(future)
fig = m.plot(fcst)

Python では、頻度はここの頻度文字列の pandas リストからのどれでもかまいません : https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#timeseries-offset-aliases 。ここで使用される MS は month-start であることに注意してください、データポイントが各月の最初に配置されることを意味します。

月次データでは、yearly 季節性は二値 extra リグレッサーでもモデル化できます。特に、モデルは is_jan, is_feb 等のような 12 個の extra リグレッサーを使用できます、ここで is_jan は日付が 1 月であれば 1 をそうでなければ 0 です。このアプローチは上で見られた月内の (= within-month) 識別不能性 (= unidentifiability) を回避するでしょう。月次 extra リグレッサーが追加される場合 yearly_seasonality=False を確実に使用してください。

 

集計データによる休日

休日効果は休日が指定された特定の日付に適用されます。weekly or monthly 頻度で集計されるデータでは、データで使用される特定の日付にはまらない休日は無視されます : 例えば、各データポイントが日曜日にある weekly 時系列の月曜日の休日です。モデルに休日効果を含めるには、休日は効果が望まれる履歴データフレームの日付に移動される必要があります。weekly or monthly 集計データでは、多くの休日効果は yearly 季節性で上手く捕捉されますので、追加された休日は時系列を通して異なる週に発生する休日のためだけに必要かもしれないことに注意してください。

 

以上



sktime 0.7 : Welcome to sktime

sktime 0.7 : Welcome to sktime (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/13/2021 (v0.7.0)

* 本ページは、sktime の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス 無料 Web セミナー開催中 人工知能 & ビジネス Web セミナー

◆ クラスキャットは人工知能・テレワークに関する各種サービスを提供しております :

◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
  • ウェビナー運用には弊社製品「ClassCat® Webinar」を利用しています。

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
E-Mail:sales-info@classcat.com  ;  WebSite: https://www.classcat.com/  ;  Facebook

 

sktime 0.7 : Welcome to sktime

時系列による機械学習のための統合フレームワーク

以下を含む、複数の学習問題のための時系列モデルを構築、調整そして検証するための専門的な時系列アルゴリズムと scikit-learn 互換なツールを提供します :

  • 予測、
  • 時系列分類、
  • 時系列回帰

深層学習については、コンパニオン・パッケージ: sktime-dl を参照してください。

 

インストール

パッケージは次を使用して PyPI を通して利用可能です :

pip install sktime

代わりに、conda を通してそれをインストールできます :

conda install -c conda-forge sktime

パッケージは活発に開発されていて幾つかの機能はまだステーブルではないかもしれません。

 

開発バージョン

開発バージョンをインストールするには、advanced インストール手順 を見てください。

 

クイックスタート

予測

from sktime.datasets import load_airline
from sktime.forecasting.base import ForecastingHorizon
from sktime.forecasting.model_selection import temporal_train_test_split
from sktime.forecasting.theta import ThetaForecaster
from sktime.performance_metrics.forecasting import mean_absolute_percentage_error

y = load_airline()
y_train, y_test = temporal_train_test_split(y)
fh = ForecastingHorizon(y_test.index, is_relative=False)
forecaster = ThetaForecaster(sp=12)  # monthly seasonal periodicity
forecaster.fit(y_train)
y_pred = forecaster.predict(fh)
mean_absolute_percentage_error(y_test, y_pred)
>>> 0.08661467738190656

詳細については、予測チュートリアル を確認してください。

 

時系列分類

from sktime.classification.interval_based import TimeSeriesForestClassifier
from sktime.datasets import load_arrow_head
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

X, y = load_arrow_head(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y)
classifier = TimeSeriesForestClassifier()
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
accuracy_score(y_test, y_pred)
>>> 0.8679245283018868

詳細については、時系列分類チュートリアル を確認してください。

 

以上



Prophet 1.0 : 外れ値

Prophet 1.0 : 外れ値 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/13/2021 (1.0)

* 本ページは、Prophet の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

無料 Web セミナー開催中 クラスキャット主催 人工知能 & ビジネス Web セミナー

人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。
スケジュールは弊社 公式 Web サイト でご確認頂けます。
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
  • ウェビナー運用には弊社製品「ClassCat® Webinar」を利用しています。
クラスキャットは人工知能・テレワークに関する各種サービスを提供しております :

人工知能研究開発支援 人工知能研修サービス テレワーク & オンライン授業を支援
PoC(概念実証)を失敗させないための支援 (本支援はセミナーに参加しアンケートに回答した方を対象としています。)

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
E-Mail:sales-info@classcat.com  ;  WebSite: https://www.classcat.com/  ;  Facebook

 

 

Prophet 1.0 : 外れ値

外れ値が Prophet の予測に影響を与えられる 2 つの主要な方法があります。ここでは前からの R ページへのログ記録された Wikipedia アクセスの予測を行ないますが、不良データのブロックを伴います。

df = pd.read_csv('../examples/example_wp_log_R_outliers1.csv')
m = Prophet()
m.fit(df)
future = m.make_future_dataframe(periods=1096)
forecast = m.predict(future)
fig = m.plot(forecast)

トレンド予測は合理的に見えますが、不確定区間は広すぎるようです。Prophet は履歴の外れ値を処理できますが、トレンド変化でそれらを適合させることによってのみです。そして不確実性モデルは同様の大きさの未来のトレンド変化を想定します。

外れ値を扱う最善の方法はそれらを除去することです – Prophet はデータが欠落しても問題ありません。履歴でそれらの値を NA に設定してしかし未来の日付はそのままにする場合、Prophet はそれらの値の予測を与えます。

df.loc[(df['ds'] > '2010-01-01') & (df['ds'] < '2011-01-01'), 'y'] = None
model = Prophet().fit(df)
fig = model.plot(model.predict(future))

上の例では外れ値は不確実性推定を台無しにしましたが主要な予測 yhat には影響を与えませんでした。追加された外れ値をもつこの例でのように、これは常には当てはまりません :

df = pd.read_csv('../examples/example_wp_log_R_outliers2.csv')
m = Prophet()
m.fit(df)
future = m.make_future_dataframe(periods=1096)
forecast = m.predict(future)
fig = m.plot(forecast)

ここでは 2015年6月の極端な外れ値は季節性推定を台無しにしていますので、それらの効果は未来に永遠に響きます。再度、正しいアプローチはそれらを除去することです :

df.loc[(df['ds'] > '2015-06-01') & (df['ds'] < '2015-06-30'), 'y'] = None
m = Prophet().fit(df)
fig = m.plot(m.predict(future))

 

以上



Prophet 1.0 : 不確定区間

Prophet 1.0 : 不確定区間 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/13/2021 (1.0)

* 本ページは、Prophet の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

無料 Web セミナー開催中 クラスキャット主催 人工知能 & ビジネス Web セミナー

人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。
スケジュールは弊社 公式 Web サイト でご確認頂けます。
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
  • ウェビナー運用には弊社製品「ClassCat® Webinar」を利用しています。
クラスキャットは人工知能・テレワークに関する各種サービスを提供しております :

人工知能研究開発支援 人工知能研修サービス テレワーク & オンライン授業を支援
PoC(概念実証)を失敗させないための支援 (本支援はセミナーに参加しアンケートに回答した方を対象としています。)

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
E-Mail:sales-info@classcat.com  ;  WebSite: https://www.classcat.com/  ;  Facebook

 

 

Prophet 1.0 : 不確定区間

デフォルトでは Prophet は予測 yhat のための不確定区間を返します。これらの不確定区間の背後には幾つかの重要な仮定があります。

予測の不確実さには 3 つの源 (= source) があります : トレンドの不確実性、季節性推定の不確実性、そして追加の観測ノイズです。

 

トレンドの不確実さ

予測の不確実性の最大の源は未来のトレンド変化の可能性です。このドキュメントの既に見た時系列は履歴で明確なトレンド変化を示します。Prophet はこれらを検出して適合させることができますが、その先にどのようなトレンド変化を想定するべきでしょうか?確実に知ることは不可能ですから、可能な最も合理的なものを行ない、そして未来は履歴と同様のトレンド変化を見ることを仮定します。特に、未来のトレンド変化の平均頻度と大きさは履歴で観測したものと同じであることを仮定しています。これらのトレンド変化を前方に予測し、そしてそれらの分布を計算することにより不確定区間を取得します。

不確実性の測定の方法の一つの特性は changepoint_prior_scale を増加することにより、レートの高い柔軟性を許容することで予測の不確実性を増加することです。これは、履歴のより多くのレート変化をモデル化すれば、未来でより多く (のレート変化) を想定して、不確定区間を過剰適合の有用な指標にするからです。

不確定区間の幅 (デフォルトで 80%) はパラメータ interval_width を使用して設定できます :

forecast = Prophet(interval_width=0.95).fit(df).predict(future)

再度、これらの区間は未来は過去と同じ頻度と大きさのレート変化を見ることを仮定しています。この仮定は多分真実ではありませんので、これらの不確定区間の正確なカバーを得ることは期待するべきではありません。

 

季節性の不確実性

デフォルトでは Prophet はトレンドと観測ノイズの不確実性だけを返します。季節性の不確実性を得るには、完全なベイジアン・サンプリングを行なわなければなりません。これはパラメータ mcmc.samples (このデフォルトは 0 です) を使用して成されます。ここではクイックスタートからの Peyton Manning データの最初の 6 ヶ月のためにこれを行ないます。

m = Prophet(mcmc_samples=300)
forecast = m.fit(df).predict(future)

これは典型的な MAP 推定を MCMC サンプリングで置き換えます、そしてどれだけの観測があるかに依存して遥かに長い時間がかかる可能性があります – 数秒の代わりに数分を予想します。完全なサンプリングを行なう場合、それらをプロットするとき季節的な成分で不確実性を見ます :

fig = m.plot_components(forecast)

Python でメソッド m.predictive_samples(future) か、R で関数 predictive_samples(m, future) を使用して raw 事後予測サンプルにアクセスできます。

Windows の PyStan では upstream issue があります、これは MCMC サンプリングを極めて遅くします。Windows での MCMC サンプリングのための最善の選択は R を使用するか、あるいは Linux VM で Python を使用することです。

 

以上



Prophet 1.0 : 乗法的季節性

Prophet 1.0 : 乗法的季節性 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/10/2021 (1.0)

* 本ページは、Prophet の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

無料 Web セミナー開催中 クラスキャット主催 人工知能 & ビジネス Web セミナー

人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。
スケジュールは弊社 公式 Web サイト でご確認頂けます。
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
  • ウェビナー運用には弊社製品「ClassCat® Webinar」を利用しています。
クラスキャットは人工知能・テレワークに関する各種サービスを提供しております :

人工知能研究開発支援 人工知能研修サービス テレワーク & オンライン授業を支援
PoC(概念実証)を失敗させないための支援 (本支援はセミナーに参加しアンケートに回答した方を対象としています。)

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
E-Mail:sales-info@classcat.com  ;  WebSite: https://www.classcat.com/  ;  Facebook

 

 

Prophet 1.0 : 乗法的季節性

デフォルトでは Prophet は加法的季節性を適合させます、これは予測を得るために季節性の効果はトレンドに追加されることを意味します。航空旅客数のこの時系列は加法的季節性が機能しない時の例です :

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)

この時系列は明瞭な yearly サイクルを持ちますが、予測の季節性は時系列の最初は大きすぎて最後は小さすぎます。この時系列では、季節性は Prophet により想定される定数の加法的要因ではなく、むしろトレンドとともに成長します。これは乗法的季節性です。

Prophet は入力引数で seasonality_mode=’multiplicative’ を設定することにより乗法的季節性をモデル化することができます :

m = Prophet(seasonality_mode='multiplicative')
m.fit(df)
forecast = m.predict(future)
fig = m.plot(forecast)

今では成分の図は季節性をトレンドのパーセントとして表示します :

fig = m.plot_components(forecast)

seasonality_mode=’multiplicative’ によって、休日効果もまた乗法的にモデル化されます。任意の追加された季節性や追加のリグレッサーはデフォルトで seasonality_mode が設定されているものを使用しますが、季節性やリグレッサーを追加するとき引数として mode=’additive’ or mode=’multiplicative’ を指定することにより override できます。

例えば、このブロックは組込みの季節性を乗法的に設定しますが、加法的四半期の季節性と加法的リグレッサーを含みます :

m = Prophet(seasonality_mode='multiplicative')
m.add_seasonality('quarterly', period=91.25, fourier_order=8, mode='additive')
m.add_regressor('regressor', mode='additive')

加法的そして乗法的追加のリグレッサーは成分プロットの個別のパネルに表示されます。けれども、加法的と乗法的季節性のミックスを持つことは殆どあり得ないので、これは通常はそれが当てはまることを想定する理由がある場合にだけ使用されます。

 

以上



ClassCat® Chatbot

人工知能開発支援
クラスキャットは 人工知能研究開発支援 サービスを提供しています :
  • テクニカルコンサルティングサービス
  • 実証実験 (プロトタイプ構築)
  • アプリケーションへの実装
  • 人工知能研修サービス
◆ お問合せ先 ◆
クラスキャット
セールス・インフォメーション
E-Mail:sales-info@classcat.com