4、SHAP值理论

SHAP值提供了一种方法,详细分析单个预测中每个特征的影响。它将预测分解,显示特征如何影响结果。本文介绍了SHAP值的工作原理,通过足球预测示例解释其应用,并展示如何使用Shap库计算SHAP值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

理解个体的预测

1、简介

你已经看到(并使用过)从机器学习模型中提取一般性解释的技术。但是如果你想详细分析模型对于单个预测的工作原理呢?

SHAP值(来自SHapley Additive exPlanations的缩写)将一个预测分解,以显示每个特征的影响。在哪些情况下可以使用这个?

  • 一个模型说银行不应该向某人贷款,而银行在法律上被要求解释每笔贷款拒绝的依据
  • 一个医疗保健提供者想要确定是什么因素影响了每位患者患某种疾病的风险,以便他们可以通过有针对性的健康干预措施直接应对这些风险因素

在本课程中,您将使用SHAP值解释个别预测。在下一课中,您将看到如何将这些值聚合成强大的模型级别洞察。

2、工作原理

SHAP值解释了具有给定特征值相对于如果该特征取某个基线值时的预测的影响。

一个例子是有帮助的,我们将继续使用 排列重要性偏依赖图 课程中的足球例子。

在这些教程中,我们预测一支球队是否会有球员赢得 本场最佳 奖项。

我们可以问:

  • 预测中球队进球3个的驱动程度有多大?

但如果我们将这个问题重新表述为:

  • 预测中球队进球3个的驱动程度有多大,而不是某个基线进球数。

当然,每支球队都有许多特征。因此,如果我们为 进球数 回答了这个问题,我们可以为所有其他特征重复这个过程。

SHAP值以一种确保良好性质的方式执行这个过程。具体而言,您可以使用以下方程式分解预测:

sum(SHAP values for all features) = pred_for_team - pred_for_baseline_values

也就是说,所有特征的SHAP值相加等于解释为什么我的预测与基线不同。这允许我们将预测分解成如下图所示:
在这里插入图片描述

如果您想要查看此图的更大视图,这是一个链接

如何解释这个图呢?

我们预测为0.7,而 base_value 是0.4979。导致增加预测的特征值为粉红色,它们的可视大小显示了特征效果的大小。导致减少预测的特征值为蓝色。最大的影响来自 进球数 为2。尽管控球率值对减小预测有意义。

如果将蓝条的长度减去粉条的长度,它等于从基线值到输出的距离。

该技术存在一些复杂性,以确保基线值加上单个效果的总和等于预测值(这并不像听起来那么简单)。我们不会在这里详细介绍这个细节,因为这对于使用这项技术并不是关键的。这篇博客文章有一个更长的理论解释。

3、计算SHAP值的代码

我们使用优秀的 Shap 库来计算SHAP值。

在这个例子中,我们将重用您已经在足球数据中看到的模型。

In [1]:

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

# 从 CSV 文件中读取数据
data = pd.read_csv('../input/fifa-2018-match-statistics/FIFA 2018 Statistics.csv'
### XGBoost 中 SHAP 理论解释 #### 背景介绍 SHAP (SHapley Additive exPlanations) 是一种基于博弈论的方法,用于解释机器学习模型预测的结果。对于像XGBoost这样的树形模型,存在特定优化过的计算方式来高效地获取这些。 #### Shapley Value 的定义 Shapley value 来源于合作博弈论,用来衡量联盟游戏中每个玩家的独特贡献。当应用于机器学习时,它表示单个特征对最终预测的影响程度。具体来说,在给定输入样本的情况下,某个特征的重要性可以通过考虑该特征在所有可能特征子集组合下的平均边际贡献来评估[^1]。 #### KernelSHAP 方法 论文提出了一种与模型无关的方法,称为KernelSHAP,并且是树型模型(例如 LightGBM, XGBoost, CatBoost)最知名的方法之一。这种方法通过构建一个加权线性回归模型近似真实函数f(x),其中权重由Shapley kernel决定,从而估计各个特征对应的Shapley values。 #### TreeExplainer 特化实现 针对决策树及其集成形式(如随机森林、梯度提升机),研究者开发出了专门适用于这类结构的快速算法——TreeExplainer。此方法利用了树内部节点分裂机制的特点,能够在常数时间内完成单棵树上的shapley value计算,极大地提高了效率并降低了复杂度。因此,在处理大规模数据集或实时应用场景下具有明显优势。 ```python import shap import xgboost as xgb # Load your data into DMatrix format dtrain = xgb.DMatrix('data/train.data') dtest = xgb.DMatrix('data/test.data') # Train model using XGBoost API param = {'max_depth': 6, 'eta': 0.3} bst = xgb.train(param, dtrain) # Create explainer object specifically designed for tree-based models like XGBoost explainer = shap.TreeExplainer(bst) shap_values = explainer.shap_values(dtest) ``` 上述代码展示了如何创建 `TreeExplainer` 对象以及调用其 `shap_values()` 函数获得测试集中每条记录对应各特征的重要性的过程。 #### 应用实例 在一个具体的例子中,训练了一个XGBoost分类器用于预测个人年收入是否超过5万美元。所使用的数据集包含了12个属性作为自变量来进行建模分析。通过对这个案例的研究可以更好地理解SHAP的实际应用价和意义所在[^2]。 #### 局部 vs 全局解释力 得注意的是,虽然XGBoost自带了一些全局层面的特征重要性指标(比如weight, cover 和 gain),但是为了提供更加细致入微的理解和支持个性化需求(特别是在金融等领域内),往往还需要借助于诸如SHAP之类的局部解释工具来补充说明个体差异带来的影响变化情况[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法蒋同学

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值