はじめに
今回は、kaggle の Store Item Demand Forecasting Challenge のデータを使用して、お店の商品の売り上げ予測を Amazon Forecast で行います。
- Store Item Demand Forecasting Challenge
https://www.kaggle.com/c/demand-forecasting-kernels-only
このデータセットには2013/1/1~2017/12/31日までの毎日の売り上げが、各店の各商品ごとに用意されています。
店舗は10店、商品は50品用意されています。
以下、データの初め5行になります。
Amazon Forecast とは
Amazon Forecast とは、機械学習を使用して精度の高い予測を行うフルマネージド型のサービスで、履歴のあるデータセットであれば、どのような時系列データからでも予測結果を生成できます。
今回利用するデータ
今回はStore Item Demand Forecasting Challengeの train データから以下のデータを抽出し、学習テストデータとして利用します。
学習データ
- store 1 の item 1
- 2013/1/1~2017/10/31 までの毎日の売り上げ
テストデータ
- store 1 の item 1
- 2017/11/1~2017/12/31 までの毎日の売り上げ
実践
- awsコンソールから forecast を開きます。

データセットグループの作成
- Create dataset group をクリックし、データセットグループの作成をします。

- データセットグループの設定を行います。
- Dataset group name : 任意のデータセットグループ名を入力します。
- Forecasting domain : データセットドメインの設定。今回は小売り予測のため Retail を選択します。
データセットドメインの詳細はこちらを参照してください。

データセットの設定
- データセットの設定を行います。
- Dataset name : 任意のデータセット名を入力します。
- Frequency of your data : 時系列データの区切りを選択します。今回のデータは日にち区切りなので 1day を選択します。

- Data schema : データの保存形式に合わせてスキーマを設定。データドメインごとに必要な情報が変わるので、先ほどのドメインからデータセットタイプを参照してください。

データセットのインポート設定
- データセットのインポート設定を行います。
- Dataset import name : データセットインポート時の名前を入力します。
- Timestamp format : 入力データに合わせてタイムスタンプを設定します。
- IAM Role : 読み込みを行う、対象のs3バケットへの権限を付与したIAMロールを指定します。
- Data location : s3 に保存している、入力ファイル(csv)パスを入力します。

予測子の作成
- Target time series data のステータスが Activeになったら、Predictor training の Start をクリックし、予測子の作成をします。
※他にも、item metadata data や Related time series data といったデータをインポートできます。データセットドメインごとに、各データに推奨される項目があり、推奨項目を入力することで精度があがるとされています。今回はインポートしません。

- 予測子の設定を行います。
- Predictor name : 予測に付ける名前を入力します。
- Forecast horizon : どれだけ先まで予測を行うか設定します。
- Forecast frequency : 予測の区切りを設定します。
- Algorithm selection :アルゴリズムの設定をします。今回は、最適な手法を自動で見つけてくれるAutomaticを選択します。
- Forecast dimentions : 通常予測はitem_id毎に行われますが、必須ではないパラメータを入力として与えていた場合、そちらを対象に予測を行えます。
- Country for holidays : 国ごとの祝日を考慮するように設定できます。
- Number of backtest windows: 学習時の検証用データをいくつ切り出すか設定します。
- Backtest window offset : 切り出す検証用データのデータ数を設定します。


- Predictor training が Active になったら、予測子の作成が完了です。

- サイドバーからPredictor をクリックし、予測子の詳細を確認できます。

- 予測子を開くと、AutoMLで選ばれたアルゴリズムや、精度の指標となるwQLやRMSEなどを確認できます。
- 結果を確認したら、右上の Create a forecast をクリックし、予測を行います。
予測
- 予測の設定を行います。
- Forecast name : 予測の名前を入力します。
- Predictor : 利用する予測子を選択します。

予測結果の可視化
- 予測が完了すたら、Dash board から Lookup forecast をクリックします。

- 予測の表示設定を行います。
- Forecast : 利用する予測を指定します。
- Start date : 表示するデータの開始時間を設定します。
- End date : 表示するデータの終了時間を設定します。
- Choose the keys you want to use to filter your forecasts : 予測結果を表示する item を選択します。

- 実行すると以下のように設定した範囲のデータが表示されます。
左側の黒いグラフが学習データ、右の色つきのグラフが予測結果になります。
予測が正確か確認するために、予測結果をダウンロードし、テストデータと比べます。

予測結果のエクスポート
- サイドバーから Forecasts を選択し、作成した予測をクリックします。

- 右下の Create forecast export をクリックします。

- エクスポート設定を行います。
- Export name : エクスポートの名前を入力します。
- Generated forecast : エクスポートする予測を選択します。
- IAM Role : 対象のS3への書き込み権限のあるIAMロールを設定します。
- S3 forecast export location : 予測結果を保存する s3 パスを入力します。

- export が Active になったらエクスポート完了です。

- 対象の s3 パスに無名のフォルダが作成され、フォルダ内に予測結果が csv 形式で保存されています。

予測結果の比較
Amazon Forecast の料金
以下にAmazon forecast の費用を示します。
項目 | 料金 |
---|---|
予測作成 | 予測1000個あたり0.6$ |
アップロードする学習データサイズ | 1GBあたり0.088$ |
トレーニング時間 | トレーニング1時間につき0.24$ |
- 今回の検証にかかった金額
項目 | 値 | 料金 |
---|---|---|
予測作成数 | 1つ*3(分位点が3つあるため) | 0.6$ |
アップロードした学習データサイズ | 30KB | 0.0000072$ |
トレーニング時間 | 約30分 | 0.12$ |
合計 | 0.1800072$ |
おわりに
今回は、Amazon forecast を利用して小売り予測をしてみました。
時間、商品番号、売り上げデータのみで、これだけ予測が得られるのには驚きました。
更にパラメータを追加することで精度が上がるようなので、もう少し複雑なデータセットで試してみてもいいかもしれないです。