今回は、機械学習モデルの解釈を行うためのダッシュボードを作成することができるライブラリについて紹介します。
はじめに
機械学習モデルを作った際には、パフォーマンスだけでなく、モデルがどのような過程を経て出力結果に至ったのかという解釈性を高めることも重要となります。モデルの解釈性を高めることで、プロダクトに導入する際などに機械学習に馴染みのない方にも説明しやすく納得感を高めることができると考えられます。
チーム内外でモデルについて議論する際には、その場で様々な指標を見たり、特定の顧客について深堀するなど異なる切り口で評価したい場合があります。その時にスクリプトやノートブック形式だと、都度コードを書き実行する必要があるため、議論を妨げる要因となり得ます。そこで、explainerdashboardというパッケージを利用し、インテラクティブなダッシュボードを作成するという解決策があります。
explainerdashboardは学習済みのモデルとテストデータを入力として渡すだけで、様々な指標を確認できるダッシュボードを作成することができます。加えて、what-if (ある特徴量が別の値だった時にどのような結果になるか)のシミュレーションを行うこともできます。実際に以下のコードを記述するだけで、Google ColabやJupyter Notebook上でも実行することができます。
以降では、ダッシュボードで確認することができる項目について、いくつか紹介していきたいと思います。
ダッシュボードの機能について
コードを実行し、ダッシュボードを起動すると、ブラウザ経由でアクセスすることができるようになります。画面上にはいくつかのタブがあり、そちらを切り替えることで様々な指標を確認することができます。
(1) Feature Importance
Feature Importanceタブをクリックすると図1のような結果を確認することができます。画面上部に示されているFeatute Importanceでは、可視化する木の深さに加えて、SHAP valuesとPermutation importancesのどちらの指標を利用するかを選択することができます。
画面下部には、プログラム上でfeature_descriptionsという変数で指定した各特徴量の説明が表示されています。
(2) Classification Stats
Classification Statsタブでは、分類結果について深掘りを行うことができます。まず、図2上部にあるGlobal cutoffという箇所を変更することで分類時に利用する閾値を変更し、以降の可視化結果の変化を確認することができます。図2下部では、指定した閾値に対する基本的な精度評価指標とConfusion Matrixが示されています。
図3では、左側にPrecision Plotとして予測値の値を10%単位で刻んだ場合のサンプル数とPrecisionの値が示されています。予測値が高い値になるほどPrecisionが高くなっているかやcutoffの閾値設定などに利用することができます。右側ではClassification Plotが示されており、指定した閾値の上下と全体での正例、負例比率が示されています。
図4では、ROC AUC PlotとPR AUC Plotの二つが示されています。ROC curveではFalse positiveとFalse negativeのトレードオフを、PR curveでは、PrecisionとRecallのトレードオフを確認することができます。また、それぞれの図の下にあるバーを動かすことでcutoffの値を変更し対応する値を詳細に確認することができます (図内の黒い十字線が移動し、対応する値が取得されています)。
図5では、Lift CurveとCumulative Precisionが示されています。Lift Curveでは、モデルの予測スコア上位N%での正例比率をランダムな場合と完璧に予測できた場合の二つの結果と比較しています。つまり、モデルのパフォーマンスを表すオレンジ線が左側から急激に上昇し、理想的な結果である青色線に近いほど良いモデルだと判断できます。右図のCumulative Precisionでは、同様にモデルの予測スコア上位N%を横軸に取り、正例と負例の比率が累積で示されています。ここでは、スコアの上位で正例比率が支配的になっているかなどを確認することができます。
(3) Individual Predictions
Individual Predictionsタブでは個別のサンプルについて可視化を行うことができます。まず、左上から可視化を行いたいサンプルを選択します。すると、右上に正例、負例の予測確率が示されます。加えて、左下では予測結果に対して各特徴量がどのように貢献しているかが可視化されています。右下では、Partial Dependencyが示されており、特定のサンプルに対してある特徴量の値を変更した時に予測結果がどのように変化するかが示されています。変更する特徴量は任意のものを選択することができます。
(4) What if…
What ifタブで可視化できる内容は基本的にIndividual Predictionsタブと同じになります。しかし、What ifタブでは特定のサンプルに対して、複数の特徴量の値を変更した時に予測結果がどのように変化するかを可視化することができます。そのため、「もし・・・だったら」という状況をシミュレーションすることができます。
(5) Feature Dependence
Feature Dependenceタブでは、SHAPの結果について確認することができます。SHAPを用いることで各特徴量が結果に対して正の影響を与えるのか、負の影響を与えるのかを確認することができます。また、データセット全体に対してだけでなく、個別のサンプルについても確認することができるので解釈性が高まります。SHAPについての、詳細はこちらのドキュメントを参照してください。
(6) Decision Trees
Decision Treesタブでは、個別のサンプルについて決定木がどのような条件で分岐しているかを確認することができます。多くの場合、アンサンブルを行い複雑な木構造となっているため、分岐条件レベルで追っていく機会は少ないと思います。しかし、プルダウン形式でサンプルや木の深さを変更して可視化を行えるので、モデル作成時にはいくつか目視で確認すると理解が深まると思います。
おわりに
今回は、機械学習モデルを解釈する際に利用可能なダッシュボードを簡単に作れるexplainerdashboardを紹介しました。ダッシュボードを利用することで、インテラクティブにモデルを解釈でき、チーム内でのコミュニケーションを円滑に進めることが期待されます。また、HTML形式でも出力可能なため簡単に共有でき、コーディング経験のない人でも一人で確認できるようになっている点も便利だと思いました。