是时候摆脱黑匣子,让你的机器学习会“说话”!
想象一下,如果你是一名数据科学家,在空闲时间,根据脸书和推特数据预测你的朋友夏天的时候会去哪里度假。如果,预测结果准确,那么可能你的朋友会留下一个深刻的印象,认为你是一个可以看到未来的魔术师。如果预测是错误的,可能仅仅是你的“数据科学家”的名声会受到影响,对于其他的任何人可能都不会有伤害。但如果这个话题的语境有变化,我们预测的不是夏天去哪里度假的问题,而是涉及到投资的问题,你想要投资你朋友可能度假的地方,那么,预测出错的话,你就会赔钱。由此可见,只要你的模型不会产生重大的影响,那么,他的可解释性就没有那么重要了。但是基于模型的预测涉及到影响时,可解释性就变得相关。
可解释的机器学习
解释意味着以可理解的术语解释或呈现。在ML系统的背景下,可解释性是向人类解释或以可理解的术语呈现的能力[Finale Doshi-Velez]
机器学习模型被许多人称为“黑匣子”。这意味着虽然我们可以从中获得准确的预测,但我们无法清楚地解释或识别这些预测背后的逻辑。但是我们如何从模型中提取重要的见解呢?要记住哪些事项以及我们需要实现哪些功能或工具?这些是在提出模型可解释性问题时需要考虑的重要问题。
可解释性的重要性
一些人常常问的问题是,为什么我们不满足于模型的结果,为什么我们如此痴迷于知道为什么做出特定的决定?这很大程度上与模型在现实世界中可能产生的影响有关。对于那些仅仅用于推荐电影的模型,其影响远远小于为预测药物结果而创建的模型。
“问题在于,单个指标,例如分类准确性,是对大多数现实世界任务的不完整描述。”(Doshi-Velez和Kim 2017)
这是一个可解释的机器学习的大图。在某种程度上,我们通过收集原始数据捕获世界,并使用该数据进行进一步预测。从本质上讲,可解释性只是模型上的另一层,可以帮助人们理解这个过程。
可解释的机器学习的大图
可解释性带来的一些好处是:
- 可靠性
- 调试
- 特征工程
- 指导未来的数据收集
- 告知人类决策
- 建立信任
模型可解释性技术
只要我们能将其付诸实践,理论才有意义。如果您想真正了解这个主题,可以尝试Kaggle的机器学习解释性速成课程。它具有适当数量的理论和代码,可以将概念置于透视中,并有助于将模型可解释性概念应用于实际的现实问题。
如果您想先了解内容的简要概述,可以点击https://www.kaggle.com/learn/machine-learning-explainability
可以从模型中提取的见解
要解释模型,我们需要以下见解:
- 模型中的最重要的特性是什么
- 对于来自模型的任何单个预测,数据中的每个特征对该特定预测的影响。
- 每个特征对大量可能预测的影响
让我们讨论一些有助于从模型中提取上述见解的技巧:
1.排列重要性
模型认为哪些特征很重要?哪些特征对模型预测的影响可能比其他特征更大?这个概念称为特征重要性,排列重要性是一种广泛用于计算特征重要性的技术。它帮助我们看到模型何时产生违反直觉的结果,并且当模型按照我们希望的方式工作时,它有助于显示其他模型。
排列重要性适用于许多scikit-learn估算器。这个想法很简单:在验证数据集中,随机排列或洗牌单个列,使所有其他列保持不变。如果模型的精度下降很多并导致误差增加,则该特征被认为是“重要的”。另一方面,如果对其值进行改组不会影响模型的准确性,则该特征被视为“不重要”。
工作
考虑一个模型,该模型根据某些参数预测足球队是否会有一个“最佳球员”获胜者。表现出最佳表现的玩家将获得此奖项。
在拟合模型之后计算排列重要性。因此,让我们在训练数据上训练并拟合一个随机森林分类器模型。
排列重要性使用ELI5库计算。 ELI5是一个Python库,允许使用统一API可视化和调试各种机器学习模型。它内置了对多个ML框架的支持,并提供了一种解释黑盒模型的方法。
使用eli5库计算和显示重要性:
(这里val_X,val_y分别表示验证集)
解释
- 顶部的特征最重要,底部的特征最少。对于这个例子,得分的目标是最重要的特征。
- ±之后的数字测量了从一次重新洗牌到下一次重组的表现。
- 一些权重是负面的。这是因为在那些情况下,发现混洗数据的预测比实际数据更准确。
实践
现在,需要查看有关完整示例并看看您是否理解,请单击下面的链接转到Kaggle页面:
https://www.kaggle.com/dansbecker/permutation-importance
2.部分依赖图
部分依赖图(简称PDP或PD图)显示了一个或两个特征对机器学习模型的预测结果的边际效应(J. H. Friedman 2001)。 PDP显示特征如何影响预测,PDP可以通过1D或2D图显示目标与所选特征之间的关系。
工作
在模型拟合后也计算PDP。在我们上面讨论的足球问题中,有很多特征,比如传球、投篮、进球等等。我们首先考虑这一行开始,假设这一行代表的球队有50%的机会控球,传球100次,投篮10次,进1球。
我们继续拟合模型,并计算一支球队拥有一名赢得“游戏人”的球员的概率,这是我们的目标变量。接下来,我们将选择一个变量并不断改变其值。例如,如果球队打进1球,2球,3球等,我们将计算结果。然后绘制所有这些值,得到预测的结果与目标得分的图表。
用于绘制PDP的库称为python部分依赖图或简称PDPbox。
解释
- Y轴表示预测的变化与在基线或最左边的值预测的变化。
- 蓝色区域表示置信区间
- 对于“进球得分”图表,我们观察到得分目标会增加获得“最佳球员”奖励的可能性,但过了一段时间,这种可能性达到饱和。
我们还可以使用2D局部图来一次可视化两个特征之间的部分依赖性。
实践
https://www.kaggle.com/dansbecker/partial-plots
3.SHAP值
SHAP代表SHapley Additive exPlanation,它有助于分解一个预测,以显示每个特征的影响。它基于Shapley值,这是一种用于博弈论的技术,用于确定协作游戏中每个玩家对其成功贡献的程度。通常情况下,在准确性和可解释性之间取得正确的权衡可能是一个困难的平衡行为,但SHAP值可以同时提供这两者。
工作
再次,与足球示例一起,我们想要预测球队有一个赢得“游戏人”的球员的概率。 SHAP值解释了对于给定特征具有特定值的影响,与我们在该特征采用某些基线值时所做的预测相比较。
SHAP值使用Shap库计算,可以很容易从PyPI或conda轻松安装。
Shap值显示给定特征改变了我们预测的程度(与我们在该特征的某个基线值处进行预测的情况相比)。假设我们想知道当球队进了3个球而不是某个固定的底线时预测是什么。如果我们能够回答这个问题,我们可以对其他功能执行相同的步骤如下:
因此,预测可以分解为如下图:
这是一个更大视图的链接
解释
上面的说明显示了各自有助于将模型输出从基值(我们传递的训练数据集上的平均模型输出)推送到模型输出的特征。将预测推高的特征以红色显示,将预测推低的特征用蓝色表示。
- 这里的base_value是0.4979,而我们的预测值是0.7
- 目标得分= 2对增加预测的影响最大
- 控球特征对降低预测的影响最大
实践
SHAP值比我在此解释的理论更深入。请务必通过以下链接获得完整的理解。
https://www.kaggle.com/dansbecker/shap-values
4.SHAP值的高级用法
汇总许多SHAP值可以为模型提供更详细的见解。
SHAP摘要图
为了概述哪些特征对于模型最重要,我们可以绘制每个样本的每个特征的SHAP值。摘要图说明哪些特征最重要,以及它们对数据集的影响范围。
摘要图
对于每个点:
- 垂直位置显示它描绘的功能
- 颜色显示该特征对于该行的数据集是高还是低
- 水平位置显示该值的影响是否导致更高或更低的预测
左上角的点是一支进球很少的球队,将预测值降低了0.25。
SHAP依赖贡献图
虽然SHAP汇总图概述了每个特征,但SHAP依赖图显示了模型输出如何随特征值变化。 SHAP依赖性贡献图提供了与PDP相似的洞察力,但它们增加了更多细节。
依赖性贡献情节
上述依赖性贡献情节表明,拥有球会增加球队让球员赢得奖励的机会。但是如果他们只得到一个进球,那么这个趋势就会逆转而且如果他们得分那么少,那么裁判可能会因为球得分而惩罚他们。
实践
https://www.kaggle.com/dansbecker/advanced-uses-of-shap-values
结论
机器学习不再是黑匣子了。如果我们无法向其他人解释结果,那么一个好的模型又有什么用呢。可解释性与创建模型同样重要。为了在人群中获得更广泛的接受,机器学习系统能够为其决策提供或满意的解释至关重要。正如阿尔伯特·爱因斯坦所说:“如果你不能简单地解释它,你就不能很好地理解它。”
编译出品