介绍

分享个模型可解释的库SHAP,其可以对XGBoost等机器学习库进行结果解释。

更多还有类似Paddle中的TrustAI

什么是SHAP?

SHAP(SHapley Additive exPlanations)是用来解释机器学习模型的工具。它告诉我们每个特征对模型预测结果的贡献有多大。想象一下你和几个朋友一起干活,最后得到了一笔报酬。你想知道每个人应该分多少钱,SHAP就是在做类似的事情,只不过它是在告诉你每个特征对模型预测结果的贡献。

核心概念

1. Shapley值:

想象一个团队在完成任务后得到一笔奖金,我们想公平地分配这笔奖金。Shapley值就是一种分配方法,告诉我们每个成员(在机器学习中是每个特征)应得的报酬(对预测结果的贡献)。

2. 边际贡献:

假设我们在玩一个游戏,每次加入一个新成员(特征),看看他们对团队成绩(模型预测)的贡献有多大。边际贡献就是每次新加入的成员对总成绩的额外贡献。

SHAP如何工作?

SHAP计算每个特征的贡献时,会考虑所有可能的加入顺序。这是因为不同的加入顺序可能会导致不同的贡献。举个例子:

  • 如果你和你的朋友们一起完成一个项目,每个朋友加入的顺序不同,他们的贡献也可能不同。
  • SHAP通过计算所有可能顺序中的平均贡献来确定每个特征的Shapley值。

具体步骤

1. 考虑所有可能的特征子集:

对于每个特征,计算它加入不同特征子集时,对模型预测结果的边际贡献。

2. 计算平均贡献:

对于每个特征,计算它在所有可能子集中的平均贡献,这就是这个特征的Shapley值。

例子

假设我们有一个模型在预测一个人是否会购买某产品,模型用到了年龄、收入和是否有孩子三个特征。SHAP会做以下事情:

1. 计算每个特征的贡献:

  • 先只考虑收入,再加上年龄,看看预测结果有多大变化。再加上是否有孩子,看看预测结果再变化多少。
  • 再换个顺序,先考虑年龄,再加上收入,然后加上是否有孩子。
  • 如此继续,考虑所有可能的加入顺序。

2. 计算平均值:

对于每个特征,计算它在所有顺序中的平均贡献,这个平均值就是该特征的Shapley值。

总结

SHAP通过考虑每个特征在不同组合中的贡献,并取平均值,来告诉我们每个特征对模型预测的影响有多大。这样,我们就能清楚地知道模型是如何做出预测的,每个特征在其中起了多大作用。

演示代码https://github.com/geasyheart/algo/blob/m2/python/shap_demo.ipynb