AutoML (自動機械学習) による時系列データ予測

Azure Machine Learning の AutoML (自動機械学習) を使用して、時系列予測回帰モデルを学習する手順を紹介します。

AutoML (Automated ML) は、データや基本的な設定をインプットするだけで、Azure Machine Learning 側で特徴量エンジニアリンング、モデル選択、ハイパーパラメータ選択などのプロセスを全自動で行ってくれる機能です。詳しくは以下を参照ください。
[自動機械学習 (AutoML) とは](https://docs.microsoft.com/ja-jp/azure/machine-learning/concept-automated-ml)

以下、本記事で使用するサンプルのコードとデータです。
:robot: [サンプルコード (github)](https://github.com/yahanda/time-series-forecasting-with-auto-ml) 
:beers: [サンプルデータ (トレーニング用) - 1992年～2016年のビール製造時系列データ](https://github.com/Azure/MachineLearningNotebooks/blob/master/how-to-use-azureml/automated-machine-learning/forecasting-beer-remote/Beer_no_valid_split_train.csv)
:beers: [サンプルデータ (テスト用) - 2017年～2018年のビール製造時系列データ](https://github.com/Azure/MachineLearningNotebooks/blob/master/how-to-use-azureml/automated-machine-learning/forecasting-beer-remote/Beer_no_valid_split_test.csv)

以下のトレーニングデータ (1992~2016年) をもとに、2017年以降のビールの需要予測をします。日付と数値データ (売上など) の2つのカラムを持つ CSV データがあれば同様の手順で試すことが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575879/6e8d782a-0791-5c2a-8bbf-475bceab07dc.png)

## Azure Machine Learning の作成
1. [Azure Portal](https://ms.portal.azure.com) へのアクセス
1. 以下の順にメニューを押下
    1. [+ リソースの作成]
    2. [AI + Machine Learning]
    3. [Machine Learning]
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575879/60e0b539-033f-bf2b-ba0d-99a9a2914568.png)
1. 以下の項目を適宜設定
  * ワークスペース名：	任意
  * リソースグループ：	任意
  * 場所：	東日本
  * ワークスペースのエディション：	Enterprise（Auto ML を使用するため、Basic でなく Enterprise を選択します）  
上記設定後、[確認および作成]ボタンによりデプロイを開始
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575879/ed136b65-696f-a4de-ed0c-d44fdca6ffb9.png)

## Azure Machine Learning Studio の起動
MLの画面から、Azure Machine Learning Studio の [今すぐ起動する] をクリック
（あるいは、https://ml.azure.com にアクセスして、Azure Machine Learning studio の画面を直接開きます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575879/189ef16f-8923-c983-5567-b4f66021b572.png)

## コンピューティング インスタンスの作成
1. 統合開発画面 Azure Machine Learning studio の [コンピューティング] を開く
1. [コンピューティング インスタンス] のタブを選択し、[+新規] をクリック
1. 以下の項目を適宜設定
  * コンピューティング名：	任意
  * Virtual machine type：	CPU (Central Processing Unit)
  * 仮想マシンのサイズ：	デフォルト (Standard_DS3_v2) 
	※4 vCPUコアあれば十分です

上記設定後、[作成] ボタンによりデプロイを開始
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575879/21fefd64-da56-ce4c-4a99-8f2cd29e6a01.png)

## トレーニング クラスターの作成
1. 統合開発画面 Azure Machine Learning studio の [コンピューティング] を開く
[Compute clusters] のタブを選択し、[+新規] をクリック
1. 以下の項目を適宜設定
  * コンピューティング名：	任意
  * Virtual machine type：	CPU (Central Processing Unit)
  * 仮想マシンのサイズ：	デフォルト (Standard_DS3_v2) 
	※4 vCPUコアあれば十分です
  * 最小ノード数：	0
  * 最大ノード数：	1	

上記設定後、[作成] ボタンによりデプロイを開始
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575879/c7adb410-5d0e-87e2-856b-d05ac094be6d.png)

## サンプルコード&データのアップロード

1. ml.azure.com から、統合開発画面 Azure Machine Learning studio にアクセスします。
1. [ノートブック] をクリックし、[フォルダーのアップロード] をクリックして、[github](https://github.com/yahanda/time-series-forecasting-with-auto-ml) からダウンロードした zip 解凍後のフォルダーをアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575879/09c06a58-eb2a-c434-9c88-d114bdfaf020.png)

## ノードブックの実行

1. [beer-forcasting-automated-ml.ipynb] をクリックし、[Jupyter] > [Jupyter で編集] をクリック
1. Kernel の設定
  1. Jupyter で利用する Python 環境を指定
  2. [Python 3.6 – AzureML] を選択
1. セルの実行(セルの実行方法は以下 3 通り)
  1. ショートカット：Ctrl +  Enter キー  (推奨)
  1. Cell バーから [Run Cells] を選択
  1. [> Run] を選択

実行している内容の詳細は [ノートブック](https://github.com/yahanda/time-series-forecasting-with-auto-ml/blob/master/beer-forcasting-automated-ml.ipynb) 内の説明を参照ください。

最後まで実行すると、ベストなモデルは平均絶対誤差率 (MAPE) が 6.3% と、非常に高い精度が得られます。

```python
Model MAPE:
0.06370896673493383

Model Accuracy:
0.9362910332650661
```

予測値と実際の値をプロットしたものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575879/be96da86-0030-940b-bb82-9f883d0c8bb8.png)

## (モデルの精度確認)

Azure Machine Learning studio の [自動 ML] のメニューからも、AutoML が試行した各種モデルの情報が GUI 経由で確認可能です。

* 最適なモデルの概要
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575879/5c8bd9f0-260a-70e7-0a6d-3eb70eb94931.png)

* AutoML が試行したモデルの一覧
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575879/560482a4-26c0-85c4-7552-93d80de31801.png)

* モデルの精度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575879/7d4f50f1-7cb5-8186-207a-0040deed5d14.png)

* 説明変数の重要度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575879/d1d4a75a-c8fb-a391-b2c2-ecda1d1ea5f0.png)

## 参考
* [チュートリアル:自動機械学習を使用してタクシー料金を予測する](https://docs.microsoft.com/ja-jp/azure/machine-learning/tutorial-auto-train-models)
* [時系列予測モデルを自動トレーニングする](https://docs.microsoft.com/ja-jp/azure/machine-learning/how-to-auto-train-forecast)