SHAP: 名称来源于Shapley Additive explanation.
可以解释任何机器学习模型的输出。shap value是预测样本预测值中每个特征分配到的数值,还可以表现影响的正负。shap擅长对xgboost模型进行优化,对于搭建的神经网络模型计算会非常慢。
SHAP value服从以下等式:
其中, f ( x i j ) f(x_{ij}) f(xij)为 x i j x_{ij} xij的SHAP值,为 x i x_{i} xi的第 j j j个特征对预测值 y i y_i yi的贡献值。 y b a s e y_{base} ybase一般为所有样本目标变量的均值。
在SHAP中进行模型解释需要先创建一个explainer,SHAP支持很多类型的explainer(如deep, gradient, kernel, linear, tree, sampling)。其中tree支持常用的XGB、LGB、CatBoost等树集成算法,最为常用。
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X) # 传入特征矩阵X,计算SHAP值
将模型的预测结果从base值推动到最终的取值;将预测推高(正影响)的特征用红色箭头表示,将预测推低(负影响)的特征用蓝色箭头表示。
shap.force_plot(explainer.expected_value, shap_values[0, :], X.iloc[0, :])
特征重要性解释:取每个特征的SHAP值的绝对值的平均值作为该特征的重要性,并降序排序,得到一个标准的条形图(multi-class则生成堆叠的条形图)。
shap依赖图:全局解释图。对每个数据实例的某个特征,绘制一个点,x轴上是特征值,y轴上是对应的Shapley值。可以看到随着特征数据变动,对预测值影响的大小。
将单个case的预测结果旋转90度并排放置即为多个case的结果。
shap.force_plot(explainer.expected_value, shap_values, X)
(1)SHAP:Python的可解释机器学习库
(2)SHAP知识点全汇总