You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SHAP summary_plot条形图与常规图Y轴特征不一致问题咨询

SHAP summary_plot两类图表Y轴特征顺序不一致原因说明

这个现象不是代码bug,是SHAP针对分类任务的固有默认排序逻辑差异导致的。

两类图表的默认排序规则

  • 条形图(指定plot_type="bar"):默认统计所有类别下每个特征的平均绝对SHAP值的全局均值,按该综合值从高到低排序展示特征,反映特征对全部分类类别的整体贡献度。
    随机森林分类器调用shap_values()会返回长度等于类别数的列表,每个元素对应一个类别的SHAP值矩阵,条形图默认会遍历所有类别的SHAP值做聚合计算后排序。
  • 默认蜂群图(不指定plot_type):旧版本SHAP(0.40之前的主流稳定版)在传入多类别SHAP值列表时,会默认取列表最后一个元素(通常对应分类任务的正类),单独计算该类别下每个特征的平均绝对SHAP值,按单类别贡献度排序,不会做跨类别聚合。

顺序差异的核心原因

两个图排序时依赖的统计口径完全不同:一个是跨类别聚合后的全局贡献排序,一个是单个类别(默认最后一类)的贡献排序。当不同特征在不同类别上的贡献度差异较大时,Y轴的特征顺序、甚至Top特征的展示范围都会出现明显差异。

对齐两类图表顺序的方法

不需要手动提前对特征做排序,只要统一两个图的SHAP值统计口径即可:

  1. 如果要统一展示单类别(比如二分类的正类)的特征贡献,绘图时明确传入对应类别的SHAP值矩阵即可:
import shap

explainer = shap.TreeExplainer(clf)
shap_values = explainer.shap_values(X_test)
# 二分类场景取索引为1的正类SHAP值,两个图使用同一份数据
target_shap = shap_values[1]
shap.summary_plot(target_shap, X_test, plot_type="bar")
shap.summary_plot(target_shap, X_test)
  1. 如果要让蜂群图和默认条形图一致,使用跨类别全局贡献排序,调用蜂群图时增加class_inds="all"参数即可。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 03:24:28