0Pricing
Learn AI with Python · レッスン

モデル解釈性のためのSHAP値

shap.Explainer、TreeExplainer、フォースプロット、ビーズウォームプロット、特徴量重要度の順位付けについて学習します。

「モデル解釈性のためのSHAP値」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

説明可能性が重要な理由

複雑なモデルは高精度である一方、内部の仕組みが分かりにくいという問題があります。説明可能性は「なぜモデルはこの予測をしたのか」という疑問に答えるものであり、信頼、デバッグ、規制遵守に不可欠です。SHAPは、最も広く使われている説明手法の1つです。

SHAPが測定するもの

SHAP(SHapley Additive exPlanations)は、1件の予測に対する各特徴量の寄与を割り当てます。その値は協力ゲーム理論のシャープレイ値に基づいています。各特徴量を「プレイヤー」とみなし、そのSHAP値を、ベースラインに対する予測の公平な取り分と考えます。

加法性

SHAP値には加法性があります。つまり、ベースライン(モデル出力の平均)にすべての特徴量のSHAP値を合計すると、実際の予測値になります。これにより、すべての説明が出力の完全で監査可能な内訳になります。

# prediction = base_value + sum(shap_values_for_each_feature)

TreeExplainer

ツリーモデル(XGBoost、LightGBM、ランダムフォレスト)では、shap.TreeExplainerが木構造を利用して、正確なSHAP値を高速に計算します。

import shap
import xgboost

model = xgboost.XGBClassifier().fit(X_train, y_train)
explainer = shap.TreeExplainer(model)

shap_valuesの計算

explainer.shap_values(X_test)は行列を返します。各行の各特徴量について、1つのSHAP値が含まれます。これらが、可視化する生の寄与です。

shap_values = explainer.shap_values(X_test)
print(shap_values.shape)  # (n_samples, n_features)

summary_plotのビースウォーム

shap.summary_plotはビースウォームを生成します。各ドットは、ある特徴量に対する1つのサンプルを表します。位置はSHAP値(影響の方向と大きさ)を示し、色は特徴量の値を示します。特徴量は全体的な重要度の順に並びます。

shap.summary_plot(shap_values, X_test)

ビースウォームの読み方

ビースウォームは次のように読み取ります。

  • 上位の特徴量ほど、全体的に重要です
  • 右端のドットは予測を押し上げ、左端のドットは予測を押し下げます
  • 色から方向が分かります。たとえば、右側に高い特徴量の値(赤)が集まっている場合は、「高い値が予測を増加させる」ことを意味します

1件の予測を説明する

SHAPは個々の予測を説明するときに特に力を発揮します。1行分を説明するには、その行のSHAP値とモデルのベース値が必要です。

idx = 0
base = explainer.expected_value
row_shap = shap_values[idx]

force_plot

shap.force_plotは、ベース値から伸びる力として1件の予測を示します。赤い特徴量は出力を押し上げ、青い特徴量は出力を押し下げます。最終的な予測値は、これらの力の合計によって決まります。

shap.force_plot(
    explainer.expected_value,
    shap_values[0],
    X_test.iloc[0],
)

waterfall_plot

shap.waterfall_plotは、1件の予測を最も読みやすく表示する方法です。ベース値から始まり、各特徴量の寄与を大きさの順に段階的に積み上げ、最終的な出力に到達します。

shap.waterfall_plot(
    shap.Explanation(
        values=shap_values[0],
        base_values=explainer.expected_value,
        data=X_test.iloc[0],
    )
)

グローバルとローカル

SHAPは2つの目的に対応します。

  • グローバル:summary_plotは、モデル全体でどの特徴量が予測を左右するかを示します
  • ローカル:force_plotとwaterfall_plotは、特定の1件の予測を説明します

どちらも同じSHAP値から得られるため、異なる粒度でも一貫した説明になります。

理解度チェック

SHAPに関する知識を確認しましょう。

まとめ

SHAPを使ったモデルの説明可能性について学びました。

  • shap.TreeExplainer(model)はツリーモデルの正確な値を計算します
  • explainer.shap_values(X_test)は特徴量ごとの寄与を返します
  • summary_plotのビースウォームは全体的な重要度を示します
  • force_plotとwaterfall_plotは1件の予測を説明します
  • SHAP値には加法性があります。ベース値+寄与=予測値です

よくある質問

「モデル解釈性のためのSHAP値」レッスンは無料ですか?

はい。「モデル解釈性のためのSHAP値」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「モデル解釈性のためのSHAP値」で何を学びますか?

shap.Explainer、TreeExplainer、フォースプロット、ビーズウォームプロット、特徴量重要度の順位付けについて学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「モデル解釈性のためのSHAP値」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. MLモデルのバイアス検知
  2. モデル解釈性のためのSHAP値
  3. LIME:局所的で解釈可能な説明
  4. AI倫理とガバナンスのフレームワーク
← Learn AI with Pythonに戻る