はじめてのデータ分析Amazon Forecast 活用術

はじめに

データ分析初心者に向けて、Amazon Forecast を用いたデータ分析を行っていきます。
テーマは、シャンプーの売り上げの需要予測です!

概要 / Amazon Forecastとは?

  1. Amazon Forecast は、AWSのサービスの一つで、機械学習を用いて精度の高い予測をすることができます。
  2. 完全マネージドサービスなので、モデル構築などの機械学習の知識がなくても実装できます。
  3. ノーコードで機械学習ができるので、プログラムをよく知らなくても実装できます。

Amazon Forecastの特徴

  • 過去の何らかの時間単位で整列されたデータ(時系列データ)から価格、PR、経済的業績指標などを利用し、予測をすることができるサービスです。
  • AutoML機能によって予測できるのでモデルを構築するための機械学習の専門知識はいりません。
  • 完全マネージド型なので、サーバーをたてたり、機械学習モデルの構築、トレーニング、デプロイも不要です。
  • 実際に Amazon Forecast を使用した分に対してのみ料金が発生します。
  • 自動的にデータのロードと検査、適切なアルゴリズムの選択、モデルのトレーニング、正確なメトリクスの提供、予測の生成ができます。
  • 予測をコンソールで可視化できます。
  • バッチでエクスポートしたり、API を使用してビジネスアプリケーションに統合ができます。

小売業の活用例

とある企業は、製品の需要・リソースのニーズ・財務業績といった将来のビジネス成果を正確に予測するために、Amazon Forecast を利用して価格、PR、来店者数などと関連する製品の特徴、陳列場所、店舗の場所などのデータを組み合わせ、売上予測モデルを構築しました。
Amazon Forecast を利用することで、プログラムの知識がなくてもノンコードでモデルを構築することができます。
構築した売上予測モデルをもとに、製品の機能や店舗の場所などの、可変的なデータと時系列データとがお互いにどのように影響し合うかまで確認することができるのです。

売上予測をやってみよう

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

ステップ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」(売上数)

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