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

如何将Catboost模型对应的SHAP值转换为便于解读的概率形式

Catboost模型SHAP值转概率的实现方案

Catboost的shap.TreeExplainer确实不直接支持model_output='probability'参数,你可以通过以下两种方式实现概率尺度的SHAP解释:


方案1:直接通过绘图函数的link参数转换(最简方案,适合可视化场景)

SHAP的所有内置绘图函数都支持link参数,传入logit即可自动将默认的对数几率(log-odds)尺度的SHAP值映射为概率尺度,无需手动修改SHAP值本身:

import shap

# 初始化explainer和计算SHAP值的逻辑保持不变
explainer = shap.TreeExplainer(catboost_model)
shap_values = explainer.shap_values(X_train)
expected_value = explainer.expected_value

# 汇总图转概率轴
shap.summary_plot(shap_values, X_train, link='logit')

# 力图转概率轴,加matplotlib=True可输出静态可视化
shap.force_plot(expected_value, shap_values, X_train, link='logit', matplotlib=True)

# 特征依赖图转概率轴
shap.dependence_plot("your_feature_name", shap_values, X_train, link='logit')

该方案适配二分类场景,转换后图表的X轴会直接显示概率值,符合业务解读习惯。


方案2:手动映射转换(适合需要提取特征概率贡献数值的场景)

如果需要拿到每个特征对应的概率贡献量化值,可以手动通过Sigmoid函数做非线性转换:

import numpy as np

def logit2prob(logit_val):
    return 1 / (1 + np.exp(-logit_val))

# 全局基准概率:所有样本的平均预测概率
base_prob = logit2prob(expected_value)

# 单样本总预测概率
sample_pred_prob = logit2prob(expected_value + shap_values.sum(axis=1))

# 单特征的近似概率贡献
# 注意:概率为非线性转换结果,特征贡献不严格可加,误差属于正常情况
feature_prob_contribution = logit2prob(expected_value + shap_values) - base_prob

注意事项

多分类场景可参考上述逻辑,使用Softmax函数替换Sigmoid做转换即可。如果需要严格可加的特征贡献解释,仍建议保留对数几率尺度的SHAP值,概率尺度更适合面向非技术人员的可视化展示。


内容的提问来源于stack exchange,提问作者Tara-S1983

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:06:03