Azure Machine LearningのAutoMLで時系列予測を試してみた~①モデル作成編~

# Azure Machine LearningのAutoMLで時系列予測を試してみた~①モデル作成編~
皆さん、自動機械学習(AutoML)は活用できていますでしょうか？
Azureでは「回帰」「分類」「時系列予測」「Coumuter Vision(プレビュー)」「自然言語処理(プレビュー)」のAutoMLが利用できます。その中でも「回帰」「分類」「時系列予測」に関しては、WEBからノーコードで簡単に実行することができます。

今回は「時系列予測」をテーマに、どれだけ簡単に機械学習が使えるか、その基本的な使い方に関して解説します。①モデル作成編と[②モデル評価編](https://qiita.com/tmiyata/items/47e9b9f55242c1c548d1)の２回に分けてお届けします。

※本稿は22年6月時点の情報をベースに記載されています。
## 問題設定
データは、kaggleでも公開されている[自転車シェアリングのデータ](https://www.kaggle.com/datasets/marklvl/bike-sharing-dataset)を使います。
こちらのデータセットは、ワシントンDC内の自転車の利用者数(cnt)とその日の気温(temp)、湿度(hum)等が記載されます。
![データ概要.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/9982c338-b5fa-819c-85d9-d49e1377987c.png)
問題設定ですが、今回は2011年1月～2012年11月のデータでモデルの学習を行い、2012年12月の利用者数(cnt)を予測しようと思います。
![目的変数の時系列.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/c1481dab-f1b4-562d-42d6-1690f4d4336f.png)
## モデルの作成
### 環境の準備
まずはAzure Machine Learningのワークスペースを作成しましょう。
![ワークスペース作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/99320bc1-e305-e6b2-1753-68fecca7378b.png)

リソースグループとワークスペース名を設定し、「確認および作成」をクリックしましょう。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/32131a20-5b25-3072-1d2f-e2bb1ee364ca.png" width="60%">

デプロイが完了したら、リソースの概要から「スタジオの起動」をクリックしましょう。
![画像26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/9ffdb8ee-9a48-8aab-9156-7df915355385.png)

Azure Machine Learning Studioの画面にアクセスできることを確認しましょう。
![画像4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/b65344bc-b486-1fe9-c267-f6aa94585dab.png)

### 学習ジョブを作成・実行
「自動ML」->「新規の自動機械学習ジョブ」をクリックしましょう。
![画像5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/014304da-5396-4808-dceb-6eab1c4396d0.png)
#### データアセットの選択
今回はローカルPCのデータセットを使いたいので「作成」->「ローカルファイルから」をクリックしましょう。
![画像6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/cec0a632-0f70-f71d-a4a1-6e53a224d031.png)

|項目  |説明  |
|---|---|
|ローカルファイルから| ローカルPCからファイルをアップロードして利用 |
|データストアから |既存のストレージのデータパスを指定して利用|
|Webファイルから|データのURL(https://~~~/~~~/~~~.csv)から利用|
|Open Datasersから |Azureに用意されたサンプルデータセットを利用|

##### 基本情報
AzureML上で管理されるデータセットの名前を設定しましょう。今回は「bike-sharing」とします。
![画像7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/46452993-a53a-bf50-28d3-8e99c0b1397b.png)
##### データストアとファイルの選択
kaggleからダウンロードしたデータ「day.csv」を指定して、「次へ」をクリックしましょう。
![画像8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/413e0a4a-7a1f-d550-a2c8-57888918e45c.png)

|項目  |説明  |
|---|---|
|データストアの選択または作成| ファイルをアップロードするためのデータストアを「選択」するか「作成」することが可能|
|データセットのファイルの選択| ファイルの参照：１つのファイルを指定可能 <br> フォルダの参照：フォルダ内のデータをまとめて指定可能|
|アップロードパス|アップロードされるファイル名を変更したい場合は入力可能|
|データ検証 |次のステップで実施されるデータ検証(データの区切り記号やエンコード等)をスキップ可能|

##### 設定とプレビュー
今回の場合、プレビューで正しく読み取れていることを確認したので「次へ」をクリックしましょう。
![画像9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/77450456-b21c-21d3-2ee5-fa474c89fd5d.png)

|項目  |説明  |
|---|---|
|ファイル形式| CSVの場合は「区切り」を選択。「Parquet」「テキスト」「Parquet」「JSON行」が選択可能|
|区切り記号|タブやスペース等が選択可能|
|エンコード|UTF-8以外のエンコードも選択可能。プレビューで文字化けする場合はエンコードを変更しましょう|
|列見出し  |複数のファイルからデータセットが構成されている場合のヘッダーの扱いを設定しましょう|
|行のスキップ|データの読み取り時に行をスキップさせたいときは入力しましょう|
|データセットに複数行のデータが含まれています|データのセル内に改行コードが含まれている場合、このオプションをオンにすれば正しく読み取ってくれます。ただしパフォーマンスを著しく下がります|

##### スキーマ
今回は変更の必要がなかったので、「次へ」をクリックしましょう。
![画像10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/368fd9d9-33f5-7934-e2e7-e7ab39394ffc.png)

|項目  |説明  |
|---|---|
|プロパティ| デーセットの変化点等をモニターしたい場合に、日付型の項目をタイムスタンプとして選択しましょう|
|種類|データの型が変更可能|

##### 詳細の確認
「作成」をクリック
![画像12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/11df69d3-fcdb-0fa8-af1c-5a80ff9a7982.png)
|項目  |説明  |
|---|---|
|作成後にこのデータセットのプロファイルを作成する| このオプションをオンにすると、WEBからデータのヒストグラムや箱ひげ図が見れるようになります|

先ほど作成した「bike-sharing」を選択し、「次へ」をクリックしましょう。
![画像13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/6dc5387e-da90-964a-7a67-811720ac7c02.png)

#### ジョブの構成
実験名は「bike-forcasting」、ターゲット列「cnt」にします。
今回は新しくコンピューティングクラスターを作成したいので、「新規」のボタンをクリックしましょう。
![画像15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/7d335eae-e145-0acb-969a-4d1da7c5596b.png)

|項目  |説明  |
|---|---|
|新しい実験名| 実験名(ジョブ名)を入力|
|ターゲット列|目的変数を選択|
|コンピューティングの種類を選択| コンピューティング クラスター：スケール可能なコンピュータリソース群を指します。利用時のみクラスターを立ち上げることが可能です。<br> コンピューティング インスタンス：シングルのコンピュータリソースを指します。利用時・終了時は手動でインスタンスを制御する必要があります。|
|Azure ML コンピューティングクラスターを選択する|既存のコンピュータリソースを利用可能|

##### 仮想マシンの選択
今回はデフォルトの設定で「次へ」をクリックしましょう。
![画像16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/a109e272-e3d0-d41a-482a-9eaa42584225.png)
|項目  |説明  |
|---|---|
|場所| 作成するリソースのリージョンを選択 |
|バーチャルマシン層 |低優先度にすると低コストになりますが、他のジョブが割り込まれる可能性があります |
|仮想マシンの種類  |CPUマシンかGPU対応マシンかを選択 |
|仮想マシンのサイズ  |マシンのスペックを選択 |

##### 設定の構成
コンピューティング名を設定し、残りはデフォルトの設定で「次へ」をクリックしましょう。
![画像18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/be5a6fc7-0b9c-7fdc-4494-91b69ffce1d1.png)

|項目  |説明  |
|---|---|
|コンピューティング名| コンピュータ名を入力|
|最小ノード数|プロビジョニングする最低ノード数を設定。0に設定しておくことで、利用していないときは課金されないようになります |
|最大ノード数|プロビジョニングする最大ノード数を設定。 |
|スケールダウンする前のアイドル時間|スケールダウンする前に一定のバッファー時間を持たせることが可能|
|SSHアクセスを有効にする|オンにするとサーバにSSHでアクセスすることが可能|
|仮想ネットワークの有効化|オンにすると既存の仮想ネットワーク内でジョブを実行することが可能|
|マネージドIDを割り当てる|他リソースへのアクセスを許可する設定が可能|

先ほど作成したコンピューティングクラスターを選択し、「次へ」をクリックしましょう。
![画像19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/cf5ddfec-a09d-3c84-5aa7-92b447774ad0.png)
#### タスクと設定の選択
このセクションではAutoMLのタスクの種類とタスク内容を選択・設定します。
「時系列の予測」を選択し、時刻列にDate型のカラム名「dteday」を選択します。
頻度には予測したい日付の粒度を指定します。今回は日単位で予測したいので「日」を選択します。
予測期間は30日としたいので、「30」を入力します。
次に「追加の構成設定を表示する」をクリックしましょう。

![画像22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/8fa3db08-502c-0ea3-2551-d34d7cd141de.png)

|項目  |説明  |
|---|---|
|時系列 |時系列のタイムスタンプを持つ列を選択|
|時系列ID  |同じタイムスタンプを持つ複数の行を含むデータ内の時系列を一意に識別するために使用される列名|
|頻度  |時系列データの粒度|
|対象の集計関数 |指定した頻度に従って、時系列の対象になる列を集計するために使用される関数|
|予測期間  |予測する期間の数値  |
|ディープラーニングの有効化  |ディープラーニングのモデルを含めるかどうかを選択 |

##### 追加の構成設定
ここでは学習時の評価指標、学習モデルの選択、自動特徴量の設定が可能です。
今回はどのような特徴量が自動で生成されるか確かめるために、「予測ターゲットのラグ」「ターゲットのローリングウィンドウサイズ」を自動検出にします。
「季節と傾向」をオンにし、「季節」を選択し、「保存」をクリックしましょう。
![画像21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/fb7392fc-25be-4136-87a5-20ee531d3392.png)

|項目  |説明  |
|---|---|
|プライマリメトリック |モデルを最適化するために使用されるメトリック(評価指標)。正規化された平均平方二乗誤差(Normalized-RMSE)、R2スコア(決定係数)、正規化された平均絶対誤差(Normalized-MAE)が選択できます|
|最適なモデルの説明|AzureMLでは学習されたモデルのどの特徴量が予測結果に影響したかを確認できる「モデルの説明」機能があります。このオプションをオンにしておくことで、最も精度の良かった学習モデルの「モデルの説明」機能を自動実行してくれます|
|禁止されたモデル|使用されないモデル(ブラックリスト)を設定できます。「サポートされているすべてのモデルを使用する」をオフにすることで、使用するモデル(ホワイトリスト)を設定できます。|
|予測ターゲットのラグ|説明変数に目的変数のN行前の値を組み込むことできます|
|ターゲットのローリングウィンドウサイズ|説明変数に目的変数のN行分の移動平均を組み込むことができます|
|季節と傾向|時系列データのSTL分解(Season-trend Decomposition)された成分を目的変数に組み込むことができます|
|国または地域の祝日|選択した国または地域の祝日情報を説明変数に組み込むことができます|
|トレーニング ジョブ時間(時間単位)|学習にかける最大時間を指定できます。長時間の学習を制御したい場合は短めに設定しましょう|
|メトリック スコアしきい値|メトリックでこのしきい値を超えると、トレーニングジョブが終了します|
|最大同時反復数回数|並列実行する反復処理の最大数です|

##### 特徴量化
学習に使用する特徴量の種類・補完方法を選択します。
ここでは学習に不要な「instant」「yr」「casual」「registered」のチェックは外します。
特徴量の種類を「自動」にすると、カテゴリ変数を数値変数と認識してしまう等がありますので、手動で確実に選択しましょう。
補完に関しては今回欠損値がないため「自動」でおいておきます。データに合わせて適宜補完方法を選択しましょう。
![画像24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/85256a25-b4bd-b74c-20c5-7f4a86e5a1d8.png)

#### 検証とテスト
最後に検証の種類を選択します。
今回はデフォルトの「k分割交差検証」「k=5」で学習を行います。
時系列予測の交差検証方法に関しては、ローリング オリジン クロス検証 (ROCV) を使用しています。詳しくは[こちらのリンク](https://docs.microsoft.com/ja-jp/azure/machine-learning/how-to-auto-train-forecast#training-and-validation-data)をご参照ください。
最後に「終了」をクリックすると学習ジョブが開始されます。
![画像25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/2d0ec9f7-9599-12a8-9771-ddc9aa7ed005.png)
|項目  |説明  |
|---|---|
|検証の種類|k分割交差検証：ローリングオリジンクロス検証を使って、データをずらしながら交差検証を行います。<br>ユーザ検証データ：ユーザが検証データを選択できます|
|クロス検証数|クロス検証の分割数|
|テストデータアセット(プレビュー)|ユーザがテストデータを選択できます|

## まとめ
今回は①モデル作成編のハンズオンの手順と各設定項目の解説を行いました。
②モデル評価編は[こちら](https://qiita.com/tmiyata/items/47e9b9f55242c1c548d1)です！