Amazon Forecast を使ってお手軽に時系列予測する（GUI編）

# はじめに

Amazon Forecast が利用できるようになったので、使用感を確かめたいと思います。まずは、細かいことは気にせず、通して使うことを目指します。

## 結論
違和感のない、良い感じに予測できました。
![AirPassengers_AutoML.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126852/7a3669d0-f7e6-e150-a650-b31a86be991a.png "AirPassengers 予測結果")
オリジナルデータは、乗法的な季節性がみられます。例えば、源系列に SARIMA を使うと、季節成分がきれいに分離できず、予測に違和感が出ます。予測モデルを自動選択にしましたが、Amazon Forecast の中で上手いことやってくれてるようです。

## [Amazon Forecast](https://aws.amazon.com/jp/forecast/) とは？

aws のサービスのひとつです。
Amazon によると、

> Amazon Forecast は、機械学習を使用して精度の高い予測を行う完全マネージド型のサービスです。

とのことでです。時系列データに対して、お手軽に精度の高い予測結果を得ることができるようです。まあ、どれだけの精度が出せるのかは、検証しないとわかりません。しかしながら、「完全マネージド型のサービス」は、非常に有用だと感じます。

## 対応データ形式
対応しているデータ形式です。

### データの種類
- アイテム毎の時系列データ（週ごとの製品ごとの販売個数など）
- アイテムの属性情報（価格、重さ、製品個別の情報など）
- 時系列の属性情報（休日、特売日など）

### 時間間隔
「分、時、日、月、年」の時間間隔に対応しています。

### データフォーマット
データフォーマットは、CSV です。
予測対象データで、CUSTOM ドメインのデフォルトスキーマを使う場合、以下のカラムが必要です。

- item_id (文字列：製品名等）
- timestamp (タイムスタンプ)
- target_value (浮動小数点）

予測品目が一つの場合、item_id カラムには全て同じ値を入れます。

# 何をしましょうか？

AirPassengers という、1949年から1960年までの飛行機の月次乗客数データを利用します。

## データの準備
- データ取得
  https://github.com/jbrownlee/Datasets/blob/master/airline-passengers.csv

- フォーマットを整える
Excel 等で、以下の形式に整えます。

```
item_id,timestamp,target_value
passengers,1949-01-01 00:00:00,112
passengers,1949-02-01 00:00:00,118
passengers,1949-03-01 00:00:00,132
passengers,1949-04-01 00:00:00,129
passengers,1949-05-01 00:00:00,121
```
- aws console にログインします

- S3 にバケットを作ります

- バケットにファイルをアップロードします

## Amazon Forecast を使う

- サービスサイトにアクセスします
https://ap-northeast-1.console.aws.amazon.com/forecast/home?region=ap-northeast-1#landing

- dataset group を作り、target 時系列データをインポートします
  - dataset group name を指定
  - ドメインを指定 → CUSTOM を指定
  - dataset name を指定
  - データの周期を指定 → Month を指定
  - dataset import name を指定
  - Timestamp format は変更しない
  - IAM Role を作成
  - アクセスする S3 Bucket 名を指定
  - S3 に保存したデータのパスをコピー
  - Data location へデータのパスを指定
  - Start import をクリック → ちょっと待つ


- 学習する
  - Dashboard で train predictor の Start をクリック
  - Predictor name を指定
  - Forecast horizen を指定 → 48 を指定（何期先まで予測するか？最大48らしい）
  - Forecast frequency で予測の周期を指定 → month を指定
  - Algorithm selection を指定 → AutoML を指定
  - Train predict ボタンで学習開始 → 30分ほど待つ


- 予測する
  - Dashboard で Forecast generation の Start をクリック
  - Forecat name を指定
  - Predictor を指定
  - Create a forecast をクリック → しばらく待つ


- 予測結果を確認する
  - Dashboard で Lookup forecast ボタンをクリック
  - forecast に Forecast name を指定
  - Start date に予測開始日を指定 → 1957/01/01
  - End date に予測終了日を指定 → 1964/12/01
  - Value に予測対象 item_id を指定 → passengers を指定
  - Get Forecast ボタンをクリック
  - 下にスクロールし予測結果を確認


- 予測結果データを出力する
  - Dashboard の左側メニューで forecast をクリックする
  - リストの Forecast name をクリック
  - Create forecast export をクリック
  - Export name を指定
  - Generated forecast を指定
  - IAM Role を指定
  - S3 forecast export location を指定
  - Create forecast export をクリック
  - Exports 一覧で Status が Active になるまで待つ


- 予測結果データを取得する
  - 出力先の S3 バケットを開く
  - ファイル part-*****.csv をダウンロードする
  - Excel 等でファイルを開く

## スクリーンショットをいくつか

### 予測結果プレビュー

|![forecast_dashboard.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126852/3d5c2eae-af77-a2ce-99cb-9345299ce133.png)|
|:-:|

### 予測結果

|![dashboard.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126852/e884a3d7-2e28-24c0-7201-7a053b71b787.png)|
|:-:|


# まとめ
厳密にいうと色々と検証する必要はありますが、ちゃんと予測できたようです。他の時系列予測モデルでの結果とも比較したいところですが。

制限事項がありました。48期先までしか予測できないようです。月次データでは、4年先までしか予測できません。
他にも[色々制限](https://docs.aws.amazon.com/ja_jp/forecast/latest/dg/limits.html)が。
本格的にシステムに組み込むには、CLIでゴリゴリ使うのが良さそうです。