Amazon Forecast を利用して、お店の商品の売り上げ予測をする。

Pocket

はじめに

今回は、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 形式で保存されています。

予測結果の比較

p50 の予測結果をテストデータ と比べてみます。
青がテストデータ、オレンジが予測結果となります。
おおむね、特徴はとらえられているかと思います。

上記グラフにp10、p90 を追加したグラフが以下になります。

Amazon Forecast の料金

以下にAmazon forecast の費用を示します。

今回の検証にかかった金額

おわりに

今回は、Amazon forecast を利用して小売り予測をしてみました。
時間、商品番号、売り上げデータのみで、これだけ予測が得られるのには驚きました。
更にパラメータを追加することで精度が上がるようなので、もう少し複雑なデータセットで試してみてもいいかもしれないです。