Amazon Forecastでオプションのデータセットを追加して時系列予測を改善する

2019.12.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

DA事業本部の貞松です。そろそろForecastネタも一旦打ち止め感があります。

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

今回は、Forecastで使用するデータセットとして、必須のTARGET_TIME_SERIESだけでなく、オプションのRELATED_TIME_SERIESを追加するケースについて解説していきます。

RELATED_TIME_SERIESは、オプション(任意で使用)のデータセットで、必須のTARGET_TIME_SERIESに含まれていない時系列データが含まれており、これを使用することで予測子の精度が向上する可能性があります。

AWSドキュメント - Amazon Forecast 開発者ガイド - RELATED_TIME_SERIES データセットの使用

使用するデータセットについて

TARGET_TIME_SERIES

必須のデータセットであるTARGET_TIME_SERIES(予測する対象の項目を含む時系列データ)として、「福岡市のインフルエンザ報告数」というオープンデータを使用します。

福岡市 - インフルエンザ報告数

以下の様な形式のデータとなっています。

  • 福岡市の行政区別
  • 週別
  • 定点あたりのインフルエンザ患者報告数

ダウンロードしたデータを以下の様な形式に加工してS3にアップロードしておきます(実際のデータはヘッダなしです)

RELATED_TIME_SERIES

RELATED_TIME_SERIESとして、週別の気温、湿度、雲量の情報を使用します。データは気象庁のダウンロードページから取得します。

気象庁 - 過去の気象データ・ダウンロード

福岡市の行政区別のデータがないため、全ての行政区で同じ気温、湿度、雲量とみなしてデータを加工してS3にアップロードしておきます(実際のデータはヘッダなしです)

ここで注意するポイントはRELATED_TIME_SERIESのデータ期間です。 冒頭で参照している公式のドキュメントにも記載されていますが、RELATED_TIME_SERIESのデータ期間はTARGET_TIME_SERIESのデータ期間+予測の期間が必要になります。

実際に気象情報をRELATED_TIME_SERIESとして使用するケースでは、未来日の気象データについて「平年に比べて同等、低め、高め」等のデータパターンを作成した上で予測に使用することになりそうです。

データセットの作成

データセットグループの作成とTARGET_TIME_SERIESデータセットの作成については割愛します。

RELATED_TIME_SERIESデータセットを作成します。

データの時間刻みはTARGET_TIME_SERIESデータセットに合わせる必要があるので1weekで設定します。

データセットのスキーマは加工済みのデータに合わせて以下の様に定義します。

{
  "Attributes": [
    {
      "AttributeName": "item_id",
      "AttributeType": "string"
    },
    {
      "AttributeName": "timestamp",
      "AttributeType": "timestamp"
    },
    {
      "AttributeName": "temperature",
      "AttributeType": "float"
    },
    {
      "AttributeName": "humidity",
      "AttributeType": "integer"
    },
    {
      "AttributeName": "cloud",
      "AttributeType": "float"
    }
  ]
}

データセットのインポート

RELATED_TIME_SERIESデータセットに加工済みの福岡市の気象データをインポートします。

予測の作成

作成したデータセットを使用して、予測子を作成→予測を作成します。

分位数の設定はデフォルトと同様で0.1, 0.5, 0.9で設定します。

予測の可視化を実行すると以下の様になります。予測期間の最後、12月の第1週でピークの立ち上がりを観測できます。

結果の比較

RELATED_TIME_SERIESを使用する場合としない場合の予測子の評価指標を比較します。

P90(90パーセンタイル)の分位損失以外は軒並み改善していることが観測できます。

まとめ

ForecastでRELATED_TIME_SERIESを使用する場合の手順を解説しつつ、実際の予測結果について検証してみました。

使用するデータ同士の関連性等々によってさらに予測の精度を向上できる可能性があるので、実際の業務等でForecastを使用する場合は、RELATED_TIME_SERIESについても検討する必要がありそうです。