模型预测不在行?别慌,收下这篇TensorFlow指南
点击上方关注,All in AI中国
作者——Karl Weinmeister
介绍
我们不难发现机器学习可以比以往更快、更准确地回答问题。它在更多的关键任务中得到应用,因此了解如何推进行预测变得越来越重要。
在这篇文章中,我们将使用开源机器学习框架TensorFlow的Keras API构建一个神经网络模型。模型经过训练,我们让它与可解释性库SHAP集成在一起。这里将使用SHAP来了解哪些因素与模型预测相关。
关于模型
我们的模型将预测大学毕业生的债务问题。这种贷款收益率旨在粗略的反映大学的投资回报率(ROI)。这些数据来自美国教育部的"大学记分卡",这是一个将数据公开的互动网站(https://collegescorecard.ed.gov/)。
模型中的特性列于下表中。有关数据集的更多详细信息,请参阅数据文档。(https://collegescorecard.ed.gov/data/documentation/)
我们根据数据集中可用的贷款额度和收益数据得出目标变量(贷款额度与收益比)。具体而言,它是毕业时累积的债务中位数(MD_INC_DEBT_MDN)除以毕业后6年的平均收入(MN_EARN_WNE_INC2_P6)。
创建散点图以显示每个特性与目标变量的相关性。
我们将使用具有2个密集连接的隐藏层和一个ReLU激活函数的Sequential模型:
下面我们看一下训练过程。训练误差和验证误差之间的差距越来越大,这表明存在过度拟合现象。过度拟合很可能是由于数据集中具有所有必需特性的样本数量(1,117)有限。尽管如此,鉴于平均债务收益率约为0.45,平均绝对误差为0.1的数据,表明这还是一个有意义的预测。
要在浏览器中直接运行笔记本,你可以使用(https://colab.research.google.com/github/kweinmeister/keras-interpretability-college-debt/blob/master/tensorflow-shap-college-debt.ipynb)。它也可以在Github上找到(https://github.com/kweinmeister/notebooks/blob/master/tensorflow-shap-college-debt.ipynb)。
关于ML公平性
我们在这篇文章中研究的大学债务问题与很多更广泛的社会经济问题有密切的联系。任何模型及其训练数据都应仔细评估,以确保其公平地为所有用户服务。例如,如果我们的训练数据主要包括来自高收入家庭的学生就读的学校,那么该模型的预测将会对那些有很多背负大量贷款学生所在的学校造成误导。
在可能的情况下,把中等收入的学生数值进行过滤,以便为不同家庭收入水平的学生提供一致的大学分析。"大学记分卡"数据将中等收入群体定义为家庭收入在30,000美元至75,000美元之间的学生。但显然,并非所有可用数据都提供此过滤器。但它可用于关键特性,如净价、收益、债务和完成率。
考虑到这一过程,我们的分析可以进一步扩展到数据集中的其他方面。值得注意的是,可解释性揭示了哪些特性对模型的预测贡献最大。它并不表示特性和预测之间是否存在因果关系。
SHAP简介
可解释性本质上是理解模型中发生的事情的能力。我们在模型的准确性和可解释性之间经常需要权衡。简单的线性模型可以直接理解,因为它们直接暴露变量和系数。非线性模型,包括由神经网络或梯度增强树衍生的模型,可能更难以解释。
SHAP(SHapley Additive exPlanations)是由Scott Lundberg创建的Python库,可以解释许多机器学习框架的输出。它可以帮助解释个体预测或更大范围内的总结预测。
SHAP通过调整输入数据来评估每个特性的影响。所有可能的特性对每个特性的贡献进行平均。这种方法基于博弈论中的Shapley值的概念。它提供了一个强大的近似值,与LIME等其他方法相比,它的计算成本更高。关于SHAP理论的更多细节可以在2017 NeurIPS论文中找到(http://papers.nips.cc/paper/7062-a-unified-approach-to-interpreting-model-predictions)。
将SHAP与TensorFlow Keras模型一起使用
SHAP提供了几个使用不同实现的解释器类,但都使用了基于Shapley值的方法。在这篇博文中,我们将演示如何使用KernelExplainer和DeepExplainer类。 KernelExplainer与模型无关,因为它将模型预测和训练数据作为输入。 DeepExplainer针对深度学习框架(TensorFlow / Keras)进行了优化。
SHAP DeepExplainer当前不支持立即执行模式或TensorFlow 2.0。然而,KernelExplainer可以正常工作,但速度要慢得多。
让我们首先使用KernelExplainer来绘制模型的摘要图。我们首先将训练数据汇总为n个集群。这是一个可选但有用的步骤,因为生成Shapley值的时间会随着数据集的大小呈指数增长。
摘要图显示了每个特性的Shapley值的分布。每个点的颜色都在一个光谱上,该特性的最大值为红色,最小值为蓝色。这些特性按Shapley值的绝对值之和进行排序。
让我们看看情节中的一些关系。贡献最高的前三个特性是average SAT score, % of first-generation students, and % part-time enrollment。请注意,这些特性中的每一个都在具有正SHAP值的右侧,以蓝点为主(低特性值)。这告诉我们,这些特性值越低,我们模型预测的DTE比率就越高。列表中的第四个特性,即净价格,具有相反的关系,其中较高的净价格与较高的DTE比相关联。
使用force_plot()函数也可以解释一个特定的实例:
在这个特殊的例子中,该大学的SAT平均值对DTE预测的贡献最大,为0.53。完成率(MD_INC_COMP_ORIG_YR4_RT)是第二个最重要的特性,降低了预测。所示的SHAP值序列也可以在整个数据集或n个实例的一小部分中查看,如下所示:
注意相关特性
SHAP将分割相关变量的特性贡献。在为模型选择特性时以及分析特性重要性时,请务必牢记这一点。让我们计算相关矩阵,看看我们发现了什么:
让我们将摘要图中的前三个特性与相关矩阵交叉引用,以查看哪些特性可能被拆分:
- SAT average与完成率相关,与admission rate 和first-generation ratio呈负相关。
- First-generation ratio与part-time ratio相关,与完成率呈负相关。
几个相关的特性被分组在摘要图列表的顶部。值得关注的是完成率和录取率,这两个指标在列表中较低。
SHAP有一个dependency_plot()函数,可以帮助揭示更多细节。例如,让我们看看第一代比率和兼职比率之间的相互作用。正如我们在摘要图中观察到的那样,我们可以看到first-generation ratio与其Shapley值成反比。摘要图也向我们表明,当大学的兼职学生比例较低时,相关性更强。
结论
在这篇博客文章中,我们演示了如何使用SHAP解释tf.keras模型。 我们还回顾了如何使用SHAP API和几种SHAP绘图类型。 最后,为了获得完整和准确的图片,我们讨论了公平性和相关变量等考虑因素。你现在可以使用工具更好地了解TensorFlow Keras模型中正在发生的事情!
有关我在此处介绍的更多信息,请查看以下资源:
- Colab笔记本从你的浏览器运行模型(https://colab.research.google.com/github/kweinmeister/notebooks/blob/master/tensorflow-shap-college-debt.ipynb)
- GitHub存储库与笔记本(https://github.com/kweinmeister/notebooks/blob/master/tensorflow-shap-college-debt.ipynb)
- 从tf.keras开始(https://www.tensorflow.org/guide/keras)
- SHAPGitHub存储库(https://github.com/slundberg/shap)
编译出品