我如何可视化不同输入对黑盒非线性模型预测的重要性?

机器算法验证 数据可视化 介绍
2022-03-28 01:34:14

我正在构建一个交互式预测工具(在 python 中),以帮助在我的组织中进行预测。迄今为止,预测过程在很大程度上是由人为驱动的,预测者在他们的自然神经网络中吸收数据,并利用他们学到的直觉来做出预测。从我所做的长期预测验证和预测建模研究中,我发现了您可能期望的结果;不同的预测者表现出不同的偏差,某些预测者的影响似乎被夸大了,而其他重要的预测者似乎被忽略了,与相对简单的经验模型相比,总体预测表现平平。

预测将继续是手动的,但我正在尝试构建一个有用的工具,为预测者提供更好地量化预测变量的相对影响。还有一些重要的影响,例如经常被忽视的季节性影响,我希望该工具向用户突出显示。我预计一些“经验丰富”的预测者(其中许多人几乎没有正式的统计知识)会对建模过程产生一定程度的强烈反对和怀疑,因此沟通至少与模型性能本身一样重要实现预测准确性的显着提高。

我正在开发的模型有一个强大的自回归分量,有时会被事件显着修改,这些事件在一些预测变量中显示为测量值,在非事件时间,接近于零。这符合预测者使用的心理模型。关键部分是能够证明哪些“事件”测量在推动预测远离任何给定预测的自回归值方面最具影响力。我以这种方式对过程进行成像;预测者猜出他们的最佳猜测值,模型建议一个不同的值,预测者问为什么。模型回复类似“看这里,这个预测变量的这个值增加了夏季的预测值。如果是冬天,它会向另一个方向移动。我知道还有这些其他测量值,

现在,想象模型是一个简单的线性回归。可以想象通过将值乘以模型系数并显示为简单的条形图来显示基于事件的预测变量的相对“效果”。来自不同预测变量的所有条形加起来就是与 AR 值的总偏差,这简洁而清晰地显示了在这种情况下具有强烈影响的条形。

问题在于,被预测的过程在预测变量中显示出高度的非线性,或者至少,我使用黑盒非线性机器学习算法(随机森林和 GBM)比使用 GLM 取得了更大的成功这个数据集。理想情况下,我希望能够在不改变用户体验的情况下无缝地更改“引擎盖下”工作的模型,因此我需要一些通用的方法来以简单的方式展示不同测量的重要性,而不使用某些算法特定的方法。我目前的方法是通过将除一个预测变量之外的所有值设置为零来准线性化效果,记录预测偏差,然后对所有预测变量重复,在上面提到的条形图中显示结果。在存在强非线性的情况下,这可能效果不佳。

2个回答

评估预测变量对预测的影响的一种方法是估计输出相对于预测变量的梯度。这可以通过通过有限差分估计非线性预测函数关于每个预测变量的偏导数来完成。

理想情况下,您将在实际观察到的测试输入上执行此操作。例如,您可以平均前 2 天所有测试输入处估计梯度的绝对值。该平均梯度的大小可用于对预测变量的重要性进行排序。(您需要小心梯度估计,以通过 z 评分或某种此类方法使用适当的单位。)您可以按季节保存这些估计的梯度以进行比较分析。

请参阅David Baehrens 等人的如何解释个体分类决策”。人。在 JMLR 中了解更多关于这个想法的信息。该论文处理分类,但也很容易推广到回归。

您是否在 python 中尝试过scikit-learn模块。

您可以“computer_importance”为其 randomForestClassifier 的功能