Azure Machine LearningのAutoMLを使ってみた

こんにちは。今日は、Azure Machine Learningで提供されているAutoML機能をいくつかのシナリオを想定して使ってみましたので、手順や使ってみて分かったことなどをまとめておこうと思います。

AutoMLどんなのか興味あるけどイメージわかないといった方の助けになれば幸いです。なお、今回は必要な作業、できることの全体感をつかむことを目的としていたため、結果のDetailについてはあまり考察しておりませんが、ご容赦ください・・。

それではまいります。

Azure Machine LearningのAutoMLでできること

詳しくは公式ドキュメントに説明を譲ろうと思いますが、超ざっくりいうとAzure Machine Learningが提供する、データ加工~モデル構築までを自動的に行ってくれる機能です。

自動機械学習 (AutoML) とは

https://docs.microsoft.com/ja-jp/azure/machine-learning/concept-automated-ml

Azure Machie LearningのAutoMLで実行可能なタスクは以下です。

  • 回帰
  • 分類
  • 時系列予測
  • Computer Vision

Computer Visionでは、画像からの物体検出や分類を行うモデルを自動生成できるようです。

Azure Machine Learningのコンピューティング インスタンス/クラスター上だけでなく、ローカルのJupyterなどから呼び出して利用することもできます。

以下で少し触ってみていますが、解釈性の機能も搭載されていますので、今後ビジネスで活用できるシナリオも増えていきそうな気配はあります

AutoMLを使ってみる

以下では、シナリオ別に、公式ドキュメントのチュートリアルに沿ってAutoMLを使ってみたので、その流れや結果についてまとめています。

なお、AutoML機能の一般的な使い方については以下Docに説明があります。

スタジオ UI を使用してコード不要の自動 ML トレーニングを設定する

https://docs.microsoft.com/ja-jp/azure/machine-learning/how-to-use-automated-ml-for-ml-models

Python で AutoML トレーニングを設定する

https://docs.microsoft.com/ja-jp/azure/machine-learning/how-to-configure-auto-train

共通手順:Azure Machine Learningワークスペースの作成

最初に、どのシナリオでも必要になる事前準備として、Machine Learningワークスペースの作成を行います。Azure > リソースの作成から「機械学習 or Machine Learning」と検索すればみつかるはずです。

特に追加の設定は行わず、規定値で作成します。

デプロイは数分以内には完了します。

リソースの概要ブレードからMachine Learning Studioを起動して、このステップは完了です。

シナリオ1:ノーコードAutoMLで分類する

このシナリオは、以下のチュートリアルに従って進めていきます。

https://docs.microsoft.com/ja-jp/azure/machine-learning/tutorial-first-experiment-automated-ml

このシナリオのタスク

クライアントが金融機関の定期預金に申し込むかを予測する(二値分類)

データセットの作成

最初に以下のリンクからデータセットのcsvをローカルにダウンロードしておきます。

bankmarketing_train.csv

ダウンロードしたら、Machine Learning StudioのDatasets > 「Create dataset」に進みます。

チュートリアルに従って、以下のように必要項目を埋めていきます。AutoMLではDataset typeはTabluarしか対応していないようですね。

データはMachieLearningワークスペースリソース作成時に一緒に作ったストレージアカウントに保存します。

デリミタやエンコーディングなどのデータセットの読み込み方もUI上で指定できるようですね。

Schemaでは、読み込む項目とデータ型の設定が行えるようです。理由は不明ですがチュートリアルに従ってday_of_weekの読み込みをオフっておきます。

以上でデータセットの登録が完了します。

AutoMLの構成

続けて、AutoMLの構成です。Machine Learning Studioの「Automated ML」から新規作成に進みます。

Select datasetでは、先ほど登録したbankmarketingデータを指定します。

Configure runでは、AutoMLの実行環境を定義します。具体的には、Experimentを作成するようですね。処理が実行されるコンピュータノードもこの段階で作成できます。

目的変数もここで定義するようです。

Compute Clusterの作成

Compute Clusterの作成では、以下のような設定項目があります。

ノードのスペックに加えて、スケーリングの設定やSSHアクセス可否などの設定も行えるようです。

*このチュートリアルでは、最大ノードを6で設定するよう指示がありますが、確かに最大ノード1で実行すると1時間以上要したので、おとなしく6がよいと思います笑

Select task and settingsでは、モデルのタスクを定義できます。今回は分類(Classification)を指定します。

View additional configuration settingsでは、さらにモデルの評価に用いるメトリックも変更できます(デフォルトはAUC_weighted)。

最後、[Optional] Validate and testでは、モデルのValidation方法の指定が可能です。今回は、K-fold cross validationを指定します。

以上でAutoMLの構成は完了です。すると、自動的に実験が開始されます。

チュートリアルに記載の通り、実験には15分ほどの時間がかかります。実行状況はProperties > Statusから確認できるようですが、”Model training”といった粒度の情報のようです。

学習結果の確認

学習が完了したら、その結果を確認していきます。

実験されたモデルの一覧と精度

“Models”タブから確認できます。今回の場合、最終的に一番精度が高かったのは”VotingEnsamble”であったことが分かりました。

なお、AutoMLで試されるスケーリングパターンについては以下に説明があります。

https://docs.microsoft.com/ja-jp/azure/machine-learning/how-to-configure-auto-features#automatic-featurization

アンサンブルの詳細

VotingEnsambleであれば、Votingに使われたモデルの内容も気になります。ちゃんと確認できました。”View ensemble details”から、アンサンブルに利用されたモデルと、それぞれのモデルのハイパーパラメータなどが確認できるようでした。

今回の場合は、前処理方法を変えたいくつかのXGBoostモデルとLightGBMモデルの結果をVotingしたことが分かります。

学習のメトリクス

Metricsタブでは、学習に関する各種メトリクスをビジュアルで確認することができます。確認できるメトリクスの種類も豊富で便利そうですね。

データの品質

Data guardrailsなるタブで、データの欠損やクラスの偏りなどの状況を知ることができます。

https://docs.microsoft.com/ja-jp/azure/machine-learning/how-to-configure-auto-features#data-guardrails

特徴量生成プロセス

Data transoformationタブなる場所で、特徴量の生成過程がちょっとみれるようでした。詳細はようわからんですね。

AutoMLにおける特徴量生成については、以下に説明がありましたが、規定でいくつかのパターンの特徴量加工が行われるようですね。今回UIからのAutoMLでこのあたりのポリシーがいじれた記憶はないですが、少なくともPython SDKを使う場合だと細かく制御できそうですね。

自動機械学習でのデータの特徴量化

https://docs.microsoft.com/ja-jp/azure/machine-learning/how-to-configure-auto-features#automatic-featurization

規定では以下の加工を自動的に行ってくれるようです。k-meansによるクラスター分類の結果も特徴量に足してくれるのは、助かりますね。

  • 高カーディナリティ/差異なし特徴量の削除
  • 欠損値の補完
  • その他特徴量の生成
  • 変換とエンコード
  • ワードの埋め込み
  • クラスターの距離
変数重要度

Explanationタブから変数重要度やDependency Plotを確認できます。

また、上はグローバルな重要度情報ですが、このAutoMLではローカル(データ毎)の重要度分布も確認することができます。

なお、Explanationは規定では最も精度の高いモデルに対してのみ計算されているようですが、それ以外のモデルに対しても計算して可視化することができます。「Explain model」を選択して、計算のためのクラスターを指定するだけです。

ちなみに、この変数重要度や寄与度は何を使って計算されているか、気になりますよね。

公式Docでは、以下が該当しているようです。

変数重要度

これはDocsを見つけられませんでした・・見つけたら更新します。

解釈性

https://docs.microsoft.com/ja-jp/azure/machine-learning/how-to-machine-learning-interpretability#supported-model-interpretability-techniques

https://docs.microsoft.com/ja-jp/azure/machine-learning/how-to-machine-learning-interpretability-automl

上の結果のExplainerをみると、”mimic explainer”による解釈の説明であることが分かります。mimic explainerはちょっと知らなかったので今後勉強してみます。Python SDKを使うと、SHAP Explainerも指定できるようですが、UI上のAutoMLでは特に指定する場所がなさそうでした・・・プレビューだし今後実装されるのかな・・?(どこかでできたらごめんなさい)

モデルをデプロイする

最後に、モデルのデプロイです。最も精度の高かったVoting Ensembleモデルで、”Deploy to Web App”を選択して、必要情報を設定します。

今回は、Azure Container Instance (ACI)へのデプロイを行います。

Docにも書いていますが、モデルのデプロイには20分ほどかかります。

デプロイした後、実際に予測に活用するステップについては、また記事を分けてまとめていこうと思います。

シナリオ2:ノーコードAutoMLで時系列予測

続けて予測です。シナリオ1と準備手順はほぼ同じですが、以下のチュートリアルに従って進めていきます。シナリオ1と同じ部分についてはどんどん説明を割愛していきます。

https://docs.microsoft.com/ja-jp/azure/machine-learning/tutorial-automated-ml-forecast

このシナリオのタスク

自転車シェアリング サービスのレンタル需要を予測する

データセットの作成

今回のデータは以下からダウンロードします。

bike-no.csv 

Machine Learning Studio > Datasets > create datasetから上のCSVをストレージにアップロードしていきますが、チュートリアルに従ってSchemaでcasual、registered列を非取り込みに設定しておきます。

AutoMLの構成

続けてAutoMLの構成です。先ほどのデータセットを指定し、目的変数(Target column)の設定、クラスターの割り当てを行います。

モデルのタスクは時系列予測(Time series forecasting)を選択します。

View additional configurationでは分類と同様結構大事な設定が集まっています。評価指標、許可/許可しないモデル、時系列ならではのラグ、季節トレンドの考慮有無などが設定できます。

[Optional] Validate and testでは、Validation方法の指定が行えますが、こちらはK-fold & 5分割(規定値)のままとします。

これでAutoMLの構成が完了して、実験が動き始めます。

学習結果の確認

確認できる情報はだいたいシナリオ1と同様なので、割愛します。(間違えて、Extreme Randamized Treeだけ除外するところが、それだけ許可していたので、チュートリアルの結果とは異なりますが・・笑)

モデルのデプロイ

Docにも書いていますが、モデルのデプロイには20分ほどかかります。

こちもデプロイした後、実際に予測に活用するステップについては、また記事を分けてまとめていこうと思います。

シナリオ3:Python+NotebookでAutoML

次は、UI上ノーコードで実現するAutoMLではなく、Pythonコードで実装していく方法についても試してみたいと思います。

こちらは以下のチュートリアルに沿って進めていきます。

チュートリアル: AutoML と Python を使用して回帰モデルをトレーニングする

https://docs.microsoft.com/ja-jp/azure/machine-learning/tutorial-auto-train-models

このシナリオのタスク

NYC タクシーの料金を予測する

Notebookの作成

ローカルのJupyter Notebookでも必要なSDKをインストールすればAutoML機能を使えますが、今回はセットアップの手間が少ないAzure Machie Learning上のNotebookで試してみたいと思います。

これ、練習にめちゃくちゃ便利だと思いましたが、公式Docで紹介されているシナリオについてはサンプルNotebookが用意されています・・・!

Notebook > Samples > regression-automl-nyc-taxi-dataをCloneしてNotebookを作成します。

Computeノードの作成と割り当て

上の状態だけだとNotebookは実行できません。実行するには、演算を行ってくれるコンピューティングノードが必要です。

ノードの作成は、Notebook右上の「+」ボタンから行えます。

Notebookの実行と結果の確認

ノードを作成したらあとは実行していくだけで、とりあえずAutoMLを動かしてみることはできます。

実験がはじまると、複数のモデルを構築している様子もログから分かります。

学習結果は、Notebook上でもみれますし、Machine Learning Studioでもシナリオ1,2と同様に確認することができます。(今回は解釈は飛ばします)

以上、Azure Machine LearningのAutoMLを使って機械学習モデルを自動生成するプロセスをいくつかのシナリオで試してみた結果でした。

興味を持っている方、これから使ってみようとしている方の、雰囲気をつかむお役にたてましたら幸いです。

おしまい

この記事を気に入っていただけたらシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US
Yuu113
初めまして。ゆうたろうと申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。 日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。