Technology Topics by Brains

ブレインズテクノロジーの研究開発機関「未来工場」で働くエンジニアが、先端オープン技術、機械学習×データ分析(異常検知、予兆検知)に関する取組みをご紹介します。

Amazon SageMakerのDeepARアルゴリズムで時系列予測

データ分析担当の青木です。

Amazon SageMakerでDeepARというアルゴリズムがリリースされました。今回の記事では下記のページを参考に、Amazon SageMakerのDeepARアルゴリズムを使ってみた内容を書きたいと思います。

aws.amazon.com

Amazon SageMaker

Amazon SageMakerは、機械学習におけるモデルの構築やデプロイ等の処理を容易に行えるようにしたフルマネージドな機械学習サービスです。SageMakerを使うことで、開発者やデータサイエンティスト等の分析者は、機械学習における一連の処理を手軽に素早くできるようになります。

DeepAR

DeepARはRecurrent Neural Networkをベースにした時系列予測の教師ありアルゴリズムで、ARIMAや指数平滑化法などの従来の予測手法に比べて高い精度が期待できる手法です。このDeepARは既存の時系列データがほぼない状況で予測を行うコールドスタート予測や、予測値の信頼区間を算出するなど、実際のビジネスシナリオに即した機能をサポートしています。

SageMakerでDeepARを試す

それではSageMakerでDeepARを試してみたいと思います。

SageMakerでのモデル作成および予測までの流れは、

データ準備 → 学習ジョブの設定・実行 → エンドポイントへのモデルデプロイ→ 予測

といった感じです。今回はコンソール画面から実行する方法を簡単に紹介したいと思います。

データ準備

DeepARでのデータフォーマットは、JSONとParquetの2つのファイルをサポートしています。JSONでの例は

{"start": "2016-01-01 00:00:00", "target": [4.9, 5.3, 3.4, 5.9, ...]}
{"start": "2016-03-01 00:00:00", "target": [2.0, 3.4, 4.5, 3.8, ...]}
{"start": "2016-03-09 00:00:00", "target": [5.6, 9.3, 3.4, 4.7, ...]}

のようになります。

startは開始時刻、targetは実際の数値配列となりますが、各フィールドの詳細はこちらを参照ください。

今回はこちらのサンプルノートブックにあるデータをそのまま使って試してみます。

f:id:brains_aoki:20180112215351p:plain

上記は乱数で発生させた1時間毎のデータで、データ数は400です。前半352個のデータをtrain、後半48個をtestとします。

さらにこのように発生させたデータ系列を200セット用意し、trainデータとtestデータをS3に準備しておきます。

学習ジョブの設定・実行

学習ジョブの設定・実行方法はいくつかありますが、今回はマネージメントコンソールから実行していきます。

まずは、ジョブ名やアルゴリズム、リソース等の設定です。AlgorithmはDeepAR forecastingを選択します。

f:id:brains_aoki:20180112232729p:plain

次にアルゴリズムのハイパーパラメータの設定です。

f:id:brains_aoki:20180112230356p:plain

続いて入力データの設定です。

まずはtrainデータの設定。

f:id:brains_aoki:20180112230516p:plain

続いてtestデータの設定。テストデータの設定は任意です。

f:id:brains_aoki:20180112230636p:plain

以上の設定が完了したらジョブ実行ボタンを押下します。

エンドポイントへのモデルデプロイ

作成したモデルを選択し、エンドポイントを作成してモデルをデプロイします。

f:id:brains_aoki:20180112234119p:plain

予測

notebookから予測を試してみます。

f:id:brains_aoki:20180115012253p:plain

output_typeはquantilesとしてみました。結果がちゃんと得られていますね。

終わりに

Amazon SageMakerでDeepARを試してみましたが、データ準備からDeepARによる予測まで手軽に素早く行うことができました。一連の面倒な処理もこれだけ簡単にできれば、機械学習による検証もより素早く行えるようになりそうだという印象でした。今後はいろいろなデータでこのSageMakerを試して見たいと思います。