3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIの予測根拠を可視化する:SHAPを使ったモデル解釈・特徴量分析について

3
Last updated at Posted at 2026-03-19

はじめに

AIの予測結果を「なぜ?」と説明したいシーンは多々あります。
今回は私が大学時代に研究していた「説明可能なAI」に関する領域について紹介させていただきます。
「説明可能なAI」に関連するツールの中で、近年最も実用的かつ有名なのが SHAP (SHapley Additive exPlanations) です。
本記事では、SHAPの概要・特徴・簡単な使い方・活用上のポイントを整理します。

SHAPとは

1. SHAPの概要

SHAPは、機械学習モデルの「各特徴量が予測にどれだけ寄与したか」を数量的かつ直感的に算出できる解釈性ツールです。
ゲーム理論の「Shapley値」に基づくため、理論に基づいていることも特長のひとつです。

2. なぜSHAPが必要か

機械学習モデル、特にディープラーニングなどブラックボックス性の高いモデルでも、「この予測結果は●●という説明変数が主に効いている」と予測結果について説明できます。
また、実運用で意思決定支援や社内への説明などにも活用できます。

SHAPの特徴

1. 特徴量ごとの貢献度の可視化

予測値に対して、「各特徴量がどの程度、どんな方向で寄与したか」を、値としてもグラフとしても見える化できます。

2. 多様な機械学習モデルに対応

scikit-learn, Keras/TensorFlow、PyTorchなど広範囲に対応しています。

3. 直感的なグラフ・可視化ツール

bar plot, waterfall plot等、直感的な可視化がライブラリ内で簡単に使えます。

SHAPの活用例

1. モデル解釈の強化(ミクロな視点)

SHAPを利用することで、単なる「特徴量の重み」ではなく、各レコード(サンプル)ごとに、どの特徴量がどの程度予測に貢献したかを可視化できます。
たとえばwaterfall plotを使えば、「なぜこの予測値(あるいはクラス確率)になったのか」を個別ケースレベルで直感的に理解することが可能です。

2. 特徴量の重要度分析(マクロな視点)

全体のデータにおいて、「モデルがどの特徴量に強く依存しているか」「どの特徴量が予測を左右しているか」を棒グラフ(bar plotなど)として俯瞰できます。
これによりモデル全体の振る舞い・注目すべき変数が一目で分かり、特徴量エンジニアリングやモデル改善の指針にもなります。

3. 意思決定支援

SHAP値の可視化を通じて、「なぜこのアウトプットが出たのか?」という予測根拠の説明ができるため、異常値の要因分析や、現場での意思決定にも説得力を持たせられます。
ブラックボックスで終わらせず、内部ロジックの点検や運用改善にも応用可能です。

導入方法と基本的な使い方

1. インストール方法

SHAPはPyPIから簡単にインストールできます。

pip install shap

2. サンプルコード(scikit-learnのモデル例)

例えば、ランダムフォレストでSHAP値を可視化する例は以下の通りです。

import shap
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
import matplotlib.pyplot as plt

# Irisデータセットの読み込み
X, y = load_iris(return_X_y=True)
feature_names = load_iris().feature_names   

# ランダムフォレストモデルの学習
model = RandomForestClassifier()
model.fit(X, y)

# SHAP Explainerの作成(モデルとデータセットを渡す)
explainer = shap.Explainer(model, X, feature_names=feature_names)
shap_values = explainer(X, check_additivity=False)

# 全体での特徴量重要度をbar plotとして可視化(保存用)
shap.summary_plot(shap_values, X, feature_names=feature_names, plot_type='bar', show=False)
plt.savefig('shap_barplot.png', bbox_inches='tight', dpi=300)
plt.close()

# ---- ここから1レコード(サンプル)のSHAP値可視化 ----
sample_idx = 0  # 最初のサンプルを例に
class_idx = 0   # 0番目のクラス(多クラスの場合は必要)

# 指定サンプル・クラスのSHAP値と基準値の抽出
values = shap_values.values[sample_idx, :, class_idx] 
base_values = shap_values.base_values[sample_idx, class_idx]
data = X[sample_idx]

# SHAP Explanationオブジェクトを作成(個別説明用)
e = shap.Explanation(
    values=values,
    base_values=base_values,
    data=data,
    feature_names=feature_names
)

# Waterfall plot(個別予測の寄与分析)を作成し画像保存
shap.plots.waterfall(e, show=False, max_display=4)
plt.savefig('shap_waterfall.png', bbox_inches='tight', dpi=300)
plt.close()

# 確認出力
print("values:", values)
print("feature_names:", feature_names)


3. 実行結果と簡単な分析

shap_waterfall.png

waterfall plotについて:
waterfall plotは、レコード0のクラス0の予測値に対する各特徴量の貢献度を直感的に示しています。
まず、モデルのベースライン値(平均予測値)は「0.31」です。そこから、「sepal width」は+0の影響、「sepal length」は+0.02、「petal length」は+0.32、「petal width」は+0.35と、それぞれの特徴量が予測値へ影響を与えています。
最終的にこれらの合計で予測値「1」に達することがgraphから読み取れます。
このサンプルでは「petal length」と「petal width」が強く予測値に加算されているため、これらが平均的なレコードよりも値が良いことが分かります。
このように、waterfall plotを使うことで「なぜこの予測が出たのか」を個々の特徴量単位で説明することができます。

shap_barplot.png

bar plotについて:
bar plotは、各特徴量のモデル全体での貢献度(重要度)を分かりやすく棒グラフで可視化したものです。このモデルにおいて「petal length」と「petal width」は非常に大きい影響力を持っており、「sepal width」と「sepal length」は影響力が小さいことが分かります。bar plotを使うことで、予測にほとんど貢献しない特徴量を見つけることができ、不要な変数の除去などの判断材料として活用できます。

SHAP利用時のおすすめTips

1. 実務での活用シーン

モデル選定・改善案の発見
SHAP値を確認することで、予測に強く効いている特徴量や、不要/冗長な特徴量を見逃さずに済みます。

意思決定支援
「なぜこの予測が出たか」を説明できるため、社内外説明や判断材料として非常に有用です。

個別事例の検証
特定レコードで期待しない予測が出た場合、waterfall plotで「どの変数が結果を押し上げたか/下げたか」を直感的に見られます。

異常検知
SHAP値で予測値を動かした主要因を特定しやすいため、業務運用上のアラート設計にも活用できます。

2. 注意点やパフォーマンス改善策

計算コストが高い場合がある
SHAP値は「全特徴量の組み合わせ」を評価するため、データ量やモデルによっては計算時間が長くなります。
⇒ サンプル数を減らす/KMeansで代表値にする等で最大表示数を調整などで工夫できます。

まとめ

SHAPは「機械学習モデルがなぜそう予測したか」を直感的かつ理論的に説明できるライブラリです。
特徴量の貢献度・重要度を可視化するだけでなく、現場での意思決定や業務フロー構築にも直接役立ちます。

本記事のPythonサンプルを活用し、まずは小さなモデルからSHAP値の可視化を体験してみてください。
モデルの解釈性・説明力向上を目指すなら、ぜひSHAPの導入を検討してみてはいかがでしょうか?

最後までお読みいただきありがとうございました!
この記事がみなさんの機械学習・AI活用に少しでも役立てば幸いです。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?