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

回归任务下Shap Beeswarm图配色设置及SHAP值信息提取咨询

回归任务下的SHAP Beeswarm图适配与信息提取

一、配色设置(替代分类标签的方案)

回归任务没有离散分类标签,可采用两种实用配色逻辑:

  • 用回归预测值作为配色:直观展示SHAP值分布与最终预测结果的关联
  • 用原始特征的数值作为配色:分析单个特征取值对其SHAP贡献的影响

修改后的代码示例

import shap
import pandas as pd
import numpy as np
import plotly.express as px

# 初始化SHAP解释器(回归任务沿用predict方法)
explainer = shap.Explainer(best_model.predict, X_test)
shap_values = explainer(X_test)

# 构造SHAP数据框:包含预测值、样本ID、各特征SHAP值
shap_df = pd.DataFrame(
    np.c_[best_model.predict(X_test), shap_values.values],
    columns = ['predictions'] + list(X_test.columns)
)
# 关联样本ID(替换为你的实际ID列)
shap_df['transaction_id'] = X_test.index

# 按特征SHAP绝对值均值排序(保留原逻辑)
values = shap_df.iloc[:,1:-1].abs().mean(axis=0).sort_values().index
df_plot = pd.melt(shap_df, id_vars=['transaction_id', 'predictions'], value_vars=values, var_name='Feature', value_name='SHAP')

# 配色方案1:用回归预测值做连续色阶
fig = px.strip(df_plot, x='SHAP', y='Feature', color='predictions', 
               stripmode='overlay', height=4000, width=1000, 
               hover_data=['transaction_id', df_plot.index],
               color_continuous_scale='RdBu')

# 配色方案2:用单个关键特征(如'house_area')做颜色
# fig = px.strip(df_plot, x='SHAP', y='Feature', color=X_test['house_area'].values, 
#                stripmode='overlay', height=4000, width=1000, 
#                hover_data=['transaction_id', df_plot.index],
#                color_continuous_scale='Viridis')

# 保留原布局设置
fig.update_layout(xaxis=dict(showgrid=True, gridcolor='WhiteSmoke', zerolinecolor='Gainsboro'),
                  yaxis=dict(showgrid=True, gridcolor='WhiteSmoke', zerolinecolor='Gainsboro'),
                  plot_bgcolor='white',
                  boxgap=0)
fig.update_traces(jitter=1)
fig.write_html('regression_beeswarm.html')

二、从SHAP值中提取关键信息

1. 全局特征重要性

按特征SHAP值的绝对值均值排序,得到最影响模型预测的特征:

feature_importance = pd.DataFrame({
    'feature': X_test.columns,
    'shap_importance': np.abs(shap_values.values).mean(axis=0)
}).sort_values('shap_importance', ascending=False)

2. 单个样本的贡献分析

查看单条样本中各特征对预测值的拉抬/压低作用:

# 取第0个样本的SHAP贡献详情
sample_shap = pd.DataFrame({
    'feature': X_test.columns,
    'shap_value': shap_values.values[0],
    'feature_value': X_test.iloc[0].values
}).sort_values('shap_value', ascending=False)
# 正SHAP值=拉高预测值,负SHAP值=拉低预测值

3. 特征与SHAP值的关联趋势

分析单个特征取值和其SHAP值的对应关系,判断特征对预测的影响方向:

# 以特征'house_area'为例
feature_name = 'house_area'
feature_shap_df = pd.DataFrame({
    'feature_value': X_test[feature_name],
    'shap_value': shap_values.values[:, X_test.columns.get_loc(feature_name)]
})
# 可视化趋势
fig = px.scatter(feature_shap_df, x='feature_value', y='shap_value')
fig.write_html('feature_shap_trend.html')

4. 基准值解读

shap_values.base_values是模型的基准预测值(无特征输入时的平均预测结果),单个样本的预测值=基准值+该样本所有特征的SHAP值之和:

base_value = shap_values.base_values[0]  # 所有样本基准值一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:33:08