OSS探訪GitHubでログイン

予測値を特徴量ごとの寄与へ分けてモデルの判断を調べる

スコアの見方

OSS規模スコアはStars・Watchers・Forks・Contributorsを対数圧縮して重み付けした現在の規模指標(上限なし)です。発掘スコアは現在のOSS規模スコアから発掘時点のOSS規模スコアを引いた値、更新ペースは直近30日Commit数、成長モメンタムは直近の観測期間におけるOSS規模スコア差、OSS健全度は取得できた更新状況・Community Health・Releaseの0〜100評価です。

Stars
25,794
主要言語
Jupyter Notebook
ライセンス
MIT
リポジトリ最終更新
2026/10/04
ページ内ナビ

概要

SHAPは、ゲーム理論のShapley値を使い、機械学習モデルの出力を各特徴量の寄与へ分解するPythonライブラリです。一件の予測で何が値を押し上げ・押し下げたかと、データ全体で重要な特徴量を同じExplanation形式から調べられます。

特徴と向いている用途

公式資料に基づく紹介・実機未検証 · 内容確認日:

主な特徴

モデルに合う説明器から共通の寄与データを得る

shap.Explainerはモデルと背景データから説明器を選び、特徴量ごとの値、基準値、入力データをExplanationへまとめます。木モデル向けのTreeExplainer、深層学習向けのDeepExplainer、モデルの種類を問わないExactExplainerやKernelExplainerがあり、waterfall、beeswarm、scatterなどの図へつなげられます。

出典:[1][3][4]

向いている用途

個別判断の調査と全体傾向の点検を往復する

誤分類した一件の特徴量寄与をwaterfallで追い、同じ説明を多数の行へ広げて偏りや漏れをbeeswarmで探す用途に向きます。新旧モデルで寄与の向きや大きさを比べれば、精度指標だけでは見えない判断規則の変化をレビューできます。

出典:[1]

導入前の確認

背景データ、計算量、因果との違いを明示する

寄与は選んだ背景データと特徴量の扱いに依存し、相関した特徴量では配分が一意な現実原因を表すとは限りません。モデルの種類を問わない手法は特徴量数や評価回数に応じて高価になるため、木モデルなどでは専用の説明器を選びます。v0.52.0はPython 3.12以上とNumPy 2以上を要求します。GitHubはMITと表示しています。

出典:[1][2][5][6]

参考にした公式資料

  1. [1]SHAP v0.52.0 README(2026-10-04)
  2. [2]SHAP v0.52.0 package metadata(2026-10-04)
  3. [3]SHAP v0.52.0 Explainer implementation(2026-10-04)
  4. [4]SHAP v0.52.0 ExactExplainer implementation(2026-10-04)
  5. [5]shap/shap GitHub repository metadata(2026-10-04)
  6. [6]SHAP v0.52.0 LICENSE(2026-10-04)
編集部からの補足

説明対象の一件だけでなく、背景データの選び方と複数の代表例を併せて確認してください。SHAP値はモデル出力への寄与を表しますが、因果関係や現実世界での効果を証明するものではありません。

3ステップで試す

  1. 1

    Python環境を分ける

    Python 3.12以上と、macOSまたはLinuxのPOSIXシェル、あるいはWindowsのGit BashまたはWSLを前提に、試行用の仮想環境を作って有効にします。以降も同じ端末と作業ディレクトリを使います。

    python3 -m venv shap-demo-env && . shap-demo-env/bin/activate
  2. 2

    SHAP 0.52.0を導入する

    Python 3.12以上とNumPy 2以上を要求する固定版を仮想環境へ導入します。GPUや外部データは不要です。

    python -m pip install "shap==0.52.0"
  3. 3

    二つの特徴量の寄与を確かめる

    背景をゼロとする2特徴量・1行のデータをLF改行で生成し、ExactExplainerが予測11を寄与3と8へ分け、基準値を0とすることを確認します。ローカル計算だけで完結します。

    printf '%s\n' 'import numpy as np' 'import shap' '' 'background = np.zeros((1, 2))' 'sample = np.array([[3.0, 4.0]])' 'model = lambda values: values[:, 0] + 2 * values[:, 1]' 'explanation = shap.Explainer(model, background, algorithm="exact")(sample)' 'assert np.allclose(explanation.values, [[3.0, 8.0]])' 'assert np.allclose(explanation.base_values, [0.0])' 'print(explanation.values.tolist())' > explain.py && python explain.py
公式READMEで確認

成長

成長の推移 · 直近30日

25,794 Stars

推移データを蓄積中です。

開発アクティビティ

直近90日・週次

Commit(直近30日)
29
Open PR
460

開発アクティビティを蓄積中です。

Built with

カテゴリとタグ

GitHubデータ

GitHubのデータGitHubの詳細データを見る

GitHub Topics

  • interpretability
  • machine-learning
  • deep-learning
  • gradient-boosting
  • shap
  • shapley
  • explainability
Stars
25,794
Forks
3,760
Watchers
246
Open Issues
527
Contributors
273
所有者種別
Organization
主要言語
Jupyter Notebook
ライセンス
MIT
リポジトリ最終更新
2026/10/04

このOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。

情報の誤りを報告

掲載内容に誤りや古い情報があればお知らせください。

このページを読んで、次に何をすればよいか分かりましたか?