Amazon Web Services ブログ

Amazon SageMaker でのご利用開始: より正確な時系列予測のための DeepAR アルゴリズム

Amazon SageMaker の最新内蔵アルゴリズムとして、Amazon SageMaker DeepAR をリリースします。DeepAR はポイント予測と確率的予測の両方を生成するために再帰型ニューラルネットワーク (RNN) を使用する時系列予測の教師あり学習アルゴリズムです。私たちは、開発者が Amazon 内でミッションクリティカルな決定を行う、この伸縮自在にスケール可能で、極めて精度の高い予測アルゴリズムを利用できるようになることに大変な期待を寄せています。DeepAR アルゴリズムは他の Amazon SageMaker 内蔵アルゴリズムと同じように使用でき、トレーニングや推測のために、インフラストラクチャをセットアップする必要もありません。

どこでも予測

予測は多くの産業で機械学習を適用するためのスタート地点となっています。より良い製品需要予測を介してサプライチェーンを最適化する、ウェブサーバーのトラフィックを予測することでコンピューターリソースを配分する、あるいは、患者のニーズに合わせて病院の人員配備を行い人命を救うなど、その用途に関係なく、正確な予測への投資が、すぐに投資へと還元されない分野はほとんどありません。

Amazon では、様々な使用分野におけるビジネスの意思決定を下すために予測の手法を用いています。その一例としては、配送センターでの製品および労働力需要の予測が挙げられます。たとえば、プライムデー、ブラックフライデー、サイバーマンデーなどの主要な繁忙期の予測です。また、AWS のコンピューティングおよびストレージ能力が AWS のお客様全体に伸縮自在に行き渡るようにすることもその一例です。Amazon の科学者は Amazon におけるこの種の実世界のビジネス用途を、高い精度で解決するために DeepAR などのアルゴリズムを開発します。

DeepAR アルゴリズムのハイライト

DeepAR 予測アルゴリズムはいわゆる自己回帰和分移動平均 (ARIMA) や指数平滑化 (ES) といった、予測用のオープンソース型ソフトウェアパッケージと商用ソフトウェアパッケージの多くに実装されている従来の予測技法と比較してより高い精度の予測を提供します。DeepAR アルゴリズムはまた、実世界の用途に特によく適した、他の機能およびシナリオをサポートしています。

コールドスタート予測

コールドスタートのシナリオとは、既存の履歴データがほとんど存在しない、またはまったく存在しない時系列の予測を生成する必要があるときに生じます。これは、実際には新商品の投入時、新 AWS リージョンが登録されたときによく起こります。ARIMA または ES といった従来の手法では個々の時系列に対し履歴データのみに依存するため、コールドスタートのケースでは精度が落ちるのが一般的です。スニーカーのような衣料品の予測を例にして考えてみましょう。 DeepAR のようなニューラルネットワークベースのアルゴリズムは、スニーカーが最初に売り出された時点で他のタイプのスニーカーの販売パターンをベースに新商品のスニーカーの一般的な販売動向を学習できます。 トレーニングデータ内で複数の関連時系列から関係を学習することで、DeepAR は既存の代替アルゴリズムより正確な予測を提供できるのです。

確率予測

DeepAR はまた、ポイント予測と (例: 1 週間に売り上げたスニーカーの量が X) および確率予測 (例: 1 週間に売り上げたスニーカーの量が Z の確率で X から Y の間)。後者の予測は、キャパシティ計画など、特定の予測量が可能性の最も高い結果より重要であるビジネス用途に、特に適しています。たとえば、予測に基づいてスニーカーの発注を自動的にかけるシステムで注文数量を生成するとします。それにより、倉庫は X% の可能性で顧客需要を満たすよう在庫を確保できるようになるわけです。これは確率予測を使用すれば予測の X% 変位値で注文数量をベースにすれば簡単に実現できます。 お客様は適切な尤度関数ハイパーパラメタ-を指定し、推量時点での希望する数量を指定することによりこの機能を活用できます。

下のグラフは、Amazon で販売されている商品について DeepAR で生成された需要予測例を使用した、これらの両予測シナリオを示しています。1 つ目の図はコールドスタートシナリオのケースです。このモデルは商品間の情報を共有することから、履歴データが限られたものであっても妥当な予測が得られます。2 つ目と 3 つ目の図は DeepAR がこの設定 (負の二項分布) の適切な尤度関数を使用することで、異なる規模で製品の確率予測を生成できることを示しています。

また、DeepAR アルゴリズムには次に示すようなたくさんの機能も搭載されています。

  • 異なるタイプの時系列のサポート: 実数、回数、ある間隔の値など
  • トレーニング後のバックテストで行うモデル精度の自動評価
  • RNN モデルをベースに長・短期記憶 (LSTM) をトレーニングするために、GPU または CPU ハードウェアのいずれかを使用するように設計
  • 最大で 10 万倍もの時系列で構成されるデータセットに拡大
  • JSON Lines または Parquet 形式のトレーニングデータをサポート

ご利用開始にあたって

DeepAR は確認済み履歴データをベースにモデルをトレーニングします。このデータは予測の実施に使用されます。他の Amazon SageMaker と同様に、トレーニングデータと結果モデルの保管には Amazon Simple Storage Service (Amazon S3) に依存します。Amazon SageMaker はトレーニング中、カスタマーに代わり、自動的に Amazon Elastic Compute Cloud (Amazon EC2) の開始と停止を実行します。モデルのトレーニング完了後は、要求のあったときに予測を計算するエンドポイントへ展開できます。Amazon SageMaker ワークフローの一般的な高水準での概要については、SageMaker のドキュメントをご覧ください。次に、これらのステップを DeepAR で実行する方法について簡単に解説します。

データのフォーマット

最初のステップでは、予測したいプロセスの履歴データを収集し、フォーマットします。DeepAR は JSON Lines (1 行あたり 1 件の JSON オブジェクト) と Parquet の 2 つのデータファイルをサポートします。DeepAR ドキュメントでは両オプションについて詳しく解説しています。

たとえば、次にトレーニングするデータを含む JSON ファイルの例を示します。

 {"start": "2016-01-16", "cat": 1, "target": [4.962, 5.195, 5.157, 5.129, 5.035, ...]}
 {"start": "2016-01-01", "cat": 1, "target": [3.041, 3.190, 3.462, 3.655, 4.114, ...]}
 {"start": "2016-02-03", "cat": 2, "target": [4.133, 4.222, 4.332, 4.216, 4.256, ...]}
 {"start": "2016-02-08", "cat": 2, "target": [2.517, 2.818, 3.043, 3.144, 3.293, ...]}
...

各オブジェクトは次の値で特定の種類の靴の日々の売上 (数千単位) を表すものとします。 "cat": 1 はスニーカーを意味します。 "cat": 2 はスノーブーツを意味します。それぞれの時系列にはそれぞれの開始特定時点があり、データをこの意味で揃える必要がない点に注意してください。
データが正しくフォーマットされたあと、DeepAR がトレーニング中データにアクセスできるよう、データを S3 バケットにプッシュする必要があります。これを実行するには複数の手法があります。低レベルの Python (Boto3) 向け AWS SDK か、AWS コマンドラインインターフェース (CLI) のいずれかです。

トレーニングジョブのセットアップ

お客様はトレーニングジョブを開始するために低レベルの AWS SDK for Python (Boto3) を使用するか、高レベルの Amazon SageMaker Python SDK または AWS マネジメントコンソールを使用できます。この例では、AWS マネジメントコンソールでの実行方法を解説します。

DeepAR トレーニングジョブを開始するには、Amazon SageMaker コンソールのジョブ設定ページのアルゴリズムセクションで [DeepAR forecasting] を選択します。ここでは、お客様はトレーニング中に使用する EC2 インスタンスのタイプや数など、ジョブの他のプロパティもカスタマイズできます。

[DeepAR forecasting] を選択後、カスタマイズ可能なハイパーパラメーターの付いたフォームが表示されます。たとえば、 time_freq パラメーター付きの時系列の時間粒度をカスタマイズしたり、 context_length パラメーター付きで予測を作成するためにモデルが使用するべき過去データの最小量を設定したり、 prediction_length パラメーターを使用して予測を出力する長さを設定したりできます。DeepAR は LSTM 回帰型ニューラルネットワーク (RNN) を使用することで、ネットワークトポロジーとトレーニングプロシージャの他のカスタマイズ可能なハイパーパラメーターが高度なチューニングにも利用できるようにします。使用可能なハイパーパラメーターとその対応範囲の詳しい説明については、DeepAR のドキュメントを参照してください。

ハイパーパラメーターが指定されたあとは、Amazon S3 上にトレーニングデータのロケーションを指定する必要があります。次の 2 つのチャネルを指定できます。1 つは [train] チャネル (必須) でトレーニングデータを含んでおり、もう 1 つは [test] チャネル (オプション) でモデルのパフォーマンスを評価するために使用できます。[test] チャネルが指定されていない場合は、DeepAR が提供データセットでモデルの評価を行わない点に注意してください。

[test] チャネルの使用時、 Amazon SageMaker はトレーニングジョブの終了時、自動的エラーメトリクスをログに記録し、ユーザーが Amazon CloudWatch から確認できるようにします。

最後のステップは Amazon S3 でトレーニング済みモデルを書き込む場所の指定についてです。この指定が完了したら [Create training job] を選択してジョブを開始します。

推量のためエンドポイントにモデルを展開する

トレーニングジョブが完了するとすぐに、Amazon SageMaker コンソールの [Models] ページにモデルが表示されます。 これを選択して [Create endpoint] を選択すると、エンドポイント名と使用するべき EC2 のインスタンスのタイプや数といった構成をカスタマイズできます。

エンドポイントが展開されたあと、JSON オブジェクトとして時系列を提供し、結果として各時系列の予測を取得することで、それに要求を作成できます。これは Amazon SageMaker Python SDK を使用して実行できます。

この例では単一の時系列の要求を示しています。このリクエストはモデルに、トレーニング済みモデルから 50 件の予測サンプルの方法を戻すように要求し、次の結果が戻されました。

{"predictions":[{"mean":[4.0912151337,4.5771856308,4.7047519684, ... ]}]}

DeepAR ドキュメントでは構文と要求に含めることのできる全オプションについて詳しく説明しています。

その他のドキュメント

詳細については DeepAR ドキュメントをご覧ください。また、SageMaker Notebook Instance からのこの新しいアルゴリズムを使用した例については、DeepAR example notebook をご覧ください。DeepAR の背後にある数値演算の詳細については、Amazon の機械学習科学者の学術ペーパーをご覧になるか、RNN 予測手法についての関連資料をご覧ください。


その他の参考資料

Spark in Amazon EMR を使用して Amazon Sagemaker ノートブックを構築する方法についてご覧ください。


今回のブログの投稿者について

ドイツ、ベルリンの Core Machine Learning グループに勤務する Tim Januschowski、Valentin Flunkert、David Salinas、Lorenzo Stella、Jan Gasthaus、Paul Vazquez。彼らは Amazon の様々な予測問題に取り組んでいます。David Arpin は AWS の AI Platforms Selection Leader で、データサイエンスチームと製品管理を統率してきた経歴があります。