時系列データでAutoAIによる需要予測を行う（supporting feature対応）

## 概要
IBM Cloud Pak for Data as a Service（CP4DaaS）のWatson Machine Learningには自動機械学習のサービスとしてAutoAIがありますが、少し前から時系列データ（timeseries）にも対応していました。しかしながら、列として有効なのは時系列の列とターゲット列の２つだけで、他の列は無視されていました。例えば日毎の売上数データがあったとして、有効なのは日付の列と売上数の列だけで、さらに稼働日フラグの列や気温の列、キャンペーン情報の列などがあってもトレーニング時には考慮されない・・という状況でしたが、2022/7に新たに「Supporting Features」すなわち予測を「支援する特徴量」として考慮することができるようになっています！ので改めて、時系列データをAutoAIを用いてトレーニングし、需要予測を行う手順を記述します。
## 手順
### トレーニング用データの入手
今回は、サンプルデータとしてKaggleにアップされているWalmartのコンペで使われていた[時系列データ](https://www.kaggle.com/c/walmart-recruiting-store-sales-forecasting)を使用しました。このうち使用したのは週ごとの売上数を店舗別、部門別に縦持ちで持っている売上履歴(train.csv)と、各店舗における週ごとの気温、稼働日、値下げ率の１～５(features.csv)の２つのファイルです。

### データ前処理
前述のデータはそのままではAutoAIに食わせられません。そこで、今回はPythonを使ってサクッと加工しました。このあたりはCP4DaaSではJupyter Notebookが使えるWatson Studioのお仕事です。そのコーディングは[こちら](https://github.com/hfujioka/shared/blob/master/walmart%E3%83%87%E3%83%BC%E3%82%BF%E5%89%8D%E5%87%A6%E7%90%86.ipynb)を参照してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745658/220c8e55-eb12-cebd-cb4e-414c4b1fdb09.png)
出来上がったトレーニングデータはこのような構成になっています。ここではシンプルにするために、Storeは１のみに絞りました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745658/d0081a9f-3c27-8886-6994-824fcb533656.png)

### AutoAIでのトレーニング
では、いよいよAutoAIでのトレーニングを行ってみます。
プロジェクトの「新規資産」からAutoAIを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745658/dcfcebff-838e-45fb-d735-8dad783b7254.png)
AutoAIのトレーニングに任意の名前を付けて、加工済みのデータ（train_merged.csv）を指定します。これは、前述のNotebookを使って加工したデータの場合は「プロジェクトから選択」で指定できます。
すると、「時系列予測を作成しますか？」と出るので、はいを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745658/a6858d36-de88-9b80-efa5-0f808b848f20.png)
次に、「予測列」を選択するところで、今回は３つの部門でそれぞれ予測するように設定してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745658/f8781b36-3737-ac1b-eb4f-99bb59dd8d78.png)
次に、「日付/時刻列」にはDate列を指定します。
また、「予測範囲」は8ステップ先としました。このデータの場合は週ごとの間隔になっているので、８週間先までを予測範囲とすることになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745658/a00ed835-d375-6e34-9eb5-91497dd151df.png)
その次に、「エクスペリメント設定」を押すと、詳細な設定項目の画面に遷移します。
ここでは、データソースのビューにて、Store列の選択を外し、TemparetureからIsHolidayの列を選択、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745658/48c7c9bb-59c3-9d67-857e-fcade21a51e7.png)
その下にある週売上_4以降の列のチェックを外します。（4から99まであるので、最初に一番上のチェックボックスで全部の列をまとめて選択を外してからの方が効率的でしょう）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745658/f8abc390-4f89-e8b8-b188-7f729a5c0d43.png)
これは、気温や稼働日、値下げ率のような「Supporting Features」を予測モデルのトレーニング時に加味することを意味しています。ここまでできたら、エクスペリメントの実行を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745658/3355cd37-12b5-f6ee-8ab3-b2e4e1c9861f.png)
ここでは４分で完了しました。
下にスクロールすると、３つのモデルが選定されて、予測パイプラインが生成されていることがわかります。
一番上のもの（下図の場合、パイプライン８）を選択すると、その予測状況が確認できます。
![IBM Cloud Pak for Data - Google Chrome 2022_7_25 16_46_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745658/1fb7cd45-d413-3cf8-0e3e-d877d949bed3.png)
実際の売上データは紫色のラインで、予測モデルによる売上数は緑のラインとして表示されています。点線になっている部分は向こう８週間の予測値です（実績はまだないので、紫色のラインはありません）。
![IBM Cloud Pak for Data - Google Chrome 2022_7_25 16_46_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745658/e90e0d82-bc0e-73a4-e215-f7a9fc3b1252.png)
AutoAIでトレーニングしたモデルは、この後APIとして呼び出しができるようになっていますが、そこは真新しいトピックではないので当記事では割愛します。

## まとめ
時系列データを用いた予測分析を自動化するAutoAIがアップデートされて、より実用的になってきました。ぜひ一度お試しいただければと思います。お試しはライトプランを用いて無償でできますので、その具体的な手順は下記の「始めてみる」記事をご参照ください。

## 参考リンク
[mediumの記事](https://medium.com/@xjingcdl/improve-autoai-time-series-forecasts-with-supporting-features-using-ibm-cloud-pak-for-data-as-a-ff24cc85f6b8)
[CP4D as a Serviceのマニュアル](https://dataplatform.cloud.ibm.com/docs/content/wsj/analyze-data/autoai-timeseries.html?audience=wdp&context=wdp&linkInPage=true&locale=en)
[Cloud Pak for Data as a Serviceを始めてみる](https://qiita.com/Asuka_Saito/items/df3467dc4c9919772c63)