Azure Machine Learning Studioで使って理解を深めるResponsible AI (Part 3) – Error Analysis編 – #Azure #AzureMachineLearning

2021.04.19

こんにちは、Mr.Moです。

前回はMicrosoftのResponsible MLのうち、Fairlearn<公平性>について確認していきました。本エントリーでは機械学習モデルをより深く理解するためのエラー分析機能について見ていこうと思います。

Error Analysisとは

image.png

Responsible AIオープンソースツールキットコレクションに追加された最新のエラー分析は、機械学習モデルの動作をより深く理解するためのものです。エラー分析を使用して、エラー率の高いコホートを特定し、これらのエラーの背後にある根本原因を診断します。FairlearnInterpret-Communityと組み合わせることで、責任ある機械学習を構築するための様々な評価操作を行うことができます。

機械学習のモデルは非常に高い精度を実現できてきている一方で、その中身は比例するように複雑化してきています。精度の高い結果が出たものの、その予測結果がどういう理由で導き出されたのか説明・解釈が難しくブラックボックスと化しているのです。このような状態は健全な機械学習の導入の妨げになります、また何か問題が生じた時に原因の追及もままなりません。我々はもっと機械学習のモデルを理解する必要があるのです。

Error Analysisは機械学習モデルの予測動作を深く理解するためのエラー分析を主に提供します。

Error Analysisの機能を見ていく

さっそく機能を見ていきましょう。エラーの分析とはどのような情報を見ることができるのか...仮説や調査が非常に捗りそうな機能が待っている予感がしています!...

ちなみに今回のモデルは、一定の収入以上の方を予測するというモデルです。 まずは実際の機能を見て理解を深めていきましょう。

エラーエクスプローラー

  • Tree map

image.png

ツリー状の構造でエラー(予測結果の誤差)の内容を確認することができます。すると上記のように、特定のグループ(例えば、既婚者&一定の学歴&34歳以上のような)単位でエラーを見ていくことが可能です。

image.png

また、このグループは名前を付けて保存することで、先々の分析で使用することができます。今回は、『Married』と『Not married』というグループを保存しておきます。(なお、左上に出ているエラーの割合を見ると、『既婚』と『未婚』で大きく差が出ているのも分かります)

  • Heat map

image.png

ヒートマップによる可視化も用意されてます。ここではまず教育年数(education-num)を見ており、年数が高くなるとエラーが多くなっているようですが、性別の軸が加わるとまた違った傾向が見えてきそうですね。エラーエクスプローラーではこういった様々な角度から情報を可視化することでエラーの分析をより正確に行うことできます。

データエクスプローラー

image.png

image.png

次にデータエクスプローラーです。エラー分析後に、そもそもエラーが起きている現状はどういったデータからもたらされているのかを確認していくイメージですね。先ほど保存した『Married』と『Not married』グループの切り口でも見ることができます。どうやら特定のデータが非常に少ないことが分かりますね。(正確にこういったデータの偏りがわかると、対応も正確なものを打つことができそうですね。)

image.png

X軸、Y軸の項目を変更しながら、さらに『探索するデータセットのコーホーとの選択』のプルダウンを切り替えて『Married』と『Not married』といったグループおよび全体での傾向の違いなどを簡単に比較できます。

グローバルエクスプローラー

image.png

そしてグローバルエクスプローラーです。モデル全体の予測に影響する特徴量の度合いを可視化します。なお、ここでも保存した『Married』と『Not married』グループの切り口で見ることができます。上記の画像を見るとそれぞれのグループで影響度の強い特徴量が異なっているのが明らかになりましたね。(このように特定のグループに特化した特徴量の影響情報が見れると、現状のモデルの予測結果の理解がますます進みそうですね。説明・解釈する際におおいに役立ちそうです。)

ローカルエクスプローラー

image.png

最後にローカルエクスプローラーですが、上記の画像を見ていただくと分かるとおり特定のデータに対する予測の理解をサポートする機能になります。データを選択し『Inspect』ボタンを押すことで個々の予測の重要度などが把握でき、なぜこの予測結果に至ったのかが説明・解釈しやすくなります。

さらにWhat-if分析の機能もあるので、特徴量の値を変更した時の予測の動きを簡単に観察することが可能です。

実際に使っているところ&コードを見てみる

それではコードを抜粋して見ていきましょう。ちなみに参考にしたサンプルコードはコチラになります。実行環境はAzure Machine Learning StudioのNotebooksを使用しています、使い方などはコチラのエントリーを参考にしてみてください。

まずは必要なモジュールのインストールです。メインとなるのは下記の『raiwidgets』ですね。

%pip install --upgrade interpret-community
%pip install --upgrade raiwidgets

そして結構省略しますが通常通りモデルの学習処理を行い、下記のように機械学習モデルを説明・解釈に特化したオープンソースのInterpretMLのモジュールを使用します。

from interpret_community.common.constants import ShapValuesOutput, ModelTask
# 1. Using SHAP TabularExplainer
model_task = ModelTask.Classification
explainer = MimicExplainer(model, X_train_original, LGBMExplainableModel,
                           augment_data=True, max_num_of_augmentations=10,
                           features=features, classes=classes, model_task=model_task,
                           transformations=feat_pipe)

global_explanation = explainer.explain_global(X_test_original)

そして上記のコードで生成したglobal_explanationオブジェクトと、特徴量作成処理とモデルのpiplineオブジェクトErrorAnalysisDashboardクラスに渡します。あとは必要なデータの情報も追加して実行するだけです。

from sklearn.pipeline import Pipeline
dashboard_pipeline = Pipeline(steps=[('preprocess', feat_pipe), ('model', model)])

from raiwidgets import ErrorAnalysisDashboard

ErrorAnalysisDashboard(global_explanation, dashboard_pipeline, dataset=X_test_original_full,
                       true_y=y_test, categorical_features=categorical_features,
                       true_y_dataset=y_test_full)

これだけで下記のようにエラー分析のダッシュボードが作成されて、様々な観点から調査が可能になります。

error_analisys_1.gif

error_analisys_2.gif

error_analisys_3.gif

まとめ

エラー分析を切り口に、データや予測動作の理解が様々な角度で見ることができる機能でした。Responsible AIの実現にはこういった多くの情報を活用できる仕組みが必要であり、正常なデバック作業を行う上でも不可欠な機能であることを改めて認識しました。機械学習モデルの完全な管理はとても難しい課題です。Microsoftは今、その難しい課題に非常に注力して取り組んでいることが伺えました。この分野においても業界をリードするMicrosoftの今後の動向がますます注目されますね。