alterlab-shap — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited alterlab-shap (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
SHAP is a unified approach to explain machine learning model outputs using Shapley values from cooperative game theory. This skill provides comprehensive guidance for:
SHAP works with all model types: tree-based models (XGBoost, LightGBM, CatBoost, Random Forest), deep learning models (TensorFlow, PyTorch, Keras), linear models, and black-box models.
Trigger this skill when users ask about:
Decision Tree:
shap.TreeExplainer (fast, exact)shap.DeepExplainer or shap.GradientExplainershap.LinearExplainer (extremely fast)shap.KernelExplainer (model-agnostic but slower)shap.Explainer (automatically selects best algorithm)See `references/explainers.md` for detailed information on all explainer types.
import shap
# Example with tree-based model (XGBoost)
import xgboost as xgb
# Train model
model = xgb.XGBClassifier().fit(X_train, y_train)
# Create explainer
explainer = shap.TreeExplainer(model)
# Compute SHAP values
shap_values = explainer(X_test)
# The shap_values object contains:
# - values: SHAP values (feature attributions)
# - base_values: Expected model output (baseline)
# - data: Original feature valuesFor Global Understanding (entire dataset):
# Beeswarm plot - shows feature importance with value distributions
shap.plots.beeswarm(shap_values, max_display=15)
# Bar plot - clean summary of feature importance
shap.plots.bar(shap_values)For Individual Predictions:
# Waterfall plot - detailed breakdown of single prediction
shap.plots.waterfall(shap_values[0])
# Force plot - additive force visualization
shap.plots.force(shap_values[0])For Feature Relationships:
# Scatter plot - feature-prediction relationship
shap.plots.scatter(shap_values[:, "Feature_Name"])
# Colored by another feature to show interactions
shap.plots.scatter(shap_values[:, "Age"], color=shap_values[:, "Education"])See `references/plots.md` for comprehensive guide on all plot types.
This skill supports several common workflows. Choose the workflow that matches the current task.
Goal: Understand what drives model predictions
Steps:
Example:
# Step 1-2: Setup
explainer = shap.TreeExplainer(model)
shap_values = explainer(X_test)
# Step 3: Global importance
shap.plots.beeswarm(shap_values)
# Step 4: Feature relationships
shap.plots.scatter(shap_values[:, "Most_Important_Feature"])
# Step 5: Individual explanation
shap.plots.waterfall(shap_values[0])Goal: Identify and fix model issues
Steps:
See `references/workflows.md` for detailed debugging workflow.
Goal: Use SHAP insights to improve features
Steps:
See `references/workflows.md` for detailed feature engineering workflow.
Goal: Compare multiple models to select best interpretable option
Steps:
See `references/workflows.md` for detailed model comparison workflow.
Goal: Detect and analyze model bias across demographic groups
Steps:
See `references/workflows.md` for detailed fairness analysis workflow.
Goal: Integrate SHAP explanations into production systems
Steps:
See `references/workflows.md` for detailed production deployment workflow.
Definition: SHAP values quantify each feature's contribution to a prediction, measured as the deviation from the expected model output (baseline).
Properties:
Interpretation:
Example:
Baseline (expected value): 0.30
Feature contributions (SHAP values):
Age: +0.15
Income: +0.10
Education: -0.05
Final prediction: 0.30 + 0.15 + 0.10 - 0.05 = 0.50Purpose: Represents "typical" input to establish baseline expectations
Selection:
Impact: Baseline affects SHAP value magnitudes but not relative importance
Critical Consideration: Understand what your model outputs
Example: XGBoost classifiers explain margin output (log-odds) by default. To explain probabilities, use model_output="probability" in TreeExplainer.
# 1. Setup
explainer = shap.TreeExplainer(model)
shap_values = explainer(X_test)
# 2. Global importance
shap.plots.beeswarm(shap_values)
shap.plots.bar(shap_values)
# 3. Top feature relationships
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. Example predictions
for i in range(5):
shap.plots.waterfall(shap_values[i])# Define cohorts
cohort1_mask = X_test['Group'] == 'A'
cohort2_mask = X_test['Group'] == 'B'
# Compare feature importance
shap.plots.bar({
"Group A": shap_values[cohort1_mask],
"Group B": shap_values[cohort2_mask]
})# Find errors
errors = model.predict(X_test) != y_test
error_indices = np.where(errors)[0]
# Explain errors
for idx in error_indices[:5]:
print(f"Sample {idx}:")
shap.plots.waterfall(shap_values[idx])
# Investigate key features
shap.plots.scatter(shap_values[:, "Suspicious_Feature"])Explainer Speed (fastest to slowest):
LinearExplainer - Nearly instantaneousTreeExplainer - Very fastDeepExplainer - Fast for neural networksGradientExplainer - Fast for neural networksKernelExplainer - Slow (use only when necessary)PermutationExplainer - Very slow but accurateFor Large Datasets:
# Compute SHAP for subset
shap_values = explainer(X_test[:1000])
# Or use batching
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)For Visualizations:
# Sample subset for plots
shap.plots.beeswarm(shap_values[:1000])
# Adjust transparency for dense plots
shap.plots.scatter(shap_values[:, "Feature"], alpha=0.3)For Production:
# Cache explainer
import joblib
joblib.dump(explainer, 'explainer.pkl')
explainer = joblib.load('explainer.pkl')
# Pre-compute for batch predictions
# Only compute top N features for API responsesProblem: Using KernelExplainer for tree models (slow and unnecessary) Solution: Always use TreeExplainer for tree-based models
Problem: DeepExplainer/KernelExplainer with too few background samples Solution: Use 100-1000 representative samples
Problem: Interpreting log-odds as probabilities Solution: Check model output type; understand whether values are probabilities, log-odds, or raw outputs
Problem: Matplotlib backend issues Solution: Ensure backend is set correctly; use plt.show() if needed
Problem: Default max_display=10 may be too many or too few Solution: Adjust max_display parameter or use feature clustering
Problem: Computing SHAP for very large datasets Solution: Sample subset, use batching, or ensure using specialized explainer (not KernelExplainer)
show=True (default). For saving to file, pass show=False then plt.savefig(...).mlflow.log_figure(plt.gcf(), "shap_beeswarm.png") and log np.abs(shap_values.values).mean(0) per feature as metrics. Full snippet in references/workflows.md (MLOps integration).joblib, recompute SHAP at request time, return base value + per-feature contributions. Full ExplanationService class in references/workflows.md (Workflow 7).Load these on demand (via Read) for depth beyond this SKILL.md:
The modern API used throughout this skill — the callable explainer(X) returning an Explanation object, plus the shap.plots.* namespace — requires shap >= 0.41. Latest verified release is 0.52 (June 2026). Pin it in a uv project:
# In a uv project (adds to pyproject.toml + uv.lock):
uv add "shap>=0.41" matplotlib
# Scratch / one-off run (ephemeral env, nothing persisted):
uv run --with "shap>=0.41" --with matplotlib python explain.py(uv pip install works only inside an already-activated venv; prefer uv add / uv run --with so the dependency is recorded.)
Dependencies: numpy, pandas, scikit-learn, matplotlib, scipy (pulled in automatically).
Optional: xgboost, lightgbm, catboost, tensorflow, torch (depending on model types).
This skill provides comprehensive coverage of SHAP for model interpretability across all use cases and model types.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.