DeepAR 予測アルゴリズム - アマゾン SageMaker

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

DeepAR 予測アルゴリズム

[ Amazon SageMaker DeepAR 予測アルゴリズムは、反復ニューラルネットワーク (RNN) を使用してスカラー (一次元) 時系列を予測するための教師あり学習アルゴリズムです。自己回帰和分移動平均 (ARIMA) や指数平滑法 (ETS) などの古典的な予測方法は、単一のモデルを各時系列に適合させます。その後、そのモデルを使用して時系列から未来を外挿します。

ただし多くのアプリケーションでは、一連の横断的な単位にわたって同様の時系列が多数あります。たとえば、さまざまな商品に対する需要、サーバーの負荷、およびウェブページのリクエストを時系列でグループ化することができます。このタイプのアプリケーションでは、すべての時系列に対して単一のモデルを共同でトレーニングすることでメリットが得られます。 DeepAR このアプローチを採用します。データセットに数百もの関連する時系列が含まれている場合、 DeepAR は、標準的な ARIMA および ETS メソッドより優れています。トレーニングしたモデルを使用して、トレーニングしたモデルと似た新しい時系列の予測を生成することもできます。

_に関するトレーニングインプット DeepAR アルゴリズムは、1つまたは好ましくは、 target 同じプロセスまたは同様のプロセスによって生成された時系列。この入力データセットに基づき、アルゴリズムではこのプロセスの近似値を学習するモデルをトレーニングし、それを使用してターゲットの時系列がどのように進化するかを予測します。各標的時系列は、 cat フィールドと、 dynamic_feat フィールド。 SageMaker は、 DeepAR モデルは、トレーニングデータセットの各ターゲット時系列からランダムにサンプリングする。各トレーニング例は、事前定義された固定長を持つ一対の隣接コンテキストと予測ウィンドウで構成されています。ネットワークがどの程度までの過去を遡れるかを制御するには、context_length ハイパーパラメータを使用します。ネットワークがどの程度までの未来を予測できるかを制御するには、prediction_length ハイパーパラメータを使用します。詳細については、どのように DeepAR アルゴリズムワーク を参照してください。

の入力/出力インタフェース DeepAR アルゴリズム

DeepAR は、2 つのデータチャネルをサポートしています。必須の train チャネルは、トレーニングデータセットを表します。オプションの test チャネルは、アルゴリズムがトレーニング後にモデルの精度を評価するために使用するデータセットを表します。トレーニングデータセットとテストデータセットは JSON Lines 形式で提供できます。ファイルは gzip 形式または Parquet 形式のものを指定できます。

トレーニングデータとテストデータのパスを指定するときには、単一のファイルまたは複数のファイルを含むディレクトリを指定できます。これらのファイルはサブディレクトリに保存されていても構いません。ディレクトリを指定すると、 DeepAR は、ディレクトリ内のすべてのファイルを対応するチャネルの入力として使用します。ただし、ピリオド (.) で始まるファイルと名前付きファイルを除きます。 _成功. これにより、Sparkジョブによって生成された出力フォルダを、 DeepAR トレーニングジョブ。

デフォルトでは、 DeepAR モデルは、ファイル拡張子(.json.json.gz、または .parquet) を指定された入力パスで指定します。パスの末尾がこれらの拡張子以外である場合は、SDK for Python で形式を明示的に指定する必要があります。s3_input クラスの content_type パラメータを使用してください。

入力ファイルのレコードには、以下のフィールドが含まれています。

  • start—形式の文字列 YYYY-MM-DD HH:MM:SS。 開始タイムスタンプにタイムゾーン情報を含めることはできません。

  • target — 時系列を表す浮動小数点値または整数の配列。欠損値は、null リテラル、JSON の "NaN" 文字列、または Parquet の nan 浮動小数点値としてエンコードできます。

  • dynamic_feat (オプション) — カスタムの特徴の時系列 (動的特徴) のベクトルを表す、浮動小数点値または整数の配列の配列。このフィールドを設定した場合は、すべてのレコードに同じ数の内部配列 (同じ数の特徴時系列) が含まれている必要があります。さらに、各内部配列は、関連付けられている target 値と同じ長さでなければなりません。欠損値は特徴ではサポートされません。たとえば、ターゲットの時系列がさまざまな製品の需要を表す場合、関連付けられた dynamic_feat は、プロモーションが特定の商品に適用されたか (1) または適用されていないか (0) を示すブール時系列になります。

    {"start": ..., "target": [1, 5, 10, 2], "dynamic_feat": [[0, 1, 1, 0]]}
  • cat (オプション) — レコードが属するグループをエンコードするために使用できるカテゴリ別特徴の配列。カテゴリ別特徴は、0 から始まる正の整数のシーケンスとしてエンコードする必要があります。たとえば、カテゴリ別ドメイン {R, G, B} は {0, 1, 2} としてエンコードできます。各カテゴリ別ドメインのすべての値が、トレーニングデータセット内で表されている必要があります。それは、 DeepAR アルゴリズムは、トレーニング中に観察されたカテゴリについてのみ予測できます。さらに、各カテゴリ別特徴は、次元が embedding_dimension ハイパーパラメータによって制御される低次元空間に埋め込まれています。詳細については、DeepAR ハイパーパラメータ を参照してください。

JSON ファイルを使用する場合は、ファイルが JSON Lines 形式である必要があります。以下に例を示します。

{"start": "2009-11-01 00:00:00", "target": [4.3, "NaN", 5.1, ...], "cat": [0, 1], "dynamic_feat": [[1.1, 1.2, 0.5, ...]]} {"start": "2012-01-30 00:00:00", "target": [1.0, -5.0, ...], "cat": [2, 3], "dynamic_feat": [[1.1, 2.05, ...]]} {"start": "1999-01-30 00:00:00", "target": [2.0, 1.0], "cat": [1, 4], "dynamic_feat": [[1.3, 0.4]]}

この例では、各時系列に、関連付けられている 2 つのカテゴリ別特徴と 1 つの時系列特徴があります。

Parquet の場合、同じ 3 つのフィールドを列として使用します。さらに、"start"datetime 型として使用できます。Parquet ファイルを圧縮するには、gzip (gzip) または Snappy 圧縮ライブラリ (snappy) を使用します。

アルゴリズムが cat フィールドと dynamic_feat フィールドなしでトレーニングされる場合、「グローバル」モデル、つまり推論時のターゲットの時系列の特定のアイデンティティに依存せず、その形状のみによる条件付きのモデルを学習します。

モデルが各時系列で提供された cat および dynamic_feat の特徴データの条件付きである場合、予測は、対応する cat の特徴を持つ時系列の特性の影響を受ける場合があります。たとえば、target の時系列が衣料品の需要を表す場合は、最初のコンポーネントの品目の種類 (0 = 靴、1 = 衣服など) と、2 番目のコンポーネントの品目の色 (例: 0 = 赤、1 = 青) をエンコードする 2 次元の cat ベクトルを関連付けることができます。サンプルの入力は次のようになります。

{ "start": ..., "target": ..., "cat": [0, 0], ... } # red shoes { "start": ..., "target": ..., "cat": [1, 1], ... } # blue dress

推論時、トレーニングデータで観測された cat の値の組み合わせである、cat の値を持つターゲットの予測をリクエストできます。次に例を示します。

{ "start": ..., "target": ..., "cat": [0, 1], ... } # blue shoes { "start": ..., "target": ..., "cat": [1, 0], ... } # red dress

トレーニングデータには以下のガイドラインが適用されます。

  • 時系列の開始時刻と長さは異なる場合があります。たとえば、マーケティングでは通常、製品がカタログに掲載される日は異なるため、開始日も異なります。ただし、すべてのシリーズにおいて、頻度やカテゴリ別特徴の数、動的特徴の数は同じでなければなりません。

  • トレーニングファイルを、ファイル内の時系列の位置に関してシャッフルします。つまり、時系列はファイル内でランダムな順序で出現します。

  • start フィールドが正しく設定されていることを確認します。アルゴリズムは start タイムスタンプを使用して内部の特徴を取得します。

  • カテゴリ別特徴 (cat) を使用する場合は、すべての時系列には同じ数のカテゴリ別特徴が含まれている必要があります。データセットに cat フィールドが含まれている場合、アルゴリズムはそれを使用してデータセットからグループの基数を抽出します。初期設定では、 cardinality"auto". データセットに cat 使用したくない場合は、 cardinality"". モデルが cat 要素、推論にはそれを含める必要があります。

  • データセットに dynamic_feat フィールドが含まれている場合、アルゴリズムはそれを自動的に使用します。すべての時系列に、同じ数の特徴時系列が含まれている必要があります。各特徴時系列の時間ポイントは、ターゲットの時間ポイントと 1 対 1 で対応します。また、 dynamic_feat フィールドは、 target. データセットに dynamic_feat 使用したくない場合は、num_dynamic_feat"")。モデルが dynamic_feat フィールドを使用してトレーニングされた場合は、推論のためにこのフィールドを提供する必要があります。また、各要素には、指定されたターゲットの長さと prediction_length. つまり、将来、機能値を指定する必要があります。

オプションのテストチャネルデータを指定すると、 DeepAR アルゴリズムは、 違う 精度メトリックス。アルゴリズムは、テストデータの二乗平均平方根誤差 (RMSE) を次のように計算します。


                RMSE 式: Sqrt(1/nT(Sum[i,t](y-hat(i,t)-y(i,t)^2))

yi,t は、時系列の真の値です。 i 当時の t. i,t は平均予測です。合計は、テストセット内の n 個の時系列すべてと、各時系列の最後の T 個の時間ポイントの和です。ここで、T は予測期間に対応します。予測期間の長さを指定するには、prediction_length ハイパーパラメータを設定します。詳細については、DeepAR ハイパーパラメータ を参照してください。

さらにこのアルゴリズムは、重み付けされた分位損失を使用して予測分布の正確性を評価します。[0, 1] の範囲にある変位値の場合、重み付けされた分位損失は次のように定義されます。


                分位損失

qi,t(以下参照) は、モデルが予測する分布の定量値です。損失を計算する分位数を指定するには、test_quantiles ハイパーパラメータを設定します。これらに加えて、規定の分位損失の平均がトレーニングログの一部として報告されます。詳細については、「DeepAR ハイパーパラメータ」を参照してください。

推論として、 DeepAR では、JSON形式と次のフィールドを使用できます。

  • "instances": JSON Lines 形式の時系列を 1 つ以上含む

  • "configuration" の名前: 予測を生成するためのパラメータを含む

詳細については、DeepAR 推論の形式 を参照してください。

を使用するためのベストプラクティス DeepAR アルゴリズム

時系列データを準備するときには、以下のベストプラクティスに従うと、最善の結果を得ることができます。

  • トレーニングとテストのデータセットを分割する場合を除き、トレーニングとテストのため、および推論のためにモデルを呼び出す際には、常に時系列全体を提供します。context_length の設定方法にかかわらず、時系列を分割したり、その一部だけを指定したりしないでください。モデルは、遅延値の特徴には、context_length に設定された値より遡ったデータポイントを使用します。

  • のチューニング時 DeepAR モデルでは、データセットを分割して、トレーニング データセットとテスト データセットを作成できます。典型的な評価では、トレーニングに使用したのと同じ時系列でモデルをテストしますが、トレーニング中に表示される最後の時間ポイントの直後に続く未来の prediction_length 時間ポイントでモデルをテストします。この基準を満たすトレーニングデータセットとテストデータセットを作成するには、テストセットとしてデータセット全体 (使用可能なすべての時系列の全長) を使用し、トレーニング用に各時系列から最後の prediction_length ポイントを削除します。トレーニング中には、モデルはテスト時に評価される時間ポイントのターゲット値を確認しません。テスト中、アルゴリズムはテストセット内の各時系列の最後の prediction_length ポイントを保留し、予測を生成します。その後、保留した値と予測を比較します。より複雑な評価を作成するには、テストセット内で時系列を複数回繰り返しますが、それぞれ異なる終了ポイントで切り捨てます。このアプローチにより、精度メトリクスは、さまざまな時間ポイントからの複数の予測で平均化されます。詳細については、チューニング DeepAR モデル を参照してください。

  • prediction_length に非常に大きい値 (>400) を使用しないでください。このような値を設定すると、モデルの速度が遅くなり、精度が低下します。未来の予測をさらに生成するには、より高い頻度でデータを集約することを検討してください。たとえば、1min ではなく 5min を使用します。

  • ラグが使用されるため、モデルでは、 context_length. したがって、このパラメータを大きな値に設定する必要はありません。prediction_length に使用した値から開始することをお勧めします。

  • 私達は、 DeepAR 使用できる任意の数の時系列をモデル化します。ですが、 DeepAR 単一の時系列で訓練されたモデルは、ARIMA や ETS などの標準的な予測アルゴリズムがうまく機能し、より正確な結果を提供する場合があります。[ DeepAR アルゴリズムは、データセットに数百もの関連する時系列が含まれている場合に、標準メソッドより優れています。現在、 DeepAR すべてのトレーニング タイム シリーズ全体で使用可能な観察の合計数が少なくとも 300 であることが必要です。

のEC2インスタンスの推奨事項 DeepAR アルゴリズム

トレーニングは DeepAR GPU と CPU インスタンスの両方、およびシングルマシンとマルチマシンの両方の設定で利用できます。1 つの CPU インスタンス (ml.c4.2xlarge や ml.c4.4xlarge など) から開始することをお勧めします。必要な場合のみ GPU インスタンスと複数マシンに切り替えます。使用 GPUs および複数のマシンは、大きなモデル(層ごとに多くのセルがあり、多くの層がある)と大きなミニバッチサイズ(たとえば512より大きい)の場合にのみスループットを向上させます。

推論として、 DeepAR は、CPUインスタンスのみをサポートします。

context_lengthprediction_lengthnum_cellsnum_layers、または mini_batch_size に大きな値を指定すると、スモールインスタンスには大きすぎるモデルが作成される可能性があります。この場合は、使用するインスタンスタイプをより大きなものにするか、これらのパラメータの値を小さくします。この問題は、ハイパーパラメータ調整ジョブを実行するときにも頻繁に発生します。その場合は、モデル調整ジョブに十分な大きさのインスタンスタイプを使用し、重要なパラメータの上限値を制限することを検討して、ジョブの失敗を回避してください。

DeepAR サンプルノートブック

トレーニング用の時系列データセットを準備する方法を示すサンプル ノートブックについては、 SageMaker DeepAR アルゴリズムと、推測を実行するためのトレーニング済みモデルの展開方法(を参照) 時系列予測 DeepAR - 合成データ また DeepARの電力データセットデモは、 の高度な機能を示しています。 DeepAR 現実世界のデータセットで。SageMaker でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする手順については、「SageMaker ノートブックインスタンスの使用」を参照してください。ノートブックインスタンスを作成して開いた後、[SageMaker Examples (SageMaker サンプル)] タブを選択して、すべての SageMaker サンプルのリストを表示します。ノートブックを開くには、その [Use (使用)] タブを選択し、[Create copy (コピーを作成)] を選択します。