解释预测的艺术

news2024/11/16 7:02:00

如何以人性化的方式解释你的模型

可直接在橱窗里购买,或者到文末领取优惠后购买:

img

数据科学家职责的一个重要部分是解释模型预测。通常,接受解释的人不是技术人员。如果你开始谈论成本函数、超参数或 p 值,你将会遇到茫然的表情。我们需要将这些技术概念转化为外行人能理解的术语。这个过程可能比构建模型本身更具挑战性。

我们将探索如何给出人性化的解释。我们将通过讨论良好解释的一些关键特征来做到这一点。重点将放在解释个别预测上。最后,我们将通过使用「SHAP 值」解释模型来应用其中的一些知识。我们将看到,当你想要给出人性化的解释时,SHAP 非常有用。

本地解释与全球解释

在深入讨论之前,让我们先讨论一下你要解释什么以及向谁解释。作为一名数据科学家,你可能需要与各种各样的人沟通。这包括同事、监管者或客户。这些人的技术专长水平各不相同。因此,你需要根据他们的专业知识调整解释的水平。

在某些情况下,你可能会被要求解释整个模型。我们称之为全局解释。我们希望了解模型总体上捕捉到了哪些趋势。我们可能需要回答诸如“哪些特征最重要?”或“特征 X 与目标变量有什么关系?”之类的问题。

在其他情况下,我们需要给出局部解释。这就是我们解释单个模型预测的时候。事实上,我们通常必须解释由模型预测得出的决策。这些解释也可以回答诸如“我们为什么拒绝这个贷款申请?”或“为什么给我这个电影推荐?”之类的问题。

在这里插入图片描述

与同事或监管者交谈时,你可能需要给出更多技术性解释。相比之下,客户会期望更简单的解释。你也不太可能需要向客户提供全面的解释。这是因为他们通常只关心对他们个人有影响的决定。我们将重点关注这种情况。即向非技术人员解释个别预测。

良好解释的特征

当我们谈论一个好的解释时,我们指的是一个容易被接受的解释。换句话说,它应该让听众相信一个决定是正确的。要给出这样的解释,你需要考虑一些关键方面。你可以在图 1 中看到这些方面的摘要。在本节的其余部分,我们将深入讨论每一个方面。

图 1:良好特征的特征概述

真实的

这似乎很明显,但一个好的解释应该是真实的。当你考虑我们正在解释的内容时,这可能比你想象的要难。也就是说,我们正在对模型预测给出解释。问题是这些预测可能是不正确的。例如,我们的模型可能过度拟合。这意味着预测可能反映了已建模的噪声。对这些预测的解释不会反映数据中真正的潜在关系。

img

在给出解释时,我们需要考虑我们的模型如何很好地代表现实。我们可以通过评估模型的性能来做到这一点。例如使用交叉验证准确率。即使总体表现良好,一些预测也可能比其他预测更不确定。例如,逻辑回归预测的概率约为 0.5。在你的解释中,我们可能想提及这种不确定性。

针对目标受众

措辞方式很重要。我们拒绝你的贷款是因为 — “你是加密货币交易员”、“你从事高风险行业”或“你的收入太不稳定”。这些都是相同的原因,只是措辞不同。某些措辞方式可以更好地表达你的观点。有些人可能还会觉得某些方式令人反感。例如,第一个解释可能会被视为个人问题。

你还应避免使用任何技术或商业术语。“收入在我们的模型中有一个正参数,而你的收入值很低。因此,你被拒绝了,因为你的收入值显著增加了你的违约风险。”这是一个糟糕的解释,因为我们使用了技术术语(即“模型”和“参数”)。我们也有一些商业术语(即“违约风险”)。

选择最佳的解释方式才是艺术的真正所在。这可能是解释预测最困难的部分。数据科学课程或大学也没有很好地涵盖这一点。最终,这项技能将随着经验和与客户建立关系而获得。

原因数量

人们只想知道事件的主要原因。“为什么通货膨胀这么高?”——“因为油价上涨。”事实上,通货膨胀可能是由多种因素造成的,包括工资增长、政府支出增加或汇率。然而,这些因素可能没有能源成本上涨那么显著。

在机器学习中,人们并不想知道每个模型特征如何影响预测。通常,解释 1 到 3 个特征的贡献就足够了。问题是你选择解释哪些贡献?接下来的 4 个特征可以帮助你选择最合适的原因。

在这里插入图片描述

重要的

我们应该选择最重要的原因。换句话说,我们只解释那些影响巨大的因素。对于我们的通货膨胀示例,我们将给出导致最大涨幅的原因。这些原因比那些影响较小的原因更容易被接受。

对于 ML,我们希望解释对预测贡献最大的特征。我们确定这些特征的方式取决于所使用的模型。对于线性模型,我们可以查看参数权重和特征值。稍后我们将看到 SHAP 值如何用于非线性模型。

一般的

一个好的理由可以解释许多决定。“你为什么拒绝我的贷款申请?”-“因为你有很多现有债务。”假设这是拒绝许多贷款申请的原因。这个理由更容易被接受,因为它的作用被广泛理解。

对于 ML,我们可以通过查看某些特征重要性度量来找到一般解释。例如,排列特征重要性。通过 SHAP 值,我们可以查看平均绝对 SHAP。无论采用哪种度量,高值都表明某个特征总体上做出了重大贡献。

异常

在其他情况下,一个好的理由可能并不常见。这些理由可以解释对特定决策的重大贡献。但是,一般来说,它们无法解释决策。“你为什么拒绝我的贷款申请?”-“因为你是加密货币交易员”这些类型的理由可能会被接受,因为它们更个人化。也就是说,人们可以理解它对他们有何具体影响。

对于 ML,我们可以通过查看特征重要性和对各个预测的贡献的组合来查找异常原因。这些特征可能不具有很高的特征重要性。但是,对于特定的预测,它们做出了很大的贡献。

在这里插入图片描述

对比

我们经常需要解释一个决定与另一个决定的区别。客户可能不会问“为什么我的申请被拒绝?”而是问“为什么我的申请被拒绝而他们的申请被接受?”可能是因为两个客户都负债累累。这个原因可能在第一个问题中被接受,但在第二个问题中却不被接受。换句话说,我们需要给出一个能够区分这两个决定的理由。

对于 ML 来说,这意味着我们需要根据两个客户具有不同值的特征来做出解释。该特征还需要有所不同,从而导致不同的预测。例如,我们可能会发现第一个客户的收入较高。收入特征不同,但这不是一个很好的理由。也就是说,更高的收入不会导致申请被拒绝。

最后这四个特点似乎相互矛盾。异常原因不可能具有普遍性。异常或普遍原因可能不是最重要的。对比原因既不重要,也不普遍,也不异常。但是,我们可以在解释中使用多种原因。你选择的原因将取决于问题、人以及你认为最有说服力的原因。

用 SHAP 解释模型

现在让我们把这些特征付诸实践。我们将尝试解释一个用于预测保险收费金额(费用)的模型。你可以在表 1 中看到此数据集的快照。我们的模型特征基于前 6 列。例如,children 是受抚养人的数量。

表 1:数据集快照

(数据集:[kaggle]1, 许可证 - 数据库:开放数据库)

我们不会详细介绍代码,但你可以在我的 [GitHub]2 上找到完整的项目。

总而言之,我们首先进行一些特征工程。我们将性别和吸烟者转换为二进制特征。区域可以采用 4 个不同的值,因此我们从此列创建 4 个虚拟变量。这给我们留下了总共 9 个模型特征。我们使用这些特征来训练一个 XGBoost 模型,以预测收费情况。 模型训练完成后,我们将计算每次预测的 SHAP 值。

对于每个预测,每个特征都会有一个 SHAP 值。SHAP 值给出了该特征对预测的贡献。换句话说,该特征增加或减少了预测费用。要了解哪些特征很重要,我们可以看看图 2。这里我们取了所有预测的 SHAP 值的绝对平均值。高平均值表示该特征总体上对预测做出了很大贡献。

图 2:平均 SHAP 图

我们可以使用图 2 来帮助确定良好的一般原因或异常原因。例如,我们可以看到吸烟者的绝对平均值较高。这告诉我们,一般来说,该特征可以为预测提供良好的理由。绝对平均值较低的特征可能会提供良好的异常原因。也就是说,如果对于特定预测,它们具有较大的贡献。

让我们尝试解释一下我们的第一个预测。你可以在图 3中看到此预测的 SHAP 瀑布图。查看 x 轴,我们可以看到基值为 E[f(x)] = 12813。这是所有客户的平均预测费用。最终值为 f(x) = 26726。这是针对该特定客户的预测费用。SHAP 值是介于两者之间的所有值。它们告诉我们与平均预测相比,每个特征如何增加或减少了预测。

图 3:第一次预测的 SHAP 瀑布图

从图 3 中我们可以看到,吸烟者是最重要的特征。也就是说,它使预测费用增加了最多的量。特征值在 y 轴上给出。例如,我们可以看到 1 = smoker 表示该客户吸烟。因此,如果客户问“为什么我的保险费这么高?”,一个很好的解释可能是“你是吸烟者”。我们还看到,在图 2 中,这是一个很好的一般原因。

因此,吸烟既是重要原因,也是普遍原因。这可能足以让这个人相信保险费是正确的。如果我们想确定,我们可以提到第二重要的特征。查看 y 轴,我们可以看到此人是 62 岁。因此,我们可以跟进第二个原因,“而且你老了。”(我们可能想用更好的方式来表达这一点。)

出于第二个原因,我们猜测了与目标变量的关系。也就是说,随着年龄的增长,你的费用也会增加。其他特征的关系可能不那么明显。这意味着为了给出好的理由,我们需要一些特征值的背景信息。为此,我们可以使用 SHAP 值的散点图。查看图 4,我们可以看到我们的猜测是正确的。随着年龄的增长,SHAP 值会增加。换句话说,预测的费用会增加。

图 4:年龄的 SHAP 值

在图 5 中,你可以看到第二个预测的瀑布图。为了解释这一点,我们可能会直接跳到客户的年龄。但是,请注意,孩子也做出了重大贡献。请记住,我们在图 2 中看到,这个特征总体上并不重要。换句话说,children 的数量可能是一个很好的异常原因。我们可能更愿意将其作为主要原因。

图 5:第二次预测的 SHAP 瀑布图

从本质上讲,SHAP 值允许你给出对比解释。但是,这仅限于我们想要将预测与平均预测进行比较时。回答诸如“为什么我的收费高于平均水平?”之类的问题很容易。回答诸如“为什么我的收费比我姐姐的要高?”之类的问题需要做更多工作。还有其他计算 SHAP 值的方法可以使这更容易。例如,基线 SHAP 将计算相对于特定预测的值。

我们专注于使用 SHAP 值来解释单个预测。它们也可用于给出全局解释。即解释整个模型的工作原理。我们通过聚合 SHAP 值并创建不同的图来实现这一点。我们已经看到了一个——平均 SHAP 图。之前写过一篇《[使用 Python 进行 SHAP 简介](Python 中的 SHAP 简介)》,大家可以看看,其中讨论了更多内容。我们还会讨论用于计算 SHAP 值和创建这些图的 Python 代码。

希望这篇文章对你有所帮助!你还可以阅读我的其他文章,或者查看有关企业 AI 实战项目的教程,相信会让你拥有更多收获。

20240726135615

参考

C. Molnar, Interpretable Machine Learning, 2021, https://christophm.github.io/interpretable-ml-book/explanation.html

T. Miller, Explanation in artificial intelligence: Insights from the social sciences, 2017, https://arxiv.org/abs/1706.07269

S. Lundberg & S. Lee, A Unified Approach to Interpreting Model Predictions, 2017, https://arxiv.org/pdf/1705.07874.pdf


「AI秘籍」系列课程:

  • 人工智能应用数学基础
  • 人工智能Python基础
  • 人工智能基础核心知识
  • 人工智能BI核心知识
  • 人工智能CV核心知识

AI企业项目实战课优惠二维码


  1. M. Choi,医疗费用个人数据集(许可证 - 数据库:开放数据库)https://www.kaggle.com/datasets/mirichoi0218/insurance/metadata ↩︎

  2. Github, https://github.com/hivandu/public_articles/blob/main/src/interpretable_ml/SHAP/SHAP_explanation.ipynb ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2087484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

List集合和Set集合

Collection: Collection 不唯一,无序 List 不唯一,有序 Set 唯一,无序 ArrayList:内部使用长度可变的数组,遍历查询效率高 LinkedList:采用双向链表实现,增删改效率比较高 ArrayL…

【小白深度学习入门】【2】池化层详解:工作原理、维度计算、池化类型

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 👍感谢小伙伴们点赞、关注! 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

Dataworks_PySpark开发流程

PySpark是由Spark官方开发的Python语言第三方库,Python开发者可以通过使用python语言来编写Spark程序和SparkSQL完成开发。 之所以采用PySpark而不采用Java/Scala,是由于: Dataworks可通过将代码在线写入DataWorks Python资源的方式&#xf…

Android 12系统源码_输入系统(一)认识Android的输入系统

前言 问渠那得清如许,为有源头活水来。对于大多数现代操作系统中,“事件”就是它们的“活水源头”,正是在“事件和消息”的不断产生、流转和处理中,整个软件系统才能“动”起来。 Android系统有一套从底层Linux内核到上层应用程…

合宙LuatOS产品规格书——Air780EQ

合宙Air780EQ, 基于移芯EC716E高端平台, 集成LTE 3GPP Release 13技术,确保高速、稳定的网络连接; 广泛兼容各大运营商网络,实现真正的全网通设计,提升产品市场适应性与灵活性。 Air780EQ 4G全网通模块核…

Unity(2022.3.41LTS) - 角色控制器和3D刚体

目录 一. 角色控制 二. 3D刚体 一. 角色控制 名称:功能:坡度限制将碰撞器限制为仅爬升比指示值更陡峭(以度为单位)的斜坡。步长偏移只有当楼梯离地面比指示值更近时,角色才会爬上楼梯。此值不应大于 Character Contr…

追求全能还是专精?——AI模型的未来趋势探讨

AI模型:追求全能还是专精? 近日,OpenAI预计在秋季推出代号为“草莓”的新AI。从专注于数学问题到处理主观营销策略,"草莓"模型展现出惊人的多样性。而这种全能型 AI 是否代表了未来趋势?相比专攻于某一领域的…

【离线查询 滑动窗口】2747. 统计没有收到请求的服务器数目

本文涉及知识点 离线查询 C算法:滑动窗口总结 LeetCode2747. 统计没有收到请求的服务器数目 给你一个整数 n ,表示服务器的总数目,再给你一个下标从 0 开始的 二维 整数数组 logs ,其中 logs[i] [server_id, time] 表示 id 为…

【Kafka】Windows下安装Kafka(全面)

目录 1.前提条件 2.下载 3.安装 4.环境变量配置 5.验证 1.前提条件 1.先安装zookeeper: 【Zookeeper】Windows下安装Zookeeper(全面)-CSDN博客https://blog.csdn.net/weixin_57259781/article/details/141679454 2.还需要安装scala: …

设计模式 -- 外观模式(Facade Pattern)

1 问题引出 组建一个家庭影院 DVD 播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为: 直接用遥控器:统筹各设备开关 开爆米花机,放下屏幕 ,开投影仪 ,开音响&#xf…

坐牢第三十二天(c++)

一.作业 仿照string类&#xff0c;实现myString #include <iostream> #include <cstring> // 引入cstring以使用memcpy using namespace std; class myString {char *str; // 记录c风格的字符串int size; // 记录字符串的实际长度 public:// 无参构造myString():…

循环流网络的费用问题

循环流网络的费用问题 费用为负的网络流循环流网络的费用一些题目[UVa1659 Help Little Laura](https://onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&category24&pageshow_problem&problem4534)[Aizu-2230 How to Create a Good Game](https://…

[LLM][Prompt Engineering]:思维链(CoT)

思维链 思维链1. 思维链提示方法和增强策略1.1 简单的思维链提示1.2 示例形式的思维链提示1.3 思维链提示的后处理方案1.4 拓展推理结构 2. CoT的能力来源&#xff1a;为什么思维链提示能显著提升大语言模型在推理任务上的效果&#xff1f; 强大的逻辑推理是大语言模型“智能涌…

深度学习——LLM大模型分词

1. 前言 自从chatgpt出现&#xff0c;大模型的发展就进入了快车道&#xff0c;各种各样的大模型卷上天&#xff0c;作为一个在大模型时代的科研人&#xff0c;即使你不向前&#xff0c;也会被时代裹挟着向前&#xff0c;所以还是自己走快一点比较好&#xff0c;免得被后浪拍死…

呆错图床系统,一款开源免费的图床系统

源码介绍 呆错图床系统是一款免费的PHP图床程序&#xff0c;核心功能是提供图片外链服务、图床API服务、图片CDN加速与破解防盗链。 下载地址&#xff1a; https://download.csdn.net/download/huayula/89693127

基于七牛云上传,下载文件

准备工作 1.创建一个七牛云账号 2.登录账号&#xff0c;进入个人中心&#xff0c;创建一组密钥&#xff08;ak和sk&#xff09; 3. 创建一个公有的存储空间&#xff08;桶&#xff09; 注&#xff1a;存储地区的选择基于你的用户的分布主要在哪里。 七牛云直接白送10GB给我们…

给鼠标一个好看的指针特效 鼠标光标如何修改形状?

许多爱美的小伙伴们都想着如何给自己的电脑打扮一下&#xff0c;用各种各样的途径来美化我们的电脑。今天我们给大家分享一下&#xff0c;如何美化鼠标效果&#xff0c;给鼠标指针修改成一个非常好看的形状~ 一起来看几组鼠标的效果&#xff0c;小编我给大家做了个录屏&#x…

LuaJit分析(十一)去除string.dump函数

Lua脚本中的string.dump函数用于生成字节码文件&#xff0c;根据对 luajit -b命令的分析可以得出&#xff0c;最终dump出字节码文件都是使用的string.dump函数。 因此即使我们的指令顺序被打乱&#xff0c;通过loadfile系统调用&#xff0c;再通过string.dump调用&#xff0c;…

缓存解决方案。Redis 和 Amazon ElastiCache 比较

欢迎来到雲闪世界。Redis 和 Amazon ElastiCache 等缓存解决方案是通过将频繁访问的数据存储在内存中来提高应用程序性能的热门选择。让我们从实施简单性、性能、成本和维护方面对它们进行比较。 实施简单 设置 Redis 需要在基础设施或云实例上安装和配置 Redis 服务器。它可…

回归预测|基于CNN-LSTM-Attention结合Adaboost集成数据预测Matlab程序 多特征输入单输出

回归预测|基于CNN-LSTM-Attention结合Adaboost集成数据预测Matlab程序 多特征输入单输出 文章目录 前言回归预测|基于CNN-LSTM-Attention结合Adaboost集成数据预测Matlab程序 多特征输入单输出 一、CNN-LSTM-Attention-Adaboost模型**详细流程&#xff1a;****基本原理&#xf…