Amazon Forecastとは
- Amazon Forecastは、機械学習を使用して精度の高い予測を行う完全マネージド型のサービス
検証データ内容
- 日別の予約数(っぽいもの)を記録したCSVを作成し、Forecastに読み込ませて予測を行ってみる
- 作成したCSVはS3においておく
- 項目は店舗ID、予約日付、予約数
- 2020/11/1から2020/1/31までの3ヶ月分のデータ(92行)
- 土日祝日は予約数多め、平日だと比較的火曜日が多い。予約数は増加傾向を示している。というデータとなっている
- このデータを使って2月の予約数の予測を算出してもらおう
検証データ項目
- item_id
- Forecastで必須の項目
- ディメンション(○○別に見るといった分析軸を示すもの
- 店舗IDを当てはめる
- timestamp
- Forecastで必須の項目
- 時間軸を示す
- yyyy-MM-dd(日単位)
- 予約日付を当てはめる
- target_value
- Forecastで必須の項目
- 予約数を当てはめる
AWSマネジメントコンソールからForecastを試す
操作方法
- Amazon Forecastを開く
- 「View dataset groups」ボタンをクリック
- 「Create dataset group」ボタンをクリック
- 以下項目を入力
- Dataset group name
- 英数字&アンダースコアで適当に入力する(例:forecast_sample)
- Forecasting domain
- 予測する種類の設定
- Custom Domainを選択する(RETAIL Domainでも良かったかもしれない)
- Dataset group name
- 「NEXT」ボタンをクリックする
- 以下項目を入力
- Dataset name
- 英数字&アンダースコアで適当に入力する(例:forecast_sample_dataset)
- Frequency of your data
- 読み込ませるデータの日付の単位
- 分、時、日、週、月、年から選択
- 今回は日単位で作成
- Schema Builder
- item_id
- timestamp
- yyyy-MM-dd HH:mm:ss / yyyy-MM-ddからフォーマットを選択(yyyy/MM/ddはないので、CSVの形式に注意)
- target_value
- ちなみに読み込ませられるデータ型(Attribute Type)は以下が用意されている
- string(文字列)
- float(浮動小数点)
- integer(整数)
- geolocation(地理データ。USとヨーロッパのみ)
- Dataset import name
- 英数字&アンダースコアで適当に入力する(例:forecast_sample_dataset_import)
- Select time zone
- timestampがUTC時刻だったら選択すると良いのかも(未検証)
- Do not use time zoneを選択
- Data location
- CSVデータをおいたS3を選択
- IAM role
- CSVを読み込めるIAMロールを選択。なかったらこの場で自動生成してもらえる
- Dataset name
- 「Start Import」を選択
- 15分ほど待ち
- Dashboardが表示されたら、Predictor trainingの「Start」ボタンをクリックして学習の設定を行う
- 必要ならば、その前にItem metadata dataやRelated time series dataをインポートしておくこともできる(今回は何も入れてない)
- item metadata data
- item_idに指定した値の属性情報を読み込ませることができる
- item_idを店舗IDにするならば、店舗の規模とか、取り扱い商品とか?
- Related time series data
- 時系列の属性情報を読み込ませることができる
- 休日、特売日とか
- item metadata data
- 以下項目を入力
- Predictor name
- 英数字&アンダースコアで適当に入力する(例:forecast_sample_predictor)
- Forecast horizon
- 何行先まで予測するか
- 入力データの1/3まで選択可能(Max:500)
- 今回2月の予約数を予測したいので、28を設定
- Forecast frequency
- 日単位なのでdayを選択
- Algorithm selection
- 使用するアルゴリズムを選択する
- とりあえずAutomaticにすればおすすめで予測してもらえる
- Manualの場合は以下から選択
- CNN-QR
- DeepAR+
- Prophet
- NPTS
- ARIMA
- ETS
- Forecast dimensions
- 店舗別に予測を出したいならitem_idを選択する?
- Number of backtest windows、Backtest window offset
- 学習する際にテストデータを分割するかどうかみたいな
- よくわからんのでデフォルトのままで
- Forecast type
- よくわからないのでデフォで
- advanced configuration
- 高度な設定。無視で
- Weather
- AWSが持ってる天気情報(2週間分)を学習に含めるか
- geolocation型をデータに持っている場合に使用可能(つまりUSかヨーロッパ限定の機能)
- Holiday
- AWSが持ってる祝日情報を学習に含めるか
- 日本も選択できるのでOnにしてみる
- Predictor name
- 「Train predictor」ボタンをクリックして学習開始
- 2時間くらい待つ
- Dashboardに戻って、Forecast generationの「Start」をクリックして予測の設定を行う
- 以下項目を入力
- Forecast name
- 英数字&アンダースコアで適当に入力する(例:forecast_sample_forecast)
- Predictor
- 先程作成したPredictorを選択
- Forecast types
- 空欄で
- Forecast name
- 「Create new forecast」ボタンをクリックして予測開始
- 30分くらい待つ
- 「Lookup forecast」ボタンをクリックする
- 以下項目を入力
- Forecast
- 先程作成したForecastを選択
- Start date
- 結果グラフの開始日付
- 予測したデータ行分だけ過去日付を指定可能
- 今回は予測開始日付の2/1から28日前までを指定可能(つまり1月4日)
- End date
- 結果グラフの終了日付
- 2/28まで予測するのでこれを指定
- Choose the keys you want to use to filter your forecasts
- 店舗別に予測するようにしたので、表示する店舗IDを入力
- Forecast
- 「Get Forecast」ボタンをクリックして結果を表示
結果考察
- 土日の予約数が多いってのは反映されている
- 平日は火曜日が多いってのも反映されている
- だんだん予約数が増加傾向にあることもでている
- 祝日が多いってのは無視されている(2/11が少ない予測になっている)
所感
- 日時の単位が分、時、日、週単位なので、30分単位での予測とかは用意されていない
- 分単位を選択してがんばればできなかないが、それだと最大500行(8時間ちょい)までの予測しかできない
- 祝日多いのが反映できていないのはAWSが用意しているHolidayデータがおかしいのでは?
- 読み込ませているデータは↓みたい
- http://jollyday.sourceforge.net/data/jp.html
- 振替休日考慮されてないじゃん!
- 93行ぽっちのデータでもデータインポート>学習>予測で3時間くらいかかる。実データでやろうとするならば、読み込ませるデータ数でどれくらい時間がかかるか注意する