Amazon Forecast を使った予測の手順まとめ

##はじめに
今回は、Amazon Forecast を用いた予測を実施します。手順は以下となります。
AWS 公式の Amazon Forecast の開発ガイドについては、下記リンク参照で。

■リンク
[Amazon Forecast 開発者ガイド](https://docs.aws.amazon.com/ja_jp/forecast/latest/dg/what-is-forecast.html)


■手順

①予測するデータセットの準備(csv を S3 にインポートしておく)
②Amazon Forecast に csv データをインポート
③トレーニングモデルの作成
④予測の実施


##Amazon Forecast とは
■Amazon Forecas の特徴

- 時系列データと、それに関するデータを組みあせて予測を実施
- 一度に複数のアイテムの予測をすることが可能（最大100,000）
- 予測結果は csv にして S3 にエクスポート可能
- 予測をしたい内容に合わせて、以下からドメインを選択して予測を実施

■Amazon Forecast のドメイン一覧

- RETAIL：小売の需要予測
- INVENTORY_PLANNING：サプライチェーンとインベントリの計画
- EC2 CAPACITY：EC2 のキャパシティ予測
- WORK_FORCE：従業員の計画（労働力需要）
- WEB_TRAFFIC：今後のウェブトラフィックの見積もり
- METRICS：収益、およびキャッシュフローなどの予測メトリクス
- CUSTOM：その他すべての時系列予測のタイプ



#予測準備
###csv の準備
今回は予測の実施にあたって、2つの csv を用意しました。

■用意した csv データ

- target_time_series：予測をしたいcsv データ。こちらの csv データだけでも予測の実施は可能
- related_time_series：target_time_series の補助となる csv データ（天候や気温、曜日など説明変数にあたるデータ） 


今回は、RETAIL というドメインを利用して予測を行いたいと思います。ドメインごとに必要な項目が異なりますので、注意しましょう。また、Amazon Forecast で予測できる期間はインポートしたデータの1/3までです。今後１ヶ月の予測をしたい場合は、少なくとも直近3ヶ月分のデータが必要となります。


■RETAILドメインを利用する場合のcsv データセットタイプに必要な項目

- target_time_series データセットに必要な項目
 - item_id (string) ：需要を予測する商品名や商品の ID など
 - timestamp (teimstamp)：時系列
 - demand (float) ：時系列ごとの商品の販売数。Amazon Forecast が予測を生成するターゲットフィールド
 - location(string)：商品の販売先店舗や地域名など（※任意で使用）
 
![2020-07-17_15h37_55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/520ff2a5-d492-f236-fcb3-a1346959c6a5.png)

- related_time_series データセットに必要な項目
 - item_id (string) ：需要を予測する商品名や商品の ID など
 - timestamp (teimstamp)：時系列
 - price (float) ：時系列ごとの商品の価格（※任意で使用）

※related_time_series データセットでは、天候や曜日、気温などの項目も使用可能です。
![2020-07-21_16h08_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/73a4cb1e-0b22-1092-67e7-d26835bd7b4f.png)


##予測実施
###データのインポート
コンソール画面から「Amazon Forecast」を検索します。
データセットグループの作成、時系列データセットの作成、そしてcsv データのインポートを実施します。

■データセットグループの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/cdc99bc2-ffa8-16b7-e361-685e897472d8.png)

- Dataset group name：予測をするこのデータセットグループ名を入力
- Forecasting domain：予測に使用するドメインを選択

■時系列データセットの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/14f3795e-db3e-8b30-8133-c1784e1b1714.png)

- dataset name：時系列データセット名を入力（S3 にインポートした csv と同じの方が分かりやすい）
- Frequency of your data：時系列データセットの時系列（月・日・時）を選択
- Data schema；時系列データのスキーマをJSON 形式で入力

■csv データのインポート
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/04225845-a071-a425-9029-ee506ec75626.png)

- Dataset import name：インポートする csv データ名を推奨
- Timestamp format：csv のtimestamp 形式をこの形式に合わせておくこと
- Data location：csv データの置いてあるパス



###データのトレーニング
無事にインポートが完了したら、次はインポートしたデータを用いてモデルのトレーニングを実施します。
ここでは、以下の項目を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/a0270c40-e101-9a77-2ba3-aa44d4ddc71e.png)

- Predictor name ：予測モデルの名前（任意）
- Forecast horizon：予測をしたい期間決め（期間は最大で csv データの1/3まで）
- Forecasat frequency：csv データと同じ時系列を選択
- Algorithm selection：利用するアルゴリズムを選択（特に希望が無ければ「Automatic」を選択）
- Country for Holidays：休日・祝日情報を追加する場合、こちらを使用(「Japan」を検索して使用) 

夜速のトレーニグの完了には、データにもよりますが大体30分以上はかかります。
###予測の実施
それでは、いよいよ予測を実行してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/d448ccb5-38e7-45ac-4d10-3dd87ddf36d6.png)

- Forecast name：予測を実行して出てくる予測結果モデルの名前
- Predictor：予測の実施にあたり利用する予測モデル（先程の学習モデルを選択すればOK）

上記の2つを入力したら、「Create forecast」を選択し、暫く待ちましょう。
これで、完了です。
###Forecast lookup の使用
Amazon Forecast lookup で、Amazon Forecast のコンソール画面上で予測結果を可視化することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/266386fd-7565-cf9e-d90c-73f81f161af4.png)

- Forecast：可視化したい予測結果モデルを選択
- Start date：可視化したい最初の月日を選択（インポートした csv データの最後の時系列を選択）
- End date：可視化したい最終の月日を選択（選択できる月日はインポートした csv データの1/3の期間まで）
- Value：可視化したいアイテム名を選択


可視化結果は、図のように3つの予測モデルが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/2b8686b1-0127-0c95-3051-a387d4d80b48.png)

- P90 forecast：予測値の上限
- P50 forecast：一般的に言う予測値
- P10 forecast：予測値の下限


##その他
###S3 へのエクスポート
Amazon Forecast で行った予測は、 csv で S3 にエクスポートすることが可能です。
以下が手順です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/ba3e3e76-cd3d-1aee-38fa-7f798be4887c.png)
■手順
①ダッシュボードの左の「Forecasts」を選択
②作成した予測モデルを選択
③「Create forecast export」を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/5b82286b-e992-3ab0-741a-33e9bb94d992.png)
■手順
④以下の項目を入力、選択したら S3 へのエクスポートを実行

- Export name：S3 へ送る csv の名前を決める
- Generated forecast：S3へ送る 予測結果を選択
- S3 forecast export location：csv を送る先の S3 のパスを入力

S3 へのエクスポートが完了するのには10数分かかります。
###料金体系について
Amazon Forecast は従量課金制です。課金対象は以下の3つです。

■課金対象

- 予測をしたいアイテムの総数×3パターンの予測モデル
- csv データの重さ
- モデルのトレーニングに費やした時間


##おわりに
Amaozn Forecast を用いた予測は以上となります。
詳細な内容については、AWS公式を参照ください。