精华内容
下载资源
问答
  • 模型可解释性shap
    2021-03-23 14:48:11

    可解释机器学习在这几年慢慢成为了机器学习的重要研究方向。作为数据科学家需要防止模型存在偏见,且帮助决策者理解如何正确地使用我们的模型。越是严苛的场景,越需要模型提供证明它们是如何运作且避免错误的证据

    • SHAP是Python开发的一个"模型解释"包,可以解释任何机器学习模型的输出。其名称来源于SHapley Additive exPlanation,在合作博弈论的启发下SHAP构建一个加性的解释模型,所有的特征都视为“贡献者”。对于每个预测样本,模型都产生一个预测值,SHAP value就是该样本中每个特征所分配到的数值。

    数据集(足球运动员身价估计)来源:http://sofasofa.io/competition.php?id=7

    # -*- coding: utf-8 -*-
    """
    Created on Tue Mar 23 13:50:38 2021
    
    @author: bo.chen
    """
    
    import shap
    from xgboost import XGBRegressor as XGBR
    import<
    更多相关内容
  • 模型可解释性-shap value

    千次阅读 2022-06-13 21:04:13
    Shap值衡量特征的边际贡献度,是当前模型解释的最佳方法之一,对于模型进行可视化的全局解释、局部解释,可以在一定程度上满足业务对于模型解释性的要求。 本文通过实例对shap原理进行讲解,帮助初学者、从业人员...

            Shap值衡量特征的边际贡献度,是当前模型解释的最佳方法之一,对于模型进行可视化的全局解释、局部解释,可以在一定程度上满足业务对于模型解释性的要求。其全局解释,(特征对于整体模型的影响)可以作为特征重要性帮助筛选变量;局部解释(对单个样本的预测结果进行解释)可以直观地让我们看到单个样本预测结果的主要影响因素-特征有哪些、以及相应的影响程度,这样在风控业务中对于模型预测风险偏高的样本、我们可以给出模型认为他风险偏高的原因。

    一、shap的本质原理,以例子来说明:

            有甲、乙、丙三个工人,单人工作时、多人协同工作时每天的罐子产量如下:

            按照产量计算每个人的边际贡献度:

            得到每人的平均贡献度:

    二、代码应用

    1 导包及模型训练

    # 导包
    import pandas as pd
    import numpy as np
    import warnings
    warnings.filterwarnings('ignore')
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import roc_curve,roc_auc_score
    import xgboost as xgb
    import matplotlib.pyplot as plt
    
    # 训练模型
    train=df_train.head(10000)
    test=df_train.tail(5000)
    
    dtrain = xgb.DMatrix(train[col_list], label = train['isDefault'])
    dtest = xgb.DMatrix(test[col_list], label = test['isDefault'])
    
    params={
        'booster': 'gbtree',
        'objective': 'binary:logistic',
        'eval_metric': [ 'logloss','auc'],
        'gamma':10,
        'max_depth': 3}
    model = xgb.train(params=params,
              dtrain=dtrain,
              verbose_eval=True,
              evals=[(dtrain, "train"), (dtest, "valid")],
              early_stopping_rounds=10,
              num_boost_round = 30
                      )

    2 Shap包导入及shap_value计算

    import shap
    shap.initjs() 
    # 加载js,否则会报错Visualization omitted, Javascript library not loaded!

    explainer = shap.Explainer(model)
    shap_values = explainer.shap_values(train[col_list])
    shap_values2=explainer(train[col_list])
    shap_values2

    (一)局部解释性

    对单个样本的预测结果解释,通过shap值展示出各特征值对当前预测结果的贡献度,可以使用shap值top变量给出该条样本最终被拒绝的原因

    (1) 力图

    shap.plots.force(shap_values[0])

            此处第一条样本的实际预测结果为0.3338,在力图及下面瀑布图中显示的结果-0.69与预测概率为logit的关系,两者保持单调;图中红色条框为正向影响、蓝色条框为负向的变量,下方均为相应变量以及变量值,其中interestRate的正向贡献度最大。

    (2)瀑布图

    shapley_value(train[col_list].head(1),model,max_display=10)

            瀑布图中给出了基准线E[f(x)] = -1.445,对应的预测概率计算方式为取反logit:p=1-1/(math.exp(-1.445)+1)=0.19为平均预测概率,此处interestRate贡献度为0.74。瀑布图更加直观地展示出模型对于单个样本预测结果的解释,该样本的预测结果0.3338,结合下图的散点图(interestRate与y标签保持正向相关性)可以给出解释:由于该样本的interestRate值偏高,导致预测概率偏高。

    (3)散点图-依赖图

    shap.plots.scatter(shap_values2[:,"interestRate"])

            散点图可以大致看到interestRate特征与shap值是正相关关系,即其他特征稳定的条件下,interestRate特征值越大、shap值越大、对应的最终预测概率越高。

    shap.dependence_plot('interestRate', shap_values2.values, train[col_list])

    (二) 全局解释性

    (1)蜂窝图

    shap.plots.beeswarm(shap_values2)

            为了了解哪些特征对模型最重要,我们可以绘制每个样本的每个特征的 SHAP 值。蜂窝图按照所有样本的 SHAP 值之和对特征进行降序排序(即特征重要性降序排序),并使用 SHAP 值显示每个特征对模型输出结果的影响分布。颜色代表特征值(红色代表特征值高,蓝色代表特征值低)。此处,红色方向在右边代表特征对模型预测结果的影响为正向的,反之为逆向的。

    (2)平均shap值的条形图

    shap.plots.bar(shap_values2)

            此处取每个特征 SHAP 值的平均绝对值来获得标准条形图,效果类似于feature_importance的条形图,可以通过设置参数来显示多个特征shap值,其他特征的总shap值会放在最后一条。

    更多知识、代码分享请拿起手机微信扫描关注,扫不出吃亏、也扫不出上当

    展开全文
  • 模型可解释性SHAP)

    千次阅读 2020-05-13 10:53:14
    ... 特征重要计算 ...基本思想:计算一个特征加入到模型时的边际贡献,然后考虑到该特征在所有的特征序列的情况下不同的边际贡献,取均值,即某该特征的SHAPbaseline value。 例如:A单独工作产生的价值为v...

    https://christophm.github.io/interpretable-ml-book/

    https://www.jianshu.com/p/324a7c982034

    特征重要性计算

     

     

    夏普利值-博弈论

    SHAP 含义:观察到某一个样本的预测中各个特征对预测结果产生的影响。

    基本思想:计算一个特征加入到模型时的边际贡献,然后考虑到该特征在所有的特征序列的情况下不同的边际贡献,取均值,即某该特征的SHAPbaseline value。

    例如:A单独工作产生的价值为v{A},加入B后共同产生价值v{A,B},那么B的累加贡献是v{A,B}-v{A}.

    对于所有能够形成的全局N的序列,求其中关于元素xi的累加贡献,然后取均值即可得到xi的shapley

    value.

     

    交互shap值

    SHAP包⽂文章:https://github.com/slundberg/shap

    SHAP算法解析:https://towardsdatascience.com/one-feature-attribution-method-to-supposedly-rule-them-all-shapley-values-f3e04534983d

    https://christophm.github.io/interpretable-ml-book/shapley.html

    SHAP包应⽤用中⽂文解析:https://yyqing.me/post/2018/2018-09-25-kaggle-model-insights

    https://christophm.github.io/interpretable-ml-book/shapley.html


     

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

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

     小白进阶选手,如果写的内容有什么问题大家一起讨论学习呀 :)

    模型介绍

    首先个人理解SHAP模型是对机器学习模型进行解释的一个模型

     上面这个图就是一个比较直观的解释

    机器学习模型一般都是一个黑盒。比如某个模型要进行一些预测任务,首先对模型输入一些已知条件(Age=65,Sex=F,BP=180,BMI=40),然后模型根据输入进行训练,最终训练完的模型可以对该条件输出预测结果(Output=0.4)

    所以这样模型只能得到最终的结果,至于模型内部是怎么计算的,输入的已知条件(Age=65,Sex=F,BP=180,BMI=40)是怎么对预测结果(Output=0.4)影响的,我们都没法知道

    而SHAP模型就可以让我们知道这些已知条件到底对最终预测结果起到哪些影响(是对结果起到正向影响还是对结果起到了负向影响),除了SHAP模型,其实也有其他方法可以进行特征重要性的计算,比如下面这个表格里提到的,我们可以根据各种方法的优点选择适合的进行特征重要性计算

    而本文主要介绍的SHAP 属于模型事后解释的方法,它的核心思想是计算特征对模型输出的边际贡献,再从全局和局部两个层面对“黑盒模型”进行解释。SHAP构建一个加性的解释模型,所有的特征都视为“贡献者”

    SHAP的全称是SHapley Additive exPlanation,SHAP是由Shapley value启发的可加性解释模型。而Shapley value起源于合作博弈论,那什么是合作博弈呢。比如说甲乙丙丁四个工人一起打工,甲和乙完成了价值100元的工件,甲、乙、丙完成了价值120元的工件,乙、丙、丁完成了价值150元的工件,甲、丁完成了价值90元的工件,那么该如何公平、合理地分配这四个人的工钱呢?Shapley提出了一个合理的计算方法,我们称每个参与者分配到的数额为Shapley value

    结合文章一开始提到的预测任务,我认为就是已知条件(Age=65,Sex=F,BP=180,BMI=40)一起完成了预测结果(Output=0.4),那么该如何公平、合理地分配这四个已知条件对预测结果的贡献呢?此时SHAP模型就会给这四个已知条件都分配一个Shapley value值,根据这个值我们就可以很好的进行理解

    SHAP可以具体解决的任务

    • 调试模型用
    • 指导工程师做特征工程
    • 指导数据采集的方向
    • 指导人们做决策
    • 建立模型和人之间的信任

    这一部分在https://yyqing.me/post/2018/2018-09-25-kaggle-model-insights这个网站里讲的很详细

    SHAP库可用的explainers

    在SHAP中进行模型解释需要先创建一个explainer,SHAP支持很多类型的explainer

    • deep:用于计算深度学习模型,基于DeepLIFT算法,支持TensorFlow / Keras。
    • gradient:用于深度学习模型,综合了SHAP、集成梯度、和SmoothGrad等思想,形成单一期望值方程,但速度比DeepExplainer慢,并且做出了不同的假设。 此方法基于Integrated Gradient归因方法,并支持TensorFlow / Keras / PyTorch。
    • kernel:模型无关,适用于任何模型
    • linear:适用于特征独立不相关的线性模型
    • tree:适用于树模型和基于树模型的集成算法,如XGBoost,LightGBM或CatBoost

    实验

    在网上找了几个相关的实验跑一下加深印象,SHAP模型输出的可视化图真的是挺美观的

     

    感觉要把SHAP运用理解透,首先对于机器学习的一些模型需要运用的比较熟练

    网上找的的几个代码都是回归类的问题,所以了解的也比较浅显,以后遇到其他问题也可以尝试用SHAP对模型进行解释看看(网上对SHAP解释深度学习模型的例子不算很多,比如有看到一个CV方向的例子,通过SHAP来解释深度学习模型每一层网络对最终检查结果的影响情况,以后可以尝试一下这个方面),然后不断补充这里的实验部分

    问题1:

    足球运动员身价估计

    每个足球运动员在转会市场都有各自的价码,这个问题的目的是根据球员的各项信息和能力值来预测该球员的市场价值。

    问题2:

    波士顿房价估计

    通过数据挖掘对影响波士顿房价的因素进行分析

    具体代码:

    https://colab.research.google.com/drive/1V6XUWCbR7cPKXfdCJXKC1LjNHlg0GpFE?usp=sharing

    SHAP导出各种格式的图

    注意画图前需要加:

    shap.initjs()

    不加就会报错:

    Visualization omitted, Javascript library not loaded!
    Have you run `initjs()` in this notebook? If this notebook was from another user you must also trust this notebook (File -> Trust notebook). If you are viewing this notebook on github the Javascript has been stripped for security. If you are using JupyterLab this error is because a JupyterLab extension has not yet been written.

    如果想要在论文中添加SHAP模型输出的图,只是在代码最后加上plt.savefig,保存下来的图像为空白图。python的shap库,底层仍然使用matplotlib,根据源码可以发现在调用shap.xxx_plot时可以选择传递一个参数就可以正常使用plt.savefig了,几种不同的shap.xxx_plot需要传递的参数可能是不一样的,下面就举几个例子,一般情况下加上matplotlib=True,show = False这两个参数的比较多

    除了下面几个例子,瀑布图直接调用plt.savefig即可,shap.decision_plot则需要传入参数return_objects=True

    shap.force_plot(explainer.expected_value, shap_values[j], data[cols].iloc[j],matplotlib=True,show = False)
    plt.savefig('./result_300dpi.jpg', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.jpg', bbox_inches='tight', dpi=150)
    plt.savefig('./result_300dpi.png', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.png', bbox_inches='tight', dpi=150)
    plt.savefig('./result_300dpi.tiff', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.tiff', bbox_inches='tight', dpi=150)
    plt.savefig('./result_300dpi.svg', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.svg', bbox_inches='tight', dpi=150)
    shap.summary_plot(shap_values, data[cols],show = False)
    plt.savefig('./result_300dpi.jpg', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.jpg', bbox_inches='tight', dpi=150)
    plt.savefig('./result_300dpi.png', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.png', bbox_inches='tight', dpi=150)
    plt.savefig('./result_300dpi.tiff', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.tiff', bbox_inches='tight', dpi=150)
    plt.savefig('./result_300dpi.svg', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.svg', bbox_inches='tight', dpi=150)
    shap.dependence_plot('age', shap_values, data[cols], interaction_index=None, show=False)
    plt.savefig('./result_300dpi.jpg', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.jpg', bbox_inches='tight', dpi=150)
    plt.savefig('./result_300dpi.png', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.png', bbox_inches='tight', dpi=150)
    plt.savefig('./result_300dpi.tiff', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.tiff', bbox_inches='tight', dpi=150)
    plt.savefig('./result_300dpi.svg', bbox_inches='tight', dpi=300)
    plt.savefig('./result_150dpi.svg', bbox_inches='tight', dpi=150)

    References 

    https://www.jianshu.com/p/324a7c982034

    https://zhuanlan.zhihu.com/p/64799119

    https://zhuanlan.zhihu.com/p/83412330

    展开全文
  • 最近在系统性的学习AUTOML一些细节,本篇单纯从实现与解读的角度入手, 因为最近SHAP版本与之前的调用方式有蛮多差异,就从新版本...来看一下SHAP模型,是比较全能的模型可解释性的方法,既作用于之前的全局解释,.
  • 机器学习模型可解释性进行到底 —— SHAP值理论(一) 接下来主要围绕一篇文章的内容展开【黑盒模型实际上比逻辑回归更具可解释性】 源代码部分:smazzanti/tds_black_box_models_more_explainable 自己的测试代码:...
  • 利用SHAP解释Xgboost模型

    千次阅读 2020-10-08 20:06:31
    Xgboost相对于线性模型在进行预测时往往有更好的精度,但是同时也失去了线性模型可解释性。所以Xgboost通常被认为是黑箱模型。 2017年,Lundberg和Lee的论文提出了SHAP值这一广泛适用的方法用来解释各种模型(分类...
  • SHAP-模型可解释性

    千次阅读 2019-07-21 20:41:48
    SHAP使用基础框架 实际效果 预测商品未来一周销量的XGBoost模型特征重要度效果:
  • 关于模型解释性,除了线性模型和决策树这种天生就有很好解释性的模型意外,sklean中有很多模型都有importance这一接口,可以查看特征的重要性。其实这已经含沙射影地体现了模型解释性的理念。只不过传统的importance...
  • 机器学习模型解释-SHAP

    千次阅读 多人点赞 2020-05-18 15:01:59
    SHAP需要为幂集中的每个不同的组合训练一个不同的预测模型,这意味着有8个模型。当然,这些模型在涉及到它们的超参数和训练数据时是完全等价的。唯一改变的是模型中包含的一组特征。 假设上图是已经用相同训练样本...
  • 模型可解释性-SHAPE

    千次阅读 多人点赞 2020-09-09 20:37:33
    SHAP, 全称是 SHapley Additive exPlanation,属于模型事后解释的方法,可以对复杂机器学习模型进行解释,其中各个单词的意义为: SHapley:代表对每个样本中的每一个特征变量,都计算出它的 Shapley Value。 ...
  • 机器学习模型解释性工具SHAP

    千次阅读 2020-09-11 14:22:59
    如下图,SHAP支持模型解释性用于抽取特征对结果的贡献。 Github地址:https://github.com/slundberg/shap 案例: 1、数据集: # dataset:...
  • 然而,许多人还没有意识到机器学习可解释性在业务过程中的重要性。以我的经验,商业人士希望知道模型是如何工作的,而不是度量评估本身。 这就是为什么在这篇文章中,我想向大家介绍我的一些顶级机器学习可解释性 ...
  • 部分依赖图 (PDP) 和个体条件期望 (ICE) 图用于可视化和分析训练目标与一组输入特征之间的交互关系。 部分依赖图(Partial Dependence Plot) 部分依赖图显示了目标函数(即我们的机器学习模型)和一组特征之间的...
  • 模型可解释性模块Shap的使用
  • 机器学习模型可解释性进行到底 —— 从SHAP值到预测概率(二) 机器学习模型可解释性进行到底 —— SHAP值理论(一) 文章目录1 部分依赖图(Partial Dependence Plot)1.1 理论解读1.2 如何根据PDP 进行特征筛选2 ...
  • #模型可解释性
  • 模型可解释性

    2021-07-09 16:07:30
    模型解释性方法-shap 修改方法中将某一特征与其他所有特征子集进行博弈比较,计算其对于其他特征子集对预测结果的影响。预测值和各个特征的贡献值之间存在着这样的映射关系,预测的所有的贡献值求和,代入如上图所...
  • 模型解释性-SHAP

    2019-05-30 10:37:05
    SHAP主要是帮助xgboost,神经网络这类模型的特征重要,与预测值的正负相关 python 安装 pip install shap import xgboost from xgboost import XGBClassifier import shap shap.initjs() # train ...
  • 在医学领域,模型可解释性尤为重要,需要有明确的结论证据支持,然后牵涉到神经网络模型,绕不开的就是黑盒观点。 业界做了很多尝试,发现一片不错的模型可解释介绍。这里依旧做要点记录,以免原链接失效。 原...

空空如也

空空如也

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

模型可解释性shap