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