AIが予測した結果を信用できますか? 説明可能なAIをSHAPで実装してみよう
1.はじめに
第3次AIブームが到来し世の中にAIが浸透してきた今日、AI業界はさらに急速に発展しています。ただし漠然とスゴい!賢い!と思われているAIにも実は苦手なことがあります。
それは「AIがどのような過程を経て判断を行ったのか」を、人間が理解できる形で提示することができないことです。つまり、説明が苦手なのです。そのため世界中で説明可能なAIに注目が集まり、研究や開発が進んでいます。
今回はオープンソースライブラリであるSHAPを使って実際に予測結果の根拠を視える化してみます。後半ではジールの強みであるBIツールでSHAPの結果を視覚化してみます!
▼説明が必要な場面の例
2.説明可能なAIとは
説明可能なAIは、英語で「Explainable AI」、略してXAI(エックスエーアイ)と呼ばれています。「AIがどのような過程を経て判断を行ったのか」のプロセスを説明可能にする技術です。
従来の機械学習は人間が特徴量を設計していたため人間自身が説明可能でした。しかし昨今のディープラーニングなどの高度なAI技術は、AIが特徴量を決めるため人間がアルゴリズムを理解し解釈することが困難になっています。このことを一般的に「AIのブラックボックス化」と呼び、AIの課題の一つとなっています。
この課題を解消すべく、世界中で説明可能なAIに対する研究が進められています。
3.SHAP(シャプ)とは?
SHAP(SHapley Additive exPlanations)はAIの予測結果の特徴量のインパクトを視覚化するオープンソースライブラリです。
シャプと読みます。これは協力ゲーム理論におけるShapley値を利用して各説明変数の寄与を説明するアプローチです。
アウトプットはこのような感じです。この例では予測スコア1.12という値に対してどの特徴量がどのくらい効いたのかを視覚化しています。赤がプラスに効いた特徴量、青がマイナスに効いた特徴量です。
4.実際にSHAPを実装してみよう
今回は「銀行の顧客ターゲティングデータ」を使います。このデータは27,168名の顧客データと口座開設の有無のデータであり、顧客の年齢や最終学歴、ローンの有無、キャンペーン情報などから定額預金申し込みの有無を予測することを目的としたデータセットです。回帰予測モデルはXGBoostを使いました。動作環境はGoogle Colaboratoryです。
▼銀行の顧客ターゲティングデータの項目一覧
SHAPツールの使い方は非常に簡単で、XGBoostで作成したモデルと学習用データを指定するだけで次の瞬間にはグラフを描画できるようになります。
▼Pythonの場合
import shap
explainer = shap.TreeExplainer(model={XGBoostで作成したmodel})
shap_values = explainer.shap_values(X= {学習用データ(x_train)})
#グラフを描画
shap.summary_plot(shap_values, x_train)
それでは実際にSHAPでアウトプットされるグラフをいくつか紹介します。
■Summary Plot
特徴量ごとにSHAP Valueを散布図として表現します。X軸がSHAP Valueで、0から離れているほど予測結果にたいする影響が大きいということになります。プロットの色は値の大小を表しています。赤は予測結果にプラスの影響を与える値、青は予測結果にマイナスの影響を与える値です。
shap.summary_plot(shap_values, x_train)
この散布図では、duration(最終接触時間)が最も予測結果に影響を与えており、値が大きくなるほど赤色になる傾向があるため、最終接触時間が大きいほど預金口座開設を開設してもらいやすくなるということが分かります。
Summary PlotはSHAP Valueの絶対値の平均値を使った棒グラフの表現も可能です。
shap.summary_plot(shap_values, x_train, plot_type='bar')
こちらの棒グラフでもduration(最終接触時間)が最も予測結果に影響を与えていることが分かります。
■Waterfall Plot
Waterfall Plotは特定の予測に着目して可視化します。サンプルとして顧客ID=”1”(教師データの先頭)を指定してみます。
shap.plots._waterfall.waterfall_legacy(explainer.expected_value, shap_values[0],
feature_names=x_noid.columns)
顧客ID=”1”のデータの予測をする時に各変数がどのくらい影響しているのかが定量的に認識できます。この例では一番duration(最終接触時間)が最も大きくプラスに影響していることが分かります。
■Force Plot
Force PlotもWaterfall Plot同様、特定の予測に着目して可視化することができます。違いは特徴量の増減が一直線上で表現されることです。サンプルとして顧客ID=”1”(教師データの先頭)を指定してみます。
shap.force_plot(base_value=explainer.expected_value, shap_values=shap_values[0],
features=x_noid.iloc[[0]])
顧客ID=”1”の顧客はbalance(年間平均残高)が1,756ドルあることが定期預金口座開設予測に対してプラスに影響していることが分かります。逆にhousing(住宅ローン)が1、すなわちローンを抱えていることがマイナスに影響していることが分かります。
実はSHAP Valuesの値はこのようにテーブルデータとして出力することも可能です。
テーブルデータで出力できるということは・・・そう、BIツールで可視化することができます!
それではBIツールで可視化してみましょう。
5.BIツールを使って可視化してみよう
今回はMicrosoft社が提供しているPower BIというBIツールを使って可視化してみます。
まずは特徴量の重要度です。SHAPのSummary Plotと同じようなグラフを作成してみます。これは特徴量ごとにSHAPValuesの絶対値の平均を算出しています。
最終接触時間が最も重要度が高く、予測結果に影響を与えていることが分かります。また、BIツールで表現することで項目名を日本語にしたり、自由に色を変更したり、補足メモを挿入することだってできます。視認性やデータ理解の容易性が向上します。
続いて、SHAPのWaterfall Plotと同じようなグラフを作成してみます。ここでは顧客ID=”1”のデータを表示します。
特徴量のグラフにマウスを乗せることで実際の値(最終接触時間が939秒)を表示したり、設定次第ではその他にも必要な情報を表示したりできるようになります。
SHAPでは決まった形のグラフを出力するだけであるのに対して、BIツールでは柔軟に可視化の仕方を変えることができますね。また、SHAP Valuesと他のデータを連携させることができる点もBIツールを使うことの強みです。
例えば顧客の住所データと紐づけることで地理的にどんな場所にいるユーザの契約獲得率が高いのかをマップで可視化したり、契約獲得率が高いと判断した顧客がその後本当に契約に至ったのかどうかを契約データと紐づけることでグラフ化したりと、SHAPだけではなく他のデータと連携させることでより価値のあるデータとなります。
さいごに
ビジネスでは予測結果に対する納得感がとても大切です。予測結果に対する根拠次第で意思決定やネクストアクションが変わります。常にベストな意思決定ができるようにぜひ根拠を視える化しましょう。
またAIを全社に導入する際に、社員の予測結果への信頼感の欠如やデータへの理解度の低さからなかなかAI活用の浸透が難しいという課題もあります。その場合も根拠を可視化することで信頼感や理解の助けとなりAIの全社的な浸透の促進にも繋がります。
AIの予測結果に納得した上でビジネスに活かしていきましょう!