SHAP解释模型(二)

本文在SHAP解析模型之后,又尝试了一些SHAP新版本的进阶用法,整理并与大家分享.

1 环境配置

以下实验使用当前最新版本shap:0.41.0,同时安装xgboost作为预测模型,并使用较高版本的matplotlib(低版本有时画图报错).

$ pip install shap==0.41.0
$ pip install xgboost==0.82
$ pip install matplotlib==3.5.2

2 实验数据

仍延用波士顿房价数据集,由于有些方法需要explainer对象,因此构造了shap_value_obj

import shap
import xgboost
X,y = shap.datasets.boston()

model = xgboost.train({"learning_rate": 0.01}, xgboost.DMatrix(X, label=y), 100)
explainer = shap.TreeExplainer(model) 
shap_values = explainer.shap_values(X) 
shap_values_obj = explainer(X) 

3 单特征实验

首先,尝试一些单特征分析方法.

3.1 分析单个实例

在图中主要关注base_value,它是预测的均值,而f(x)展示了该实例的具体预测值,红色和蓝色区域的颜色和宽度展示了主要特征的影响和方向.

shap.force_plot(explainer.expected_value, shap_values[0,:], X.iloc[0,:])

3.2 决策图

决策图可在一张图上展示多个实例的特征对结果的影响,一般情况下,位置越靠上的特征影响越大.本例中设定feature_order='hclust',则是按shap value进行聚类,再按特征的相关度排序,因此线条看起来比较直;其x轴描述的是各个特征对最终预测值拉扯的方向和力度.
使用该方法也可以用于异常值检测,如果有一条线明显与其它线的方向不同,则可能是异常值.

features = X[:20] # 只分析前20个样本
shap_values = explainer.shap_values(features)
shap.decision_plot(explainer.expected_value, shap_values, 
                   features, feature_order='hclust')

3.3 热力图

热力图的横轴是每个实例,纵轴是每个特征对该实例的影响,用颜色描述该特征对该实例的影响方向和力度,比如x轴在300附近的实例,其预测值f(x)在0.5附近,原因是LSTAT对它起到正向作用,而RM对它起负向作用,其它特征影响比较小(浅色).

shap.plots.heatmap(shap_values_obj)

4 特征组合实验

特征组合是数据分析的重要因素,下面实验对特征组合的挖掘方法.

4.1 带聚类的特征图

先对shap value做聚类,此时shap_value值类似的实例被分成一组,相关性强的特征就能显现出来,再画条形图时,展示了特征的相关性.

clustering = shap.utils.hclust(X, y) 
shap.plots.bar(shap_values_obj, 
               clustering=clustering,
               clustering_cutoff=0.5)

4.2 依赖图

依赖图分析一个特征对另一个特征的影响,示图类似shap散点图,横坐标为特征"RM"的取值范围,纵坐标为其取值对应的shap value,颜色分析的是另一特征"RAD"在"RM"变化过程中的分布.

shap.dependence_plot("RM", shap_values_obj.values, X, interaction_index='RAD')

4.3 交互图

交互图对角线上展示的是该特征与预测值的关系,它与最普通的shap plot相一致,对角线以外其它位置是特征两两组合对预测的影响.每个子图的横坐标为shap value,也就是说,子图越宽,该特征组合对结果影响越大.

shap_interaction_values = explainer.shap_interaction_values(X)
shap.summary_plot(shap_interaction_values, X)

4.4 特征组合的影响

将交互图按特征重要性排序后绘图.个人认为下图非常有用,它将单特征与特征组合画在一张图中,可以从中分析出哪些特征组合更为重要.

shap_interaction_values = explainer.shap_interaction_values(X)
shap.summary_plot(shap_interaction_values, X, max_display=10, plot_type="compact_dot")

5 参考

用 SHAP 可视化解释机器学习模型实用指南(下)
数据科学家必备|可解释模型SHAP可视化全解析

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容