Azure AutoML ハンズオン -Azureアカウント作成からモデル構築・予測・解釈・出力まで-


はじめに

2020/01/24に日本マイクロソフト本社(品川)で開催されたAutoML ハンズオンにブログ執筆枠で参加しました。
以下、Azureアカウント作成からAutoMLによるモデル構築・推論・解釈までを解説します。
上記connpassのページにハンズオン資料が掲載されていますので、そちらを見ていただくと当日の流れがわかるかと思います。

ちなみに私は普段RやPythonを使って社内データの分析をしています。
今までDatarobotを少し触ったことがある程度で、Auto MLを使い慣れてはいません。
Azureもなんとなくわかる程度で、業務でがっつり使っていますという状態でもありません。
仕事で今後Azureを使っていくようになりそうなので、AzureのAuto MLはどんなもんや、と思いハンズオンに参加しました。

資料など

ハンズオン資料
サンプルコード
(参考)Microsoft機械学習テクノロジー一覧

Azure MLについて

Auto MLという用語自体はAzureに限った話ではなく、広い意味ではベイズ最適化のようなパラメータチューニング自動化のことも指すようです。
マイクロソフトのAuto MLには下図のようなものがあります。

ここでは一番上の「自動機械学習Automated Machine Learning」を扱います。
こちらは現在、表形式のデータにのみ対応しているそうです。

また、機械学習モデルを作成するだけでなく、SHAPに代表されるような「作成したモデルの解釈」をサポートするライブラリもあり、Azure MLと連携することが可能です。
今流行っている「説明可能なAI(XAI)」と呼ばれる領域ですね。

XAIについてはRのimlで複雑なモデルの予測結果を簡潔に説明する -eXplainable AI, XAI-でも解説していますのでもしよければ参考にしていただければと思います。

準備

アカウント作成

Azureのお試しライセンスを無料で作成することができます。
こちらからアカウントを作成することができます。
クレジットカード情報が必要ですがアップグレードしない限り課金されることはなく、1年間有効なクレジット22, 500円分が付いてきます。

ノートブックVMを作るまで

こちらのチュートリアルに沿ってノートブックVMを作成することができます。
VMの作成には5~10分程度かかることがあるので少し待ちます。
ここまでできれば一旦準備完了です。

トレーニングクラスターを作成

下記画像のように、「トレーニングクラスター」タブから「新規作成」をクリックしてクラスターを作成します。

リポジトリのクローン&conda導入

こちらの手順に沿って、githubからリポジトリをクローンしてきます。
3. の手順の前に

cd Automated-ML-Workshop

をする必要があるので注意が必要です。
また、NotebookVMを使用するので5. の手順は今回は不要です。


Auto ML データ読み込み、学習

GUI

画面左の「自動ML」からデータセットのアップロード、学習ができます。


最後に「終了」を押すと、学習が始まります。

Jupyter Notebook

Jupyter Notebookを利用すると、GUIよりも細かい調整ができます。
本ハンズオン用にサンプルが用意されていますので、こちらを実行します。
Jupyter Notebookですので、Pythonで色々チューニングしたりすることができます。

例えば、Automobile-regression-explainer-remoteのNotebookを実行していくと、以下のような学習結果が表示されます。
下記の図は、学習の各段階でどのように誤差が減っていっているかを表しています。

また、Azure上でJupyter Notebookを起動すると従量課金で費用が発生するのですが、ローカルでJupyter Notebookを起動してAzure上のモジュールを呼び出すようにすると、その分の費用を節約することができます。
(トラフィックやストレージ使用料などはかかります)

学習結果の確認

データ読み込みや学習を行うのはGUIでもJupyterでも良いのですが、学習が終わるとGUIから下記のような画面で実行結果を確認することができます。



「データガードレール」タブではクロスバリデーションの詳細や、不均衡データの検出や欠損値の処理結果など、データの特性について記載されています。
多くの場合は読み込ませるデータはサンプルのようにきれいなデータではないと思いますので、必ずチェックするべき欄かなと思います。

また、「詳細」タブから「モデルの詳細の表示」を確認することでもう少し深堀することができます。
今回は分類問題なので、Precision-RecallやROIなどを確認することができます。
Pythonで自力でこれくらいの量のグラフを書こうと思うとひと手間かかりますが、
このレベルのグラフを自動で作ってくれるのはありがたいですね。

モデル解釈

今回はAutomobile-regression-explainer-remoteのNotebookを実行した際のモデル解釈を見ていきます。
ワークブックを実行していくと、3. モデル解釈というところにダッシュボードが表示されます。
ここに色々な視点からモデル解釈をした結果が表示されます。
例えば、Global Importanceを選択すると、モデル全体を線形近似したときの特徴量(Tree Surrogateと呼ばれたりするやつです)の重要度が棒グラフで表示されます。

また、Explanation ExplorationからLocal Feature Importanceを選択すると、個々の予測結果に対してどの特徴量が効いているのかを見ることができます。
ダッシュボード上の予測値をクリックすると対応する特徴量グラフが表示されるのでかなり使いやすいですね。
Jupyter NotebookではGlobal ImportanceもLocal Importanceも表示させることができるのですが、GUIから表示させることができるのは現状Global Importanceのみのようです。
(Local ImportanceのGUI上での表示は今後開発予定らしいです)
GUIからGlobal Importanceを表示させる際もデフォルトで表示できるのはベストスコアのモデルのみで、その他のモデルのGlobal Importanceを表示させる際にはモデルを指定して表示⇒数分待つ必要があります。

モデル解釈の理論的な解説はgithub上にリンクのあるInterpretable Machine Learningに詳しく記載されています。

モデルエクスポート

作成したモデルは、pythonに読み込ませることができる形式(.py, .pkl)で出力することができます。
多くの場合はAuto MLで学習したモデルをそのまま使うというよりは、モデル構築のベースとしてAuto MLを使いたいのではないかと思います。
これをローカルのPythonで読み込ませればAutoMLの学習結果をベースに手作りでモデルを作成することができます。

まとめ

Azure MLでの学習・推論・解釈がGUIやJupyterNotebook経由で簡単に実行・確認できました。
初めはAzure独自の構成・用語には戸惑う面もありましたが、これは慣れの問題かなと思います。
今回は他製品との比較や自分でイチから作ったモデルなどとAzure MLを比較したりはしていないのでAzure MLの予測精度がどのくらいであるかまでは確認できていないのですが、
さっと分析してみたいといったレベルではとても有効な選択肢なのではないかと思います。