基于SHAP的机器学习可解释性实战


💡 作者: 韩信子@ ShowMeAI
📘 机器学习实战系列: https://www.showmeai.tech/tutorials/41
📘 本文地址: https://www.showmeai.tech/article-detail/337
📢 声明:版权所有,转载请联系平台与作者并注明出处
📢 收藏 ShowMeAI查看更多精彩内容



近年来,可解释的人工智能(XAI)和可解释的机器学习引起了越来越多的关注,因为直接把模型当做黑箱使用信任度和可控度都会受影响。有一些领域,模型的可解释性更加重要,例如在医疗领域,患者会质疑为什么模型诊断出他们患有某种疾病。

在本篇内容中, ShowMeAI 将给大家讲解一个流行的模型解释方法 SHAP(SHapley Additive exPlanations),并基于实际案例讲解如何基于工具库对模型做解释。

💡 模型可解释方法的划分

我们对各类模型可解释方法进行划分,有以下一些划分维度:

  • 模型无关和模型特定:一些方法可用于各种模型,而另一些方法是为解释特定模型而创建的。
  • 全局和局部解释:本地意味着进行分析以了解如何做出特定预测。 另一方面,全局解释研究了影响所有预测的因素。
  • 基于模型和事后归因:基于模型的模型是我们可以直接理解的模型,例如线性回归模型。 另一类是事后解释模型的归因方法,大多数方法都属于这一类。

💡 SHAP 原理

📘 SHAP 全称是 SHapley Additive exPlanation,是比较全能的模型可解释性的方法,既可作用于全局解释,也可以局部解释,即单个样本来看,模型给出的预测值和某些特征可能的关系,可以用SHAP来解释。


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

对于每个预测样本,模型都产生一个预测值,SHAP value 就是该样本中每个特征所分配到的数值。


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

💡 案例实战讲解

我们来拿一个场景案例讲解一下SHAP如何进行模型可解释分析,用到的数据是人口普查数据,我们会调用 Python 的工具库库 SHAP 直接分析模型。

💦 数据说明

ShowMeAI在本例中使用到的是 🏆 美国人口普查收入数据集,任务是根据人口基本信息预测其年收入是否可能超过 50,000 美元,是一个二分类问题。


数据集可以在以下地址下载:

📘 https://archive.ics.uci.edu/ml/datasets/Adult

📘 https://archive.ics.uci.edu/ml/machine-learning-databases/adult/

数据从美国1994年人口普查数据库抽取而来,可以用来预测居民收入是否超过50K/year。

  • 该数据集类变量为年收入是否超过50k,属性变量包含年龄、工种、学历、职业、人种等重要信息,值得一提的是,14个属性变量中有7个类别型变量。

  • 数据集各属性是:其中序号0~13是属性,14是类别。

字段序号 字段名 含义 类型
0 age 年龄 Double
1 workclass 工作类型* string
2 fnlwgt 序号 string
3 education 教育程度* string
4 education_num 受教育时间 double
5 maritial_status 婚姻状况* string
6 occupation 职业* string
7 relationship 关系* string
8 race 种族* string
9 sex 性别* string
10 capital_gain 资本收益 string
11 capital_loss 资本损失 string
12 hours_per_week 每周工作小时数 double
13 native_country 原籍* string
14(label) income 收入标签 string

💦 SHAP计算 & 模型解释

  1. from sklearn.model_selection import train_test_split
  2. import lightgbm as lgb
  3. import shap
  4. shap.initjs()
  5. X,y = shap.datasets.adult()
  6. X_display,y_display = shap.datasets.adult(display=True)# create a train/test split
  7. # 训练集与测试集切分及处理
  8. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=7)
  9. d_train = lgb.Dataset(X_train, label=y_train)
  10. d_test = lgb.Dataset(X_test, label=y_test)# create a simple model
  11. # 模型参数
  12. params = {
  13. "max_bin": 512,
  14. "learning_rate": 0.05,
  15. "boosting_type": "gbdt",
  16. "objective": "binary",
  17. "metric": "binary_logloss",
  18. "num_leaves": 10,
  19. "verbose": -1,
  20. "min_data": 100,
  21. "boost_from_average": True
  22. }
  23. # 模型训练
  24. model = lgb.train(params, d_train, 10000, valid_sets=[d_test], early_stopping_rounds=50, verbose_eval=1000)# explain the model
  25. # 模型解释
  26. explainer = shap.TreeExplainer(model)
  27. shap_values = explainer.shap_values(X)# visualize the impact of each features
  28. shap.summary_plot(shap_values, X)



上图中的SHAP结果值,告诉我们不同的特征维度(输入)对于当前模型的重要程度,包括总体的重要程度,以及对每个类别的判定的影响程度。

参考资料

  • 📘 SHAP 文档: https://shap.readthedocs.io/en/latest/index.html
  • 📘 美国人口普查收入数据集: https://archive.ics.uci.edu/ml/datasets/census+income

推荐阅读

🌍 数据分析实战系列 : https://www.showmeai.tech/tutorials/40
🌍 机器学习数据分析实战系列: https://www.showmeai.tech/tutorials/41
🌍 深度学习数据分析实战系列: https://www.showmeai.tech/tutorials/42
🌍 TensorFlow数据分析实战系列: https://www.showmeai.tech/tutorials/43
🌍 PyTorch数据分析实战系列: https://www.showmeai.tech/tutorials/44
🌍 NLP实战数据分析实战系列: https://www.showmeai.tech/tutorials/45
🌍 CV实战数据分析实战系列: https://www.showmeai.tech/tutorials/46
🌍 AI 面试题库系列: https://www.showmeai.tech/tutorials/48

基于SHAP的机器学习可解释性实战

基于统计方法的异常值检测代码实战

代做工资流水公司合肥打印公司银行流水株洲签证流水代开天津代开银行流水单黄冈对公银行流水多少钱肇庆办理房贷银行流水上饶银行流水账价格金华办流水沈阳查消费贷流水漳州对公流水代做吉林查离职证明潍坊开个人银行流水包头背调工资流水洛阳签证银行流水 多少钱沧州入职工资流水公司深圳银行流水账模板九江办对公账户流水商丘入职工资流水多少钱海口自存银行流水代做常德流水账单代做肇庆查贷款工资流水宜春代办自存流水厦门日常消费流水开具武汉办理流水绍兴转账流水代办湘潭银行对公流水公司东莞企业银行流水多少钱中山银行流水修改公司廊坊个人工资流水 费用芜湖个人流水报价徐州流水单打印香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化