SHAP
🪄

SHAP

最近的面试中被问到了很多次SHAP的细节,自己以前只是会调用这个包而已,被问倒了,当场尬住(._.) 还是有必要仔细整理一下

背景

很多机器学习模型的一大缺点就是缺少可解释性。线性模型和树模型从原理上就具有较好的可解释性。我们常用sklearn这个包处理机器学习问题,其中,很多模型都有`feature_importance`这个接口,用来查看特征的重要性,可以帮助我们对模型进行解释。
但是!传统的特征重要性的计算方法有很多争议。
SHAP是python的一个模型解释的包,可以解释任何机器学习模型。SHAP的名称来自SHapley Additive exPlanation, SHAP构建一个加性模型,所有特征都是“贡献者”。对于每个样本,模型可以产生一个预测值,SHAP value是该样本中每个特征所分配到的分值。
假设第i个样本是,第i个样本的第j个特征是,模型对该样本的预测值为,模型的基线(通常是所有样本的目标变量的均值)为,SHAP value 服从下面的等式:
其中,就是特征的SHAP值,就是该样本中这个特征对最终预测值的贡献值。当$f大于0,说明该特征提升了预测值,起正向作用;反之,说明该特征使预测值降低,起反向作用。
feature importance缺点
  • 受到噪声的影响
  • 受到特征共线性(相关性很高)的影响
  • 不能给出特征重要性的阈值
  • 无法表现特征与标签之间的相互关系
而传统的feature importance只能告诉哪个特征重要,不能知道是怎么影响预测结果的。

安装与运行

install
#安装 pip install shap
run
#训练模型 x,y = 数据集 model = 模型实例化 model.fit(x,y) explainer = shap.TreeExplainer(model) shap_values = explainer.shap_values(x) #特征矩阵
在SHAP中进行模型解释需要先创建一个explanier, SHAP支持很多类型的explainer,包括deep, gradient, kernel, linear, tree, sampling等。
一些踩坑记录