Amazon SageMakerで実現する機械学習モデルの説明可能性可視化とバイアス監視

初版: 2021年4月27日
著者: 橋本恭佑、Nguyen Ba Hung 

## はじめに
機械学習モデルをビジネスへ適用するSEを対象として、Amazon SageMakerによって利用可能になる、機械学習モデル及びデータの傾向の監視技術を解説しています。今回の投稿では[米国の電話会社の顧客解約予測](https://www.kaggle.com/mnassrib/telecom-churn-datasets)を題材として、説明可能性の可視化とバイアス監視を実機検証した結果を紹介します。 

## 投稿一覧
* [Amazon SageMakerで実現する機械学習モデルの監視技術](https://qiita.com/kyosuke_hashimoto/items/eb304727277c1268a991)
* [Amazon SageMakerで実現する機械学習モデルの精度可視化とデータ品質監視](https://qiita.com/kyosuke_hashimoto/items/87d316580723b28d86d7)
* Amazon SageMakerで実現する機械学習モデルの説明可能性可視化とバイアス監視・・・今回の投稿

## データと実験([以前の投稿](https://qiita.com/kyosuke_hashimoto/items/87d316580723b28d86d7)とほぼ同一の内容です)

### 顧客解約予測データセット
今回は、Kaggleで公開されている、米国の携帯電話会社の顧客解約予測データセットを用いて検証を行います。 この顧客解約予測データセットは、1つの目的変数と69の説明変数を持っています。説明変数には、顧客の所在地(文字列だが、One-hot encodingするため2値)、毎日の時間帯毎の通話量(数値)、国際通話プランの加入有無(2値)や通話時間(数値)を含みます。
本実験ではデータセットを学習用（2333レコード）、検証用（665レコード）と推論用（333レコード）の3つのデータセットに分割し、推論用のデータセットを説明変数と目的変数に切り離して、説明変数を推論用データ、目的変数を正解ラベルとして利用します。また分割の際は学習用のデータセットと推論用のデータセットの両方に14%ずつ解約する顧客のデータがあるようにデータセットを分けました。

ところで、元のデータセットはドリフトやバイアスを引き起こすデータを含みません。今回の実験では顧客の国際電話プランへの加入有無に着目し、バイアスがないことを確認できるか検証しました。

### 機械学習モデルの監視システム

今回はAWSの組み込みExtreme Gradient Boosting アルゴリズムを利用して学習した機械学習モデルをデプロイします。そして、この機械学習モデルに検証用データを送信して、モデルを監視します。今回実験に用いる機械学習モデルの監視システムの構成を図1に示します。図1の薄い赤で囲った範囲をSageMaker Studioを用いて起動・操作・閲覧できます。Model Monitor, Clarify, SageMaker Studioの紹介は[以前の投稿](https://qiita.com/kyosuke_hashimoto/items/eb304727277c1268a991)を参照ください。

![fig04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592367/a7958991-5a0e-74f7-1d59-282f6e4c00c0.png)

図1: システム構成図

説明性監視とバイアス監視は、Clarifyによる説明性監視ジョブとバイアス監視ジョブにより行われます。説明性監視ジョブとバイアス監視ジョブは同一のClarifyのためのインスタンス上(図1右の緑の直方体)で実行されます。Clarifyの説明性監視ジョブは、推論用データおよび推論結果から一定時間ごとにSHapley Additive exPlanations(SHAP)[^1]を算出し、説明性レポートを作成してS3ストレージへ出力します。SHAPとは特定の特徴量が推論結果へ及ぼす影響を評価する指標であり、[以前の投稿](https://qiita.com/kyosuke_hashimoto/items/eb304727277c1268a991)で示した説明性監視の技術の1つである、Model Inductionによるアプローチで広く利用されています。またClarifyのバイアス監視ジョブは、あらかじめ指定した説明変数に基づき、推論用データと推論結果を比較して偏りがないことを計算し、バイアスレポートを作成してS3ストレージへ出力します。
S3ストレージに出力した精度監視結果、統計値レポート、説明性レポート、バイアスレポートや、監視ジョブ等のソースコードはSageMaker Studioの統合された画面を利用して確認できます。


### 実験設定
図1に示したModel Monitorのインスタンス、SageMaker Studio Notebookインスタンス、Clarifyのインスタンスはm5.xlargeインスタンス(CPU:4x 3.1 GHz Intel XeonR Platinum 8175M with AVX-512、メモリ：16GiB)としました。推論用データは毎秒2件ずつ機械学習モデルへ入力しました。さらに監視は1時間毎に行い、機械学習モデルが算出した解約の確率が0.8以上の場合に「解約」と判定します。

## 実験結果と考察

### 説明可能性の可視化

SageMaker Clarifyを用いて説明性監視ジョブを1時間ごとに実行し、SHAP値のトップ10を算出しました。
SageMaker Studioを用いると、説明性監視ジョブの監視期間中の監視結果一覧を図2の様に可視化できます。図2の中央の緑色のテキストの「No Issues」は、特定の時刻の説明性監視ジョブが成功したことを示しています。同様に、図2の中央の赤色のテキストの「Failed」は、正解ラベルの不足やClarify用のインスタンスのCPU過負荷などにより特定の時刻の説明性監視ジョブが失敗したことを示しており、図2の中央の青色のテキストの「In Progress」は、特定の時刻の説明性監視ジョブが実行中であることを示しています。

![fig13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592367/2b48d488-ee04-832a-aec7-6038ebb3fecc.png)
図2 説明性監視ジョブの一覧

成功した1つ1つの説明性監視ジョブの算出結果は説明性レポートとしてS3ストレージに保存されます(図3のファイル例1)。図3のファイル例1はPDFとJupyter notebookの両方の形式で得られます。
![fig12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592367/27e6730b-b332-8521-0ead-d4382e04acb5.png)
図3 ファイル例1: ある時刻の説明性レポート(report.pdf)

図3に示した時刻ごとの説明性レポートを重ね合わせて、一定期間における説明変数の寄与度の推移を可視化することも可能です。図2の右側から監視期間を指定して右下の「Add chart」をクリックすると、図4の様に期間中のSHAPの値が大きい説明変数の上位10個を可視化できます。縦軸は説明変数であり、説明変数の横の矢印と数字は、推論期間中に説明変数のSHAPの値の順番が上下した変化を示しています。図4より、日中の通話時間（Day Mins）とカスタマーサービスの通話回数（CustServ Calls）は、顧客の解約を予測するための2つの最も重要な説明変数であり、この推論期間中に順番が変わらなかったことがわかります。一方で、顧客がメイン州在住であるか（State_ME）は18ランク上昇しています。この機能は次の利用方法があります。たとえば期間限定でメイン州の顧客に対する解約引き止め等を目的としたキャンペーンを行った場合に、キャンペーンの期間を指定して説明変数(顧客がメイン州在住であること)の重要性が急上昇したことを観察することで、キャンペーンの影響があったことを把握する材料となります。
![fig14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592367/6f2230a9-13fb-3385-ef44-da28a485ff21.png)
図4 ある時間帯における説明変数の寄与度のランキングトップ10

### バイアス監視
SageMaker Clarifyを利用してバイアス監視ジョブを1時間ごとに実行して、あらかじめ指定した説明変数(本実験では顧客の国際電話プランへの加入有無)に対する偏りを複数のバイアスメトリクス について算出しました。
SageMaker Studioを用いると、バイアス監視ジョブの監視期間中の監視結果一覧を図5の様に可視化できます。図5の緑色のテキストの「No Issues」は、特定の時刻のバイアス監視ジョブがエラーなく完了したことを示しています。
![fig16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592367/6812090e-ec06-3e2e-b560-099cdbd982dc.png)
図5 バイアス監視ジョブの一覧

成功した1つ1つのバイアス監視ジョブの算出結果はバイアス監視レポートとしてS3ストレージに保存されます(図6のファイル例2)。図6のファイル例2はPDFとJupyter notebookの両方の形式で得られます。
![fig15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592367/7c5c0686-9d7d-c756-1fd1-3236f41c14aa.png)
図6 ファイル例2: 特定の時刻のバイアス監視レポート(report.pdf)

図6に示した時刻ごとのバイアス監視レポートを重ね合わせて、一定期間におけるバイアスメトリックの推移を可視化することも可能です。
図5の右側で監視期間・バイアスメトリック・しきい値を設定すると、指定した監視期間中におけるバイアスメトリックの推移と、バイアスとみなして警告する場合の時刻を図7の様に可視化できます。
図7はバイアスメトリックとして、国際電話プランを契約した顧客の解約予測の再現率と、国際電話プランを契約していない顧客の解約予測の再現率の差分を可視化した結果です。x軸が時刻、青色の凡例が国際電話プランに加入している顧客とそうでない顧客の再現率の差分、オレンジ色の凡例が再現率の差分のしきい値(図5で0.5と設定しました)を表しています。
![fig17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592367/86fb34ba-23d6-a25b-2890-12052f42fe05.png)
図7 監視期間中の国際電話プラン有無におけるバイアスメトリック(再現率の差分)の推移

図7のグラフを利用することで、国際電話プラン加入有無に基づく再現率の差分を可視化できます。図7では再現率の差分(青色の凡例)が0.3前後で推移していることがわかります。また図7では再現率の差分(青色の凡例)が図5で設定した再現率の差分のしきい値(オレンジ色の凡例)である0.5を一度も下回らないため、警告は起こらないことがわかります。

### 考察
[以前の投稿](https://qiita.com/kyosuke_hashimoto/items/87d316580723b28d86d7)でSageMaker Model Monitorを利用して、学習用データからベースライン用統計と制約条件を算出し、推論用データの統計と比較することで、ドリフト監視が可能であることを確認しました。また今回の投稿で、SageMaker Clarifyを利用することで、推論期間中における機械学習モデルの各説明変数の重要性の遷移やバイアスの監視が可能であることを確認しました。この仕組みを利用することで、機械学習モデルを学習させるデータサイエンティストは、推論時の機械学習モデルのパフォーマンスを逐次監視し、機械学習モデルの調整や再学習を行うべきかをタイムリーに判断できます。また、機械学習モデルを業務へ適用するシステムエンジニアは、推論用データが変化したことを把握することで、データサイエンティストへ通知し顧客への対応を検討することが可能です。

一方で、SageMaker Model MonitorやSageMaker Clarifyはまだリリースされて間もない機能であり、ドリフト検知の手法や推論後の後処理に機能拡張に期待したい点があります。
まず、教師なしアプローチによるドリフト検知技術の実装についてです。[以前の投稿](https://qiita.com/kyosuke_hashimoto/items/eb304727277c1268a991)で示した様に、ドリフト検知技術には教師ありアプローチと教師なしアプローチの2種類がありますが、SageMakerの監視技術で利用可能なのは、2021年1月現在、正解ラベルが必要な教師ありアプローチのみです。教師なしアプローチによるドリフト検知技術が実装されることで、より広範囲な機械学習モデルの監視にSageMakerの技術を活用できることが期待されます。
さらに、推論後の後処理機能の拡張もあります。バイアス監視にメトリクスの値を用いる場合に、しきい値だけでなく、メトリクスの上限と下限の両方を指定するユースケースもあると考えられますが、そのような機能は2021年1月現在サポートされていません。バイアス監視の後処理に、例えばNumPyやscikit-learnの様なモジュールを組み込むことで、サポートされる様になることを期待します。

## おわりに 

3回の投稿に分けて、米国の携帯電話会社の顧客解約予測を題材として、SageMaker Model MonitorとSageMaker Clarifyを利用した機械学習モデルの監視技術を検証しました。検証の結果、これらのサービスを統合して利用することで、利用開始後の機械学習モデルを継続的に監視して、機械学習モデルの調整や再学習を行うべきかタイムリーに判断できることを確認できました。

[^1]: Lundberg, S.M. and Lee, S.I., 2017. A unified approach to interpreting model predictions. In?Advances in neural information processing systems?(pp. 4765-4774).