Amazon Forecastで作成した予測結果をAmazon Quicksightに接続する

2019.12.11

DA事業本部の貞松です。またしてもForecastに戻ってきました。

本記事は『機械学習 on AWS Advent Calendar 2019』11日目のエントリーです。
クラスメソッド 機械学習 on AWS Advent Calendar 2019 - Qiita
クラスメソッド 機械学習 on AWS Advent Calendar 2019 | シリーズ | Developers.IO

以前、Developers.IO 2019 OKAYAMAにて、Forecastのセッションを担当したのですが、その際にちょっとだけQuicksightに接続して可視化する話をしていました。

Developers.IO 2019 in OKAYAMAでAmazon Forecastについてお話しました #cmdevio

今回はForecastで作成した予測結果のデータをQuicksightに接続して可視化するまでの手順を解説していきます。

Forecast側の処理

Forecastで予測を作成して、予測結果のデータをエクスポートするまでの手順は以下の記事を参考にしてください。

コンソールから操作する場合

Amazon Forecastでお手軽に時系列予測

AWS SDK(Boto3)経由で操作する場合

Amazon ForecastをAWS SDK (Boto3) 経由で操作して時系列予測を作成する

使用した時系列データ

毎度おなじみ、公式のドキュメントでも使用されているUCI Machine Learning リポジトリ(http://archive.ics.uci.edu/ml)で公開されている電力利用量データを用います。
以下のリンクからZIPファイルをダウンロードできます。
electricityusagedata.zip

エクスポートした予測結果データ

Forecastからエクスポートしたデータは任意のS3バケット上のパスに以下のような一式で出力されています。
メタデータ的なファイルも幾つか出力されていますが、実際に予測結果のデータが入っているのは連番付きのCSVファイルです。

各CSVファイルの中身は以下のような構造になっています。

Quicksight側の処理

予測結果データの接続

ここからはQuicksight側の操作により、S3バケット上のCSVファイル一式をQuicksightのデータセットとして使用します。
S3バケット状上の複数ファイルを一括で扱うにはマニフェストファイルを使用します。

マニフェストファイルの作成

マニフェストファイルとして、以下のような形式のJSONファイルを作成します。 一括で扱うファイルのURIリストと取り込みのフォーマット(ファイル形式や区切り文字、ヘッダの有無など)を定義します。

{
  "fileLocations": [
    {
      "URIs": [
        "s3://bucket-name/forecast-export/forecast_export_by_sdk_2019-12-04T08-43-02Z_part0.csv",
        "s3://bucket-name/forecast-export/forecast_export_by_sdk_2019-12-04T08-43-02Z_part1.csv",
        "s3://bucket-name/forecast-export/forecast_export_by_sdk_2019-12-04T08-43-02Z_part2.csv",
        "s3://bucket-name/forecast-export/forecast_export_by_sdk_2019-12-04T08-43-02Z_part3.csv"
      ]
    }
  ],
  "globalUploadSettings": {
    "format": "CSV",
    "delimiter": ",",
    "containsHeader": "true"
  }
}

S3のファイルをQuicksightに接続する

ここからは前述で作成したマニフェストファイルを用いてS3のファイルをQuicksightに接続する手順を説明します。

まず、QuicksightのHomeで New Analysis をクリックします。

次に New data Set をクリックします。

Create a New Dataset の一覧からS3を選択します。

データセット名を入力して、前述で作成したマニフェストファイルを選択します。

データセットの作成が完了したら Vizualize をクリックしてVizualize画面を開きます。

予測結果の可視化

Vizualize画面を操作してグラフを作成します。
また、フィルタを設定して、期間や予測対象を柔軟に絞り込むことができます。

グラフの表示

x軸に date y軸に p10〜p90 をセットします。

データ項目名は date ですが、実際は時間刻みの時系列データなので AggregateHour に設定します。

これでグラフが表示されました。この状態ではフィルタによる絞り込みが掛かっていないので、全ての予測対象の合算値(Sum)が表示されています。

データフィルタ

フィルタを作成するには Filter タブを開いて Create one… をクリックします。

予測対象の絞り込みをしたい場合は item_id を選択します。

フィルタが作成されたら、絞り込みたい項目にチェックを入れて Apply をクリックすることで選択した予測対象のデータに絞り込まれたグラフに更新されます。

まとめ

Forecastからエクスポートされた予測結果のデータをそのままQuicksightに接続して可視化する手順について解説しました。
Forecastの画面で使用できる可視化の機能(Forecast lookup)では、都度表示するデータ期間と予測対象を設定してからグラフを表示するしかありませんが、Quicksightの場合はマニフェストファイルを作成しさえすれば、エクスポートしたデータをそのまま接続して可視化し、柔軟にフィルタリングできる点が非常に便利だと感じました。
今後もForecast単体の機能だけでなく他のサービスと組み合わせた活用や運用について試行錯誤していきたいです。