精华内容
下载资源
问答
  • Py之shap:shap库的简介、安装、使用方法之详细攻略 目录 shap库的简介 shap库的安装 shap库的使用方法 1、树类集成模型案例 2、带有深度解释器的深度学习示例(TensorFlow/Keras模型) 3、带有...

    Py之shap:shap库的简介、安装、使用方法之详细攻略

     

     

     

    目录

    shap库的简介

    shap库的安装

    shap库的使用方法

    1、树类集成模型案例

    展开全文
  • SHAP(SHapley Additive exPlanations)是一种游戏理论方法,用于解释任何机器学习模型的输出。 它使用博弈论中的经典Shapley值及其相关扩展将最佳信用分配与本地解释联系起来(详细信息和引文,请参见)。 安装 ...
  • 机器学习很大一个问题是可解释性较差,虽然在RandomForest、LightGBM等算法中,均有feature_importance可以展现模型最重要的N个特征,但是对于单个样本来说情况可能并不与整体模型一致,所以就需要使用SHAP等算法将...

    前言:

    机器学习很大一个问题是可解释性较差,虽然在RandomForest、LightGBM等算法中,均有feature_importance可以展现模型最重要的N个特征,但是对于单个样本来说情况可能并不与整体模型一致,所以就需要使用SHAP等算法将每个样本中不同特征的贡献度用数值展现出来。
    对于SHAP算法的原理和其它同类算法可以看这2篇博客:
    https://blog.csdn.net/weixin_41968505/article/details/119885046
    https://zhuanlan.zhihu.com/p/100458526
    本文主要使用SHAP完成每个样本不同特征的贡献度计算,并写了个简单的脚本把前N个重要特征提取出来。

    准备工作:

    首先还是需要传统的数据清洗、建模等,记得安装和导入shap库

    pip install shap
    

    注:我安装的shap版本是0.40.0,所有如果你的版本和我不一致,可能会导致后续代码略有差别。

    所有样本的shap计算:

    我这边的model是lightgbm,也就是树模型,所以使用的是shap.TreeExplainer

    import shap
    explainer = shap.TreeExplainer(model) #这里的model在准备工作中已经完成建模,模型名称就是model
    shap_values = explainer.shap_values(test_data[predictors]) #这里的test_data是我的测试集,predictors是X_train的变量
    

    在这里插入图片描述
    在我的版本里,shap_values是一个list,里面有2个array,第一个array是负向结果的SHAP值,而第二个array是正向结果的SHAP值,需要根据不同的业务场景选择不同的array
    在本次测试中,我做的model是宽带离网预测模型,所以我选择的是第一个array。
    注:在做shap计算前,建议仅把有正样本(比如精准营销的话,就是把潜在客户)放入其中,因为shap的计算真的非常慢,我10000个样本跑了大概7分钟。

    1)、可以输入下列代码显示和feature_importance类似的图片,只是同步会告诉我们不同特征的shap值取值范围是多少。

    shap.summary_plot(shap_values[0], test_data[predictors], plot_type="bar")
    

    在这里插入图片描述
    2)、这是另一种可视化

    shap.summary_plot(shap_values[0], test_data[predictors])
    

    在这里插入图片描述

    获得单个样本的TOP N 特征值和对应的SHAP值

    总算到正文了,我写成了一个函数,参数主要包括:
    old_list:shap_value中某个array的单个元素(类型是list),这里我选择的是array[0]中的590元素
    features: 与old_list的列数相同,主要用于输出的特征能让人看得懂
    top_num:展示前N个最重要的特征
    min_value: 限制了shap值的最小值

    def get_topN_reason(old_list,features=predictors[:22],top_num=3, min_value=0.0):
        #输出shap值最高的N个标签
        feature_importance_dict = {}
        for i, f in zip(old_list, features):
            feature_importance_dict[f] = i
        new_dict = dict(sorted(feature_importance_dict.items(), key=lambda e: e[1],reverse=True))
        return_dict = {}
        for k, v in new_dict.items():
            if top_num>0:
                if v>=min_value:
                    return_dict[k] = v
                    top_num -= 1
                else:
                    break
            else:
                break
        return return_dict
    
    print(get_topN_reason(shap_values[0][590]))
    

    结果:
    在这里插入图片描述

    注1:可以简单改造后变成输出值为dataframe的形式,更进一步则是与原有特征的值结合,因为shap值只能作为排序和筛选,真正要让数据使用者理解,还是要转化业务能够理解的内容,比如“cdma_count(当月移动活跃设备数):2”,“net_play_time(上网时长):1”,“year_pay(是否年付):0”
    注2:在模型训练中,很多特征并不都是可解释的,但是在训练过程中会很有用,所以在可解释性和实用性上需要平衡和取舍。

    展开全文
  • python中安装shap第三方

    千次阅读 2020-09-23 18:48:17
    shap安装失败的话, 再已经安装过anaconda3的前提下,可以用这个命令来安装: conda install -c conda-forge shap

    shap安装失败的话,

    再已经安装过anaconda3的前提下,可以用这个命令来安装:

    conda install -c conda-forge shap
    
    展开全文
  • 来源:大邓和他的PythonSHAP机器学习模型解释想象一下,你正试图训练一个机器学习模型来预测广告是否被特定的人点击。在收到关于某人的一些信息后,模型预测某人会不会点击广告。但是为什么...

    来源:大邓和他的Python

    SHAP机器学习模型解释库

    想象一下,你正试图训练一个机器学习模型来预测广告是否被特定的人点击。在收到关于某人的一些信息后,模型预测某人会不会点击广告。

    7f43a21fed73142848f0ca14375cfc79.png

    但是为什么模型会输出这样的预测结果呢?每个特征对预测的贡献有多大?如果您能看到一个图表,显示每个特征对预测的贡献程度,如下所示,不是很好吗?

    a8dd4b936470a8f6c8cd123fc54c2998.png

    Shapley值就能起到特征权重测度的作用。

    Shapley值是什么?

    Shapley值是博弈论中使用的一种方法,它涉及公平地将收益和成本分配给在联盟中工作的行动者。由于每个行动者对联盟的贡献是不同的,Shapley值保证每个行动者根据贡献的多少获得公平的份额。

    2d2c8a3b7c8ad4a9bbf1fad0b0e4c357.png

    小案例

    Shapley值被广泛地应用于求解群体中每个工人(特征)的贡献问题。要理解Shapley值的作用,让我们想象一下贵公司刚刚做了A/B测试,他们在测试广告策略的不同组合。

    每个策略在特定月份的收入是:

    • 无广告:150美元

    • 社交媒体:300美元

    • 谷歌广告:200美元

    • 电子邮件营销:350美元

    • 社交媒体和谷歌广告:320美元

    • 社交媒体和电子邮件营销:400美元

    • 谷歌广告和电子邮件营销:350美元

    • 电子邮件营销,谷歌广告和社交媒体:450美元

    df3eafd017164f9b0509fa82d4ca0835.png

    使用三则广告与不使用广告的收入相差300美元,每则广告对这一差异有多大的贡献?

    5708368dfa47ba512b9caa48679ff361.png

    我们可以通过计算每一类广告的Shapley值来计算谷歌广告对公司收入的总贡献入手,通过公式可以计算出Google广告的总贡献:

    1fd2e37598da5501819ae3ea4713a4e5.png

    让我们找到Google广告的边际贡献及其权重。

    寻找谷歌广告的边际贡献

    第一,我们将发现谷歌广告对以下群体的边际贡献:

    • 无广告

    • 谷歌广告+社交媒体

    • 谷歌广告+电子邮件营销

    • 谷歌广告+电子邮件营销+社交媒体

    2a65458ae7c0cf07265f827c05ae51ba.png

    Google广告 对 无广告 的边际贡献是:

    c2065365b0fea7f638fa424c420cb0ab.png

    谷歌广告 对 谷歌广告&社交媒体组合 的边际贡献是:

    281018c9d4fb7f754be7fdb60e199e6c.png

    谷歌广告 对 谷歌广告&电子邮件营销组合 的边际贡献是:

    3c58f9a15b61841ecaeb00c92c799e36.png

    谷歌广告 对 谷歌广告、电子邮件营销和社交媒体组合 的边际贡献是:

    52cb947e52f2a55b30d46fb4537cbf36.png

    发现权重

    为了发现权重,我们将把不同广告策略的组合组织成如下多个层次,每个层次对应于每个组合中广告策略的数量。

    然后根据每个层次的边数分配权重,我们看到了这一点:

    • 第一级包含3条边,因此每个边的权重为1/3

    • 第二级包含6条边,因此每条边的权重将为1/6

    • 第三级包含3条边,因此每条边的权重将为1/3

    8ebd85843d99942166b0c4c230ee55cd.png

    发现Google广告的总贡献

    根据前面的权重和边际贡献,我们已经可以找到Google广告的总贡献!

    3daf8562faddf1b76fb69cd1a97b7602.png

    6d9adc4898ad117b3020c2ec5d1afb0e.png

    酷!所以谷歌广告在使用3种广告策略与不使用广告的总收入差异中贡献了36.67美元。36.67是Google广告的Shapey值。

    3cd85e5ae76f3c802f0d3c9bae43f437.png

    重复以上步骤,对于另外两种广告策略,我们可以看出:

    • 电子邮件营销贡献151.67美元

    • 社交媒体贡献116.67美元

    • 谷歌广告贡献36.67美元

    c50c225d6ca597521ab6c34ee44de878.png

    他们共同出资300美元,用于使用3种不同类型的广告与不使用广告的区别!挺酷的,不是吗? 既然我们理解了Shapley值,那么让我们看看如何使用它来解释机器学习模型。

    SHAP-在Python中解释机器学习模型

    SHAP是一个Python库,它使用Shapley值来解释任何机器学习模型的输出。

    安装SHAP

    !pip3 install shap

    训练模型

    为了理解SHAP工作原理,我们使用Kaggle平台内的advertising广告数据集。

    import pandas as pd 
    
    df = pd.read_csv("advertising.csv")
    df.head()

    f9b326904c2233ca100bcf9bd03cc8b0.png

    我们将建立一个机器学习模型, 该模型根据用户个人特质信息来预测其是否点击广告。

    我们使用Patsy将DataFrame转换为一组特征和一组目标值:

    from patsy import dmatrices
    from sklearn.model_selection import train_test_split
    
    y, X = dmatrices(
        "clicked_on_ad ~ daily_time_spent_on_site + age + area_income + daily_internet_usage  + male -1",
        data=df,
    )
    
    X_frame = pd.DataFrame(data=X, columns=X.design_info.column_names)

    把数据分为测试集和训练接

    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=7)

    接下来使用XGBoost训练模型,并做预测

    import xgboost
    model = xgboost.XGBClassifier().fit(X_train, y_train)
    y_predicted = model.predict(X_test)

    为了查看模型表现,我们使用F1得分

    from sklearn.metrics import f1_score
    
    f1 = f1_score(y_test, y_predicted)
    f1
    0.9619047619047619

    太好了!

    解释该模型

    该模型很好地预测了用户是否点击广告。但它是如何得出这样的预测的? 每个特征对最终预测与平均预测的差异贡献了多少?

    注意,这个问题与我们在文章开头论述的问题非常相似。

    因此,寻找每个特征的Shapley值可以帮助我们确定它们的贡献。得到特征i的重要性的步骤与之前类似,其中i是特征的索引:

    • 获取所有不包含特征i的子集

    • 找出特征i对这些子集中每个子集的边际贡献

    • 聚合所有边际贡献来计算特征i的贡献

    若要使用SHAP查找Shapley值,只需将训练好的模型插入shap.Explainer

    import shap
    
    explainer = shap.Explainer(model)
    shap_values = explainer(X_frame)
    ntree_limit is deprecated, use `iteration_range` or model slicing instead.

    SHAP瀑布图

    可视化第一个预测的解释:

    #第一条记录是未点击
    shap.plots.waterfall(shap_values[0])

    0631e7f654520ef447fe625f6cca2147.png

    啊哈!现在我们知道每个特征对第一次预测的贡献。对上图的解释:

    555e9f2fd1ae5a10f50ef7d12ea841ab.png

    • 蓝色条显示某一特定特征在多大程度上降低了预测的值。

    • 红条显示了一个特定的特征在多大程度上增加了预测值。

    • 负值意味着该人点击广告的概率小于0.5

    我们应该期望总贡献等于预测与均值预测的差值。我们来验证一下:

    总贡献等于预测与均值预测的差值.png)

    酷!他们是平等的。

    可视化第二个预测的解释:

    #第二条记录也是未点击
    shap.plots.waterfall(shap_values[1])

    e2df1c3616e36d49fafdc45e355a4d25.png

    SHAP摘要图

    我们可以使用SHAP摘要图,而不是查看每个单独的实例,来可视化这些特性对多个实例的整体影响:

    shap.summary_plot(shap_values, X)

    b89c8a1f99b1f0db6ea1f8835b6a2456.png

    SHAP摘要图告诉我们数据集上最重要的特征及其影响范围。

    从上面的情节中,我们可以对模型的预测获得一些有趣的见解:

    • 用户的 daily_internet_usage 对该用户是否点击广告的影响最大。

    • 随着daily_time_spent_on_site的增加,用户点击广告的可能性降低。

    • 随着area_income的增加,用户点击广告的可能性降低。

    • 随着age的增长,用户更容易点击广告。

    • 如果用户是male,则该用户点击广告的可能性较小。

    SHAP条形图

    我们还可以使用SHAP条形图得到全局特征重要性图。

    shap.plots.bar(shap_values)

    a886eee0270fa8fb34a5fe6d69913c47.png

    很酷!

    结论

    恭喜你!您刚刚了解了Shapey值以及如何使用它来解释一个机器学习模型。希望本文将提供您使用Python来解释自己的机器学习模型的基本知识。

    下载代码

    链接:https://pan.baidu.com/s/1R8i-9F7n8IhqdvXkpYIMCg  密码:iqkt

    原文作者: khuyentran

    原文链接 https://towardsdatascience.com/shap-explain-any-machine-learning-model-in-python-24207127cad7   

    
     

    
     

    ---------End---------

    顺便给大家推荐下我的微信视频号「Python数据之道」,欢迎扫码关注。

    379202546fb568d1393047b1ae1c8d39.gif

    展开全文
  • 可解释的机器学习SHAP

    千次阅读 2020-11-09 16:12:02
    1.SHAP介绍 SHAP(SHapley Additive exPlanations),是Python开发的一个“模型解释”包,它可以解释任何机器学习模型的输出。 所有的特征都被视为“贡献者”。 对于每个预测样本,模型都产生一个预测值,SHAP ...
  • 尽管BorutaShap的运行时性能有所提高,但是SHAP TreeExplainer随观察次数线性增长,这使得它在处理大型数据集时非常麻烦。 为了解决这个问题,BorutaShap包含了一个采样过程,该过程使用算法每次迭代时可用数据的...
  • 模型的评测指标只能反映它准不准, 如果没有好的可解释性, 人们就会担心它不够鲁棒, ...SHAP 是一个, 依据 组合博弈论领域 中的 shapely value 思想, 对模型的单个预测作解释. shapely value transformer 搭配 ...
  • 数据分析SHAP工具

    2021-06-07 09:53:02
    文章目录SHAP使用单个case预测的解释多个case预测的解释参考博客 SHAP使用 SHAP: 名称来源于Shapley Additive explanation. 可以解释任何机器学习模型的输出。shap value是预测样本预测值中每个特征分配到的数值,还...
  • pip安装shap报错

    2021-05-29 14:37:04
    python pip install shap 报错 error ERROR: Command errored out with exit status 1: linux pip安装shap 报错 Building wheel for shap (setup.py) … error ERROR: Command errored out with exit status 1: ...
  • 在越来越多的领域中机器学习模型已开始需要更高的标准, 例如模型预测中公司需要对模型产生的任何虚假预测负责。...SHAP —表示SHapley Additive ExPlanations是一种解释来自机器学习模型的单个预测的方
  • shap 数据分析

    2019-03-17 22:12:53
    http://www.pig66.com/2019/145_0313/17714484.html
  • shap安装记录

    千次阅读 2020-07-09 11:04:16
    pip install shap ## 安装python 报错1: 解决1: 将python切换为python3.6即可(可重建一个python3.6的虚拟环境) step2. 在pycharm中运行脚本 import xgboost import shap # 训练一个XGBoost 模型 X, y = shap....
  • 为了在特征选择过程中更好地利用 SHAP 的功能,我们发布了 shap-hypetune:一个用于同时调整超参数和特征选择的 Python 包。它允许在为梯度提升模型定制的单个管道中组合特征选择和参数调整。它支持网格搜索或随机...
  • 观察到的特点是, 以短语为粒度, 而非逐个token地计算shap value(虽然下方的数据粒度是单个token, 那是因为在计算到短语粒度后, 按term个数又做了除法). shap_values .values = array([[[ 0. , 0. ], [-1.22018296, ...
  • 利用Shap解释Xgboost(或者别的)模型

    千次阅读 2019-12-07 16:33:07
    Shap的一些介绍: SHAP包 算法解析 shap的中文解析 知乎的翻译 ps,sklearn的模型可以用lime模块解析 本文参考利用SHAP解释Xgboost模型 数据集
  • 利用SHAP解释Xgboost模型 Xgboost相对于线性模型在进行预测时往往有更好的精度,但是同时也失去了线性模型的可解释性。所以Xgboost通常被认为是黑箱模型。 2017年,Lundberg和Lee的论文提出了SHAP值这一广泛适用的...
  • features=X,interaction_index='RAD') # 其他类型的explainers # SHAP库可用的explainers有: # deep:用于计算深度学习模型,基于DeepLIFT算法 # gradient:用于深度学习模型,综合了SHAP、集成梯度、和SmoothGrad...
  • 完成特定的功能需要对应的python 比如你要进行深度学习我们就可以选择安装tensorflow 我常用的是pip安装,还有的用的是conda安装,不习惯。 进入Anaconda的包下载命令行界面 操作如下: 进入Anaconda prompt即可.....
  • SHAP模型:可解释机器学习模型

    千次阅读 2021-08-24 10:47:29
    首先个人理解SHAP模型是对机器学习模型进行解释的一个模型 上面这个图就是一个比较直观的解释 机器学习模型一般都是一个黑盒。比如某个模型要进行一些预测任务,首先对模型输入一些已知条件(Age=65,Sex=F,BP=...
  • 机器学习模型的解释-SHAP

    千次阅读 2020-05-18 15:01:59
    数据监控SHAPSHAPSHAP值基于Shapley值,Shapley值是博弈论中的一个概念。SHAP所做的是量化每个特征对模型所做预测的贡献。 对于所有的特征上图可以自由组合共有2^3=8种可能(数学中称为power set即幂集)。...
  • SHAP简介 SHAP优点: 缺点 应用方法 SHAP简介 SHAP(SHapleyAdditive exPlanation)是解决模型可解释性的一种方法。SHAP基于Shapley值,该值是经济学家Lloyd Shapley提出的博弈论概念。“博弈”是指有多个个体,...
  • https://github.com/slundberg/shap https://github.com/marcotcr/lime https://github.com/NTMC-Community/MatchZoo/tree/1.0 相关论文 A Deep Relevance Matching Model for Ad-hoc Retrieval CIKM 2016 Text ...
  • SHAP解释模型

    2021-09-20 17:07:51
    以下实验使用当前最新版本shap:0.39.0 $ pip install shap 注意xgboost也需要使用对应的较新版本,如: $ pip install xgboost==0.82 为使用交互界面,notebook环境下,加载用于可视化的JS代码 import ...
  • shap 模型Responsible AI has been a very hot topic in recent years. Accountability and explainability now become the necessary components of your machine learning models, particularly when the models ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 699
精华内容 279
关键字:

shap库