跳到主要内容
哒哒星球DADA PLANET

Skill · 已公开版本

shap · 用 SHAP 解释模型的预测依据

为已训练模型选择解释器与背景数据,分析整体和单次预测的特征贡献,并检查解释是否适用。

先看看示例

作者提供的示例,实际效果取决于你的输入和使用工具。

输入

已加载 tree_model;X_background 与 X_one 列相同,特征为 distance_km、queue_size、is_peak;输出单位是预计延迟分钟。

输出

编辑示例 · 未运行

import shap
explainer = shap.Explainer(tree_model, X_background)
explanation = explainer(X_one)
shap.plots.waterfall(explanation[0], show=False)
# 核对:base_values[0] + values[0].sum() 应接近该样本的模型输出。
# 图注:贡献相对于所选背景订单;特征作用不是调度措施的因果效果。

方法说明

为已训练模型选择解释器与背景数据,分析整体和单次预测的特征贡献,并检查解释是否适用。

具体任务

解释某个预测为何偏高:选择与模型和输出语义匹配的 SHAP explainer,查看局部特征贡献。

比较全局与群组贡献:在明确背景样本的前提下汇总解释,检查不同群组的表现差异。

必需材料

已拟合模型及运行依赖

特征含义与待解释样本

解释目标是概率、原始分数还是其他输出

可选材料

代表性背景样本

群组字段和已有验证记录

使用门槛

模型本身已经过基本验证,输入列顺序可复现。

这个 Skill 额外提供的方法

先讲清解释的对象和基准,再提供图表,减少“贡献值是什么”的误读。

编辑示例(未运行)

解释一个订单的延迟评分

任务:给树模型回归预测写局部解释代码。

输入:
已加载 tree_model;X_background 与 X_one 列相同,特征为 distance_km、queue_size、is_peak;输出单位是预计延迟分钟。

结果片段:
```python
import shap
explainer = shap.Explainer(tree_model, X_background)
explanation = explainer(X_one)
shap.plots.waterfall(explanation[0], show=False)
# 核对:base_values[0] + values[0].sum() 应接近该样本的模型输出。
# 图注:贡献相对于所选背景订单;特征作用不是调度措施的因果效果。
```

展示解释与加和核对方法,未伪造某个特征的贡献值。 此为编辑示例,未安装或运行上游 Skill。

首次任务

解释【模型】对【样本】的【输出含义】,使用【背景样本】;验收:输出空间说明清楚,特征顺序一致,加和核对通过并注明非因果。
必需材料:已拟合模型及运行依赖:【请填写或粘贴】;特征含义与待解释样本:【请填写或粘贴】;解释目标是概率、原始分数还是其他输出:【请填写或粘贴】

验收方法

背景样本是否代表解释要比较的基准

多输出模型是否选对类别或输出维度

贡献和基准的加和是否对应目标预测

依赖与准备

上游固定版要求 Python 3.12+、uv 与 SHAP 0.52.0;还需对应模型库,GPU 并非所有任务必需。

使用边界

SHAP 描述模型如何利用特征,不证明现实因果。

背景样本与输出空间改变会影响解释,敏感样本需在授权环境处理。

排错

waterfall 图报维度错误:检查多类别输出维度,先选定一个样本和一个目标类别。

同一个样本解释结果差异很大:固定模型、背景数据和 masker,并确认比较的是同一输出空间。

固定来源

https://github.com/K-Dense-AI/scientific-agent-skills/blob/065b734670d7d990627dbc06a05b5a99be33f1f1/skills/shap/SKILL.md