Agent Skills by ALSEL
Anthropic ClaudeLLM・AI開発⭐ リポ 0品質スコア 50/100

shap

SHAP(SHapley Additive exPlanations)を用いた機械学習モデルの解釈・説明を行うスキルです。モデルの予測根拠の説明、特徴量重要度の算出、各種SHAPプロット(waterfall・beeswarm・bar・scatter・force・heatmapなど)の生成、モデルのバイアスや公平性の分析、モデル比較、説明可能AIの実装といった場面で活用できます。XGBoost・LightGBM・Random ForestなどのツリーベースモデルのほかTensorFlow・PyTorchによる深層学習、線形モデル、任意のブラックボックスモデルにも対応します。

description の原文を見る

Model interpretability and explainability using SHAP (SHapley Additive exPlanations). Use this skill when explaining machine learning model predictions, computing feature importance, generating SHAP plots (waterfall, beeswarm, bar, scatter, force, heatmap), debugging models, analyzing model bias or fairness, comparing models, or implementing explainable AI. Works with tree-based models (XGBoost, LightGBM, Random Forest), deep learning (TensorFlow, PyTorch), linear models, and any black-box model.

SKILL.md 本文

SHAP (SHapley Additive exPlanations)

概要

SHAP は協力ゲーム理論の Shapley 値を使用して機械学習モデルの出力を説明するための統一的なアプローチです。このスキルは以下に関する包括的なガイダンスを提供します:

  • あらゆるモデルタイプに対する SHAP 値の計算
  • 特徴量の重要度を理解するためのビジュアライゼーションの作成
  • モデルの動作のデバッグと検証
  • 公平性とバイアスの分析
  • 本番環境での説明可能な AI の実装

SHAP は全てのモデルタイプで動作します: ツリーベースのモデル (XGBoost、LightGBM、CatBoost、Random Forest)、深層学習モデル (TensorFlow、PyTorch、Keras)、線形モデル、およびブラックボックスモデル。

このスキルを使用するタイミング

以下のようなユーザーの質問がある場合、このスキルをトリガーします:

  • 「モデルで最も重要な特徴量はどれですか」
  • 「SHAP プロットを生成する」(ウォーターフォール、ビースウォーム、バー、散布図、フォース、ヒートマップなど)
  • 「なぜモデルはこの予測をしたのですか」
  • 「モデルの SHAP 値を計算する」
  • 「SHAP を使用して特徴量の重要度を可視化する」
  • 「モデルの動作をデバッグする」または「モデルを検証する」
  • 「モデルのバイアスを確認する」または「公平性を分析する」
  • 「複数のモデル間で特徴量の重要度を比較する」
  • 「説明可能な AI を実装する」または「モデルに説明を追加する」
  • 「特徴量の相互作用を理解する」
  • 「モデル解釈ダッシュボードを作成する」

クイックスタートガイド

ステップ 1: 適切なエクスプレーナーを選択する

決定木:

  1. ツリーベースのモデル? (XGBoost、LightGBM、CatBoost、Random Forest、Gradient Boosting)

    • shap.TreeExplainer を使用 (高速、正確)
  2. 深層ニューラルネットワーク? (TensorFlow、PyTorch、Keras、CNN、RNN、Transformers)

    • shap.DeepExplainer または shap.GradientExplainer を使用
  3. 線形モデル? (Linear/Logistic Regression、GLM)

    • shap.LinearExplainer を使用 (非常に高速)
  4. その他のモデル? (SVM、カスタム関数、ブラックボックスモデル)

    • shap.KernelExplainer を使用 (モデル非依存だが遅い)
  5. よくわからない場合?

    • shap.Explainer を使用 (自動的に最適なアルゴリズムを選択)

全てのエクスプレーナータイプの詳細については references/explainers.md を参照してください。

ステップ 2: SHAP 値を計算する

import shap

# ツリーベースのモデル (XGBoost) の例
import xgboost as xgb

# モデルをトレーニング
model = xgb.XGBClassifier().fit(X_train, y_train)

# エクスプレーナーを作成
explainer = shap.TreeExplainer(model)

# SHAP 値を計算
shap_values = explainer(X_test)

# shap_values オブジェクトには以下が含まれます:
# - values: SHAP 値 (特徴量の寄与度)
# - base_values: 予想されるモデル出力 (ベースライン)
# - data: 元の特徴量の値

ステップ 3: 結果を可視化する

グローバルな理解の場合 (データセット全体):

# ビースウォームプロット - 値の分布を示す特徴量の重要度
shap.plots.beeswarm(shap_values, max_display=15)

# バープロット - 特徴量の重要度の簡潔なまとめ
shap.plots.bar(shap_values)

個別の予測の場合:

# ウォーターフォールプロット - 単一の予測の詳細な分解
shap.plots.waterfall(shap_values[0])

# フォースプロット - 加算的なフォースの可視化
shap.plots.force(shap_values[0])

特徴量の関係の場合:

# 散布図 - 特徴量と予測の関係
shap.plots.scatter(shap_values[:, "Feature_Name"])

# 別の特徴量で色付けして相互作用を表示
shap.plots.scatter(shap_values[:, "Age"], color=shap_values[:, "Education"])

全てのプロットタイプの包括的なガイドについては references/plots.md を参照してください。

コアワークフロー

このスキルはいくつかの一般的なワークフローをサポートしています。現在のタスクに合致するワークフローを選択してください。

ワークフロー 1: 基本的なモデルの説明

目標: モデルの予測を駆動するものを理解する

ステップ:

  1. モデルをトレーニングして適切なエクスプレーナーを作成
  2. テストセットの SHAP 値を計算
  3. グローバルな重要度プロット (ビースウォームまたはバー) を生成
  4. トップ特徴量の関係を調査 (散布図)
  5. 特定の予測を説明 (ウォーターフォールプロット)

:

# ステップ 1-2: セットアップ
explainer = shap.TreeExplainer(model)
shap_values = explainer(X_test)

# ステップ 3: グローバルな重要度
shap.plots.beeswarm(shap_values)

# ステップ 4: 特徴量の関係
shap.plots.scatter(shap_values[:, "Most_Important_Feature"])

# ステップ 5: 個別の説明
shap.plots.waterfall(shap_values[0])

ワークフロー 2: モデルのデバッグ

目標: モデルの問題を特定して修正する

ステップ:

  1. SHAP 値を計算
  2. 予測エラーを特定
  3. 誤分類されたサンプルを説明
  4. 予期しない特徴量の重要度を確認 (データリーケージ)
  5. 特徴量の関係が妥当であることを検証
  6. 特徴量の相互作用を確認

詳細なデバッグワークフローについては references/workflows.md を参照してください。

ワークフロー 3: 特徴量エンジニアリング

目標: SHAP の洞察を使用して特徴量を改善する

ステップ:

  1. ベースラインモデルの SHAP 値を計算
  2. 非線形の関係を特定 (変換の候補)
  3. 特徴量の相互作用を特定 (相互作用項の候補)
  4. 新しい特徴量をエンジニアリング
  5. リトレーニングして SHAP 値を比較
  6. 改善を検証

詳細な特徴量エンジニアリングワークフローについては references/workflows.md を参照してください。

ワークフロー 4: モデルの比較

目標: 複数のモデルを比較して最適な解釈可能なオプションを選択する

ステップ:

  1. 複数のモデルをトレーニング
  2. 各モデルの SHAP 値を計算
  3. グローバルな特徴量の重要度を比較
  4. 特徴量のランキングの一貫性を確認
  5. 複数のモデル間で特定の予測を分析
  6. 精度、解釈可能性、一貫性に基づいて選択

詳細なモデル比較ワークフローについては references/workflows.md を参照してください。

ワークフロー 5: 公平性とバイアスの分析

目標: デモグラフィック・グループ間でのモデルバイアスを検出して分析する

ステップ:

  1. 保護された属性を特定 (性別、人種、年齢など)
  2. SHAP 値を計算
  3. グループ間で特徴量の重要度を比較
  4. 保護された属性の SHAP 重要度を確認
  5. プロキシ特徴量を特定
  6. バイアスが見つかった場合は軽減戦略を実装

詳細な公平性分析ワークフローについては references/workflows.md を参照してください。

ワークフロー 6: 本番環境へのデプロイ

目標: SHAP の説明を本番システムに統合する

ステップ:

  1. モデルをトレーニングして保存
  2. エクスプレーナーを作成して保存
  3. 説明サービスを構築
  4. 説明付き予測用の API エンドポイントを作成
  5. キャッシングと最適化を実装
  6. 説明の品質を監視

詳細な本番デプロイワークフローについては references/workflows.md を参照してください。

重要な概念

SHAP 値

定義: SHAP 値は各特徴量の予測への寄与度を定量化し、期待されるモデル出力 (ベースライン) からの偏差として測定されます。

プロパティ:

  • 加算性: SHAP 値は予測とベースラインの差に合計される
  • 公平性: ゲーム理論の Shapley 値に基づく
  • 一貫性: 特徴量がより重要になると、その SHAP 値が増加する

解釈:

  • 正の SHAP 値 → 特徴量は予測を上昇させる
  • 負の SHAP 値 → 特徴量は予測を下降させる
  • 絶対値 → 特徴量の影響の強さ
  • SHAP 値の合計 → ベースラインからの合計予測変化

:

ベースライン (期待値): 0.30
特徴量の寄与度 (SHAP 値):
  年齢: +0.15
  収入: +0.10
  教育: -0.05
最終予測: 0.30 + 0.15 + 0.10 - 0.05 = 0.50

背景データ / ベースライン

目的: 「典型的な」入力を表し、ベースラインの期待値を確立する

選択:

  • トレーニングデータからのランダムサンプル (50-1000 サンプル)
  • または kmeans を使用して代表的なサンプルを選択
  • DeepExplainer/KernelExplainer の場合: 100-1000 サンプルで精度と速度のバランスを取る

影響: ベースラインは SHAP 値の大きさに影響しますが、相対的な重要度には影響しません

モデル出力タイプ

重要な検討事項: モデルが何を出力するかを理解する

  • 生の出力: 回帰またはツリーのマージン用
  • 確率: 分類確率用
  • 対数オッズ: ロジスティック回帰用 (シグモイド前)

: XGBoost 分類器はデフォルトでマージン出力 (対数オッズ) を説明します。確率を説明するには、TreeExplainer で model_output="probability" を使用します。

一般的なパターン

パターン 1: 完全なモデル分析

# 1. セットアップ
explainer = shap.TreeExplainer(model)
shap_values = explainer(X_test)

# 2. グローバルな重要度
shap.plots.beeswarm(shap_values)
shap.plots.bar(shap_values)

# 3. トップ特徴量の関係
top_features = X_test.columns[np.abs(shap_values.values).mean(0).argsort()[-5:]]
for feature in top_features:
    shap.plots.scatter(shap_values[:, feature])

# 4. 予測例
for i in range(5):
    shap.plots.waterfall(shap_values[i])

パターン 2: コホート比較

# コホートを定義
cohort1_mask = X_test['Group'] == 'A'
cohort2_mask = X_test['Group'] == 'B'

# 特徴量の重要度を比較
shap.plots.bar({
    "Group A": shap_values[cohort1_mask],
    "Group B": shap_values[cohort2_mask]
})

パターン 3: エラーのデバッグ

# エラーを見つける
errors = model.predict(X_test) != y_test
error_indices = np.where(errors)[0]

# エラーを説明
for idx in error_indices[:5]:
    print(f"Sample {idx}:")
    shap.plots.waterfall(shap_values[idx])

    # 疑わしい特徴量を調査
    shap.plots.scatter(shap_values[:, "Suspicious_Feature"])

パフォーマンス最適化

速度に関する検討事項

エクスプレーナーの速度 (最速から最遅):

  1. LinearExplainer - ほぼ瞬時
  2. TreeExplainer - 非常に高速
  3. DeepExplainer - ニューラルネットワーク用で高速
  4. GradientExplainer - ニューラルネットワーク用で高速
  5. KernelExplainer - 遅い (必要な場合のみ使用)
  6. PermutationExplainer - 非常に遅いが正確

最適化戦略

大規模データセットの場合:

# サブセットの SHAP を計算
shap_values = explainer(X_test[:1000])

# またはバッチを使用
batch_size = 100
all_shap_values = []
for i in range(0, len(X_test), batch_size):
    batch_shap = explainer(X_test[i:i+batch_size])
    all_shap_values.append(batch_shap)

ビジュアライゼーション用:

# プロット用のサブセットをサンプリング
shap.plots.beeswarm(shap_values[:1000])

# 密集したプロットの透明度を調整
shap.plots.scatter(shap_values[:, "Feature"], alpha=0.3)

本番環境用:

# エクスプレーナーをキャッシュ
import joblib
joblib.dump(explainer, 'explainer.pkl')
explainer = joblib.load('explainer.pkl')

# バッチ予測用に事前計算
# API レスポンス用にトップ N 特徴量のみを計算

トラブルシューティング

問題: エクスプレーナーの選択ミス

問題: ツリーモデルに KernelExplainer を使用 (遅く不要) 解決策: ツリーベースのモデルには常に TreeExplainer を使用

問題: 背景データが不足

問題: DeepExplainer/KernelExplainer に背景サンプルが少なすぎる 解決策: 100-1000 の代表的なサンプルを使用

問題: 単位の混乱

問題: 対数オッズを確率として解釈 解決策: モデル出力タイプを確認; 確率、対数オッズ、または生の出力であるかを理解

問題: プロットが表示されない

問題: Matplotlib バックエンドの問題 解決策: バックエンドが正しく設定されていることを確認; 必要に応じて plt.show() を使用

問題: 特徴量が多すぎてプロットが乱雑

問題: デフォルトの max_display=10 が多すぎる、または少なすぎる可能性 解決策: max_display パラメータを調整するか、特徴量クラスタリングを使用

問題: 計算が遅い

問題: 非常に大規模なデータセットの SHAP を計算 解決策: サブセットをサンプリング、バッチを使用、または専用のエクスプレーナーを使用 (KernelExplainer ではない)

他のツールとの統合

Jupyter ノートブック

  • インタラクティブなフォースプロットがシームレスに動作
  • show=True (デフォルト) でインラインプロット表示
  • マークダウンと組み合わせてナラティブな説明を作成

MLflow / 実験トラッキング

import mlflow

with mlflow.start_run():
    # モデルをトレーニング
    model = train_model(X_train, y_train)

    # SHAP を計算
    explainer = shap.TreeExplainer(model)
    shap_values = explainer(X_test)

    # プロットをログ
    shap.plots.beeswarm(shap_values, show=False)
    mlflow.log_figure(plt.gcf(), "shap_beeswarm.png")
    plt.close()

    # 特徴量重要度メトリクスをログ
    mean_abs_shap = np.abs(shap_values.values).mean(axis=0)
    for feature, importance in zip(X_test.columns, mean_abs_shap):
        mlflow.log_metric(f"shap_{feature}", importance)

本番 API

class ExplanationService:
    def __init__(self, model_path, explainer_path):
        self.model = joblib.load(model_path)
        self.explainer = joblib.load(explainer_path)

    def predict_with_explanation(self, X):
        prediction = self.model.predict(X)
        shap_values = self.explainer(X)

        return {
            'prediction': prediction[0],
            'base_value': shap_values.base_values[0],
            'feature_contributions': dict(zip(X.columns, shap_values.values[0]))
        }

リファレンスドキュメント

このスキルには、トピック別に整理された包括的なリファレンスドキュメントが含まれています:

references/explainers.md

全エクスプレーナークラスの完全なガイド:

  • TreeExplainer - ツリーベースのモデル用の高速で正確な説明
  • DeepExplainer - 深層学習モデル (TensorFlow、PyTorch)
  • KernelExplainer - モデル非依存 (任意のモデルで動作)
  • LinearExplainer - 線形モデル用の高速な説明
  • GradientExplainer - ニューラルネットワーク用の勾配ベース
  • PermutationExplainer - 任意のモデル用で正確だが遅い

含まれるもの: コンストラクタパラメータ、メソッド、サポートされるモデル、使用時期、例、パフォーマンス考慮事項。

references/plots.md

包括的なビジュアライゼーションガイド:

  • ウォーターフォールプロット - 個別の予測の分解
  • ビースウォームプロット - 値の分布を示すグローバルな重要度
  • バープロット - 特徴量の重要度のクリーンなまとめ
  • 散布図 - 特徴量と予測の関係と相互作用
  • フォースプロット - インタラクティブな加算的フォースの可視化
  • ヒートマップ - 複数サンプル比較グリッド
  • バイオリンプロット - 分布に焦点を当てた代替案
  • 決定プロット - マルチクラス予測パス

含まれるもの: パラメータ、ユースケース、例、ベストプラクティス、プロット選択ガイド。

references/workflows.md

詳細なワークフローとベストプラクティス:

  • 基本的なモデルの説明ワークフロー
  • モデルのデバッグと検証
  • 特徴量エンジニアリングガイダンス
  • モデルの比較と選択
  • 公平性とバイアスの分析
  • 深層学習モデルの説明
  • 本番環境へのデプロイ
  • 時系列モデルの説明
  • 一般的な落とし穴と解決策
  • 高度な技術
  • MLOps 統合

含まれるもの: ステップバイステップの指示、コード例、決定基準、トラブルシューティング。

references/theory.md

理論的基礎:

  • ゲーム理論の Shapley 値
  • 数学的公式とプロパティ
  • 他の説明手法との関連 (LIME、DeepLIFT など)
  • SHAP 計算アルゴリズム (Tree SHAP、Kernel SHAP など)
  • 条件付き期待値とベースライン選択
  • SHAP 値の解釈
  • 相互作用値
  • 理論的な制限と考慮事項

含まれるもの: 数学的基礎、証明、比較、高度なトピック。

使用ガイドライン

リファレンスファイルを読み込むタイミング:

  • 特定のエクスプレーナータイプまたはパラメータの詳細情報が必要な場合は explainers.md を読み込む
  • ビジュアライゼーションの詳細なガイダンスまたはプロットオプションの探索が必要な場合は plots.md を読み込む
  • 複雑なマルチステップタスク (デバッグ、公平性分析、本番デプロイ) がある場合は workflows.md を読み込む
  • 理論的基礎、Shapley 値、または数学的詳細について質問がある場合は theory.md を読み込む

デフォルトのアプローチ (リファレンスを読み込まない場合):

  • このスキル SKILL.md を基本的な説明とクイックスタートに使用
  • 標準的なワークフローと一般的なパターンを提供
  • より詳細が必要な場合、リファレンスファイルが利用可能

リファレンスの読み込み:

# リファレンスファイルを読み込むには、適切なファイルパスで Read ツールを使用:
# /path/to/shap/references/explainers.md
# /path/to/shap/references/plots.md
# /path/to/shap/references/workflows.md
# /path/to/shap/references/theory.md

ベストプラクティスのまとめ

  1. 正しいエクスプレーナーを選択: 可能な限り専用エクスプレーナー (TreeExplainer、DeepExplainer、LinearExplainer) を使用; 必要な場合を除き KernelExplainer を避ける

  2. グローバルから始めてから、ローカルに移る: 全体的な理解のためにビースウォーム/バープロットから始め、その後、詳細のためにウォーターフォール/散布図に移る

  3. 複数のビジュアライゼーションを使用: 異なるプロットは異なった洞察を明かす; グローバル (ビースウォーム) + ローカル (ウォーターフォール) + 関係 (散布図) のビューを組み合わせる

  4. 適切な背景データを選択: トレーニングデータから 50-1000 の代表的なサンプルを使用

  5. モデル出力の単位を理解: 確率、対数オッズ、または生の出力を説明しているかを知る

  6. ドメイン知識で検証: SHAP はモデルの動作を示す; 解釈と検証にドメイン知識を使用

  7. パフォーマンスを最適化: ビジュアライゼーション用にサブセットをサンプリング、大規模データセット用にバッチ処理、本番環境でエクスプレーナーをキャッシュ

  8. データリーケージを確認: 予期しない高い特徴量の重要度はデータ品質の問題を示す可能性

  9. 特徴量の相関を考慮: TreeExplainer の相関対応オプションを使用するか、冗長な特徴量の特徴量クラスタリング

  10. SHAP は関連性を示す、因果性ではない: 因果解釈にはドメイン知識を使用

インストール

# 基本的なインストール
uv pip install shap

# ビジュアライゼーション依存関係を含む
uv pip install shap matplotlib

# 最新版
uv pip install -U shap

依存関係: numpy、pandas、scikit-learn、matplotlib、scipy

オプション: xgboost、lightgbm、tensorflow、torch (モデルタイプに応じて)

追加リソース

  • 公式ドキュメント: https://shap.readthedocs.io/
  • GitHub リポジトリ: https://github.com/slundberg/shap
  • オリジナルペーパー: Lundberg & Lee (2017) - "A Unified Approach to Interpreting Model Predictions"
  • Nature MI ペーパー: Lundberg et al. (2020) - "From local explanations to global understanding with explainable AI for trees"

このスキルは、すべてのユースケースとモデルタイプに対する SHAP の包括的なカバレッジを提供します。

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
davila7
リポジトリ
davila7/claude-code-templates
ライセンス
MIT
最終更新
不明

Source: https://github.com/davila7/claude-code-templates / ライセンス: MIT

関連スキル

OpenAILLM・AI開発⭐ リポ 6,054

agent-browser

AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。

by JimmyLv
汎用LLM・AI開発⭐ リポ 1,982

anyskill

AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 1,982

engram

AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 21,584

skyvern

AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。

by Skyvern-AI
汎用LLM・AI開発⭐ リポ 1,149

pinchbench

PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。

by pinchbench
汎用LLM・AI開発⭐ リポ 4,693

openui

OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。

by thesysdev
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: davila7 · davila7/claude-code-templates · ライセンス: MIT