IT初心者がAmazon Forecast を使ってシャンプーの売上傾向を予測【誰でも出来る】

はじめに

2020年!AIぽいことしたいなーということでAWSのMachineLearningらしいサービスを使ってみました。
初心者さん、機械学習が詳しくない方でも使えるので、その使い方を分かりやすくご紹介していきます!
※2020年1月15日追記しました。

 

Amazon Forecastとは?

過去の何らかの時間単位で整列されたデータ(時系列データ)から価格、PR、経済的業績指標などを利用し、予測をすることができるサービスです。
AutoML機能によって予測できるのでモデルを構築するための機械学習の専門知識はいりません。

  • 完全マネージド型
  • サーバーをたてたり、機械学習モデルの構築、トレーニング、デプロイも不要
  • 実際に使用した分に対してのみ料金が発生
  • 自動的にデータのロードと検査、適切なアルゴリズムの選択、モデルのトレーニング、正確なメトリクスの提供、予測の生成
  • 予測をコンソールで可視化できる
  • バッチでエクスポートしたり、API を使用してビジネスアプリケーションに統合ができる

小売業の活用例

ある企業は、製品の需要、リソースのニーズ、あるいは財務業績といった将来のビジネス成果を正確に予測するために、
簡単なスプレッドシートから複雑な財務計画ソフトウェアに至るまで、あらゆるツールを活用しています。
機械学習を利用して価格、PR、来店者数などと関連する製品の特徴、陳列場所、店舗の場所などのデータを組み合わせ、それらの間の複雑な関係を判断します。

製品の機能や店舗の場所などの、可変的なデータと時系列データとがお互いにどのように影響し合うかまで確認することができるのです。

やってみる

予測に必要なのは過去のデータと、予測に影響を与える可能性があるデータです。
できるだけ多く、長い期間のデータがあると精度の良い予測ができそうです。
さっそくフリーデータセットを使ってマネージメントコンソールからシャンプーの売上予測をしてもらいました!

ステップ 0:データの準備

使用するデータは、予測したい内容によって中身を整える必要があります。
以下のデータセットドメインがサポートされています。

  • RETAIL – 小売の需要予測。特定の日に商品が受け取った価格やウェブヒット数など、関連するデータセットを Forecast に提供できます。情報が多いほど、予測はより正確になります。
  • INVENTORY_PLANNING – 原材料の需要を予測し、特定の商品の在庫をどれだけ確保するかを決められます。
  • EC2 CAPACITY – Amazon Elastic Compute Cloud (Amazon EC2) キャパシティの予測
  • WORK_FORCE – 従業員の労働力の需要がどのくらいかを予測します。
  • WEB_TRAFFIC – 今後のウェブプロパティまたは一連のウェブプロパティへのウェブトラフィック(情報量)の見積もり
  • METRICS – 収益、売上、キャッシュフローなどの収益予測
  • CUSTOM – その他すべての時系列予測のタイプ

 

今回は売上予測なので、METRICSドメインを使っていきます。
CSVファイルのデータを必須カラムのみ含まれているように、以下の列名を加えます。

  • metric_name (文字列)
  • timestamp (タイムスタンプ) 後ほどのタイムスタンプのフォーマット設定に合わせる必要がある
  • metric_value (浮動小数点整数) Forecast が予測を生成する target フィールド(例:特定の日に生成される収益額)

 

名前のカラムと、日付と秒単位の時間を付け加えました。
metric_name 「shampoo」
timestamp 「1998-01-01 00:00:00」
metric_value 「266.0」(売上数)

 

2020-01-07_16h34_56.png

 

S3にデータをアップロードしていきます。バケットを作成。

2019-12-27_11h05_34.png

 

今回はデフォルトのままで大丈夫です。
バケット名を決めて東京リージョンで設定し、そのまま左下の作成ボタンを押してください。

2019-12-27_11h06_40.png

作ったバケットのリンクを押してCSVデータのアップロードへ

2019-12-27_12h45_18.png

アップロードを押したら

2019-12-27_12h42_41.png

CSVデータを追加したらこちらもデフォルトの設定のままでOKなので左下のアップロードを押していきます。

image.png

追加したデータのチェックマークを押すと右にポップアップが出てきます。
後ほど使いますので、パスをコピーしておきます。

image.png

ステップ 1:トレーニングデータをインポート

Amazon Forecast コンソールからCreate dataset group (データセットグループの作成)を選択。
Dataset group name (データセットグループ名)の名前を入力し、ドロップダウンメニューから使用する予測ドメインを選択。今回使うのはMetrics。
2020-01-06_09h25_12.png

 

次にCreate target time series dataset (ターゲット時系列データセットの作成)
グループの名前を入力します。
Frequency of your data (データの頻度) この設定は、入力時系列データの設定と一致している必要があります。
デフォルトの 1 のままにして、今回のサンプルデータは一日ごとなのでドロップダウンメニューから [day] を選択します。
データスキーマはデータタイプと順序を設定します。事前に準備した時系列データの列に一致するように更新します。

 

2020-01-06_09h58_46.png

 

次はImport target time series data (ターゲット時系列データセットのインポート)ページの Dataset import job details (データセットインポートジョブの詳細) に情報を入力します。

データセットの名前を入力。Timestamp format (タイムスタンプ形式)はデフォルトのままにしておきます。
この形式は、入力時系列データの設定と一致している必要があります。
IAM ロールはデフォルトのままか新しく作成でOK。
Data location (データの場所)はデータの準備でコピーしたS3のパスを貼り付け。

2020-01-06_11h06_26.png

 

Start importを押したら作成が始まりダッシュボードページに変わります。

 

2019-12-27_09h58_08.png

Create pendingからActiveになれば、次のステップのトレーニングのstartができるようになります。

2019-12-27_10h05_17.png

ステップ 2: トレーニングモデルの作成

予測に使うトレーニングモデルをつくります。
予測子の名前を入力します。Forecast horizon で今後予測したい期間を選択。
この数値に、ステップ1で指定したデータ入力頻度 (day) を乗算して、今後予測を実行する期間が決定されます。

 

注:予測できる期間は与えたデータ期間の3分の1の期間でしか指定できません。なので与えたデータと同じ期間分予測しようとするとエラーになります。

 

私自身画像のように90日で指定しましたが、予測できる範囲を超えてしまったのでエラーになりました。
Forecast frequency で予測頻度を指定。デフォルト値の 1 のままでドロップダウンメニューから [Day] を選択。
この設定は、入力時系列データの設定と一致している必要があります。

 

2019-12-27_10h06_44.png

Algorithm selection でアルゴリズムの選択。 Automatic (AutoML) を使います。これで機械学習はおまかせあれ。
他はいじらずに train predictor をクリック。

2019-12-27_10h13_50.png

 

予測子のトレーニングが完了するまで(データのインポート同様Activeになる)時間が結構かかります。30分以上は待ちました。

 

ステップ 3: 予測を作成

Predictor trainingがActiveになったら推論データの作成にかかります。
Create a forecast (予測の作成)ページの Forecast details (予測の詳細)に予測の名前を入力します。
ドロップダウンメニューから、ステップ2のTrain a Predictor で作成した予測子を選択します。
残りの設定はオプションなので、デフォルトのまま create a Forecast を押します。

2019-12-27_13h18_41.png

ステップ 4: 予測を取得

ダッシュボードでForecast generation がActiveになったら予測のルックアップを選択します。

ここでまたエラー。開始日はデータの最終日と被せなければならないようです。
ステップ2のForecast horizon の設定と同じく、2ヶ月半のデータなので予測できる期間も20日間がMAXです。

2019-12-27_14h35_10.png

 

ドロップダウンメニューから、ステップ3の Create a Forecast で作成した予測を選択。
start date-開始日とend date-終了日を指定して、範囲はステップ2のTrain a Predictor で指定した予測期間に合わせます。
Choose which keys (予測キー)の追加を選択。Forecast keyでドロップダウンメニューから [metric_name] を選択します。
Valueで特定したいデータ項目、[shampoo]を入力。

 

2019-12-27_14h43_21.png

 

結果がこちら。真ん中が平均的な予測で、上が上位10%の予測で下が下位10%の予測です。
P50 の予測値が、実際の需要にもっとも近い値であるようです。
上位と下位でかなり差が出ていますが、月半ばと給料日前あたりが売上が下がっていきそうなのが予測できました。
この時期を目処に前もって対策できれば売上を下げるのを抑止できて、
平均的に見ると毎日300は売れそうなので、仕入れの最低数なども考えられそうですね。

 

2019-12-27_14h46_00.png

感想

3パターンのグラフ予測のおかげで、最高売上と最低売上が予測できるので、特定日の対策も考えやすくなり、仕入れの需要数なども簡単に予想できるサービスでした。
データをより詳細になるべく多く用意すること、データの形式と予測する期間や頻度さえ気をつければとても手軽に予測ができたのでぜひとも皆様もお試しください!

他のAWS AI系のサービスの検証なども多数、弊社の技術ブログで記載しているので、ぜひともこちらもご参照ください。
ナレコムレシピ

公式サイトリンク

Amazon Forecast 開発者ガイド
Amazon Forecast