通过学习分位数函数提升预测准确性
分位数函数是一种数学函数,它以分位数(分布的百分比,从0到1)作为输入,输出变量的值。它可以回答诸如"如果我想保证95%的客户在24小时内收到订单,我需要准备多少库存?"这样的问题。因此,分位数函数常用于预测问题的背景中。
然而在实际应用中,我们很少有一个整洁的公式来计算分位数函数。相反,统计学家通常使用回归分析一次近似一个分位数水平。这意味着如果你决定要计算不同的分位数,就必须建立一个新的回归模型——在今天,这通常意味着重新训练神经网络。
在两篇论文中,我们描述了一种同时学习整个分位数函数近似值的方法,而不是简单地近似每个分位数水平。
分位数函数
任何概率分布——比如人群中身高的分布——都可以表示为一个函数,称为概率密度函数(PDF)。该函数的输入是一个变量(特定身高),输出是一个正数,表示输入的概率(该人群中具有该身高的人的比例)。
一个有用的相关函数是累积分布函数(CDF),它是变量取特定值或低于特定值的概率——例如,身高5英尺6英寸或更矮的人群比例。CDF的值介于0(没有人矮于0英尺0英寸)和1(100%的人群矮于500英尺0英寸)之间。
从技术上讲,CDF是PDF的积分,因此它计算概率曲线到目标点下方的面积。在低输入值时,CDF输出的概率可能低于PDF输出的概率。但由于CDF是累积的,它是单调非递减的:输入值越高,输出值越高。
如果CDF存在,分位数函数就是它的反函数。分位数函数的图形可以通过将CDF图形翻转过来产生——即围绕从图形左下角到右上角的对角线轴旋转180度。
与CDF一样,分位数函数是单调非递减的。这是我们方法所基于的基本观察。
单变量情况
传统近似分位数函数方法(仅在特定点估计)的缺点之一是可能导致分位数交叉。也就是说,由于每个预测基于不同的模型,在不同的局部数据上训练,给定概率的预测变量值可能低于为较低概率预测的值。这违反了分位数函数必须单调非递减的要求。
为了避免分位数交叉,我们的方法同时学习几个不同输入值——分位数——的预测模型,这些分位数在0到1之间均匀分布。该模型是一个神经网络,设计为每个连续分位数的预测是前一个分位数预测的增量增加。
一旦我们的模型学习了几个强制分位数函数单调性的锚点估计,我们就可以通过锚点之间的简单线性外推(在文献中称为"节点")来估计函数,并使用非线性外推来处理函数的尾部。
在训练数据足够丰富以支持更密集的锚点(节点)集中时,线性外推提供了更准确的近似。
为了测试我们的方法,我们将其应用于具有三个任意峰值的玩具分布,以证明我们不需要对分布形状做任何假设。
多变量情况
到目前为止,我们一直在考虑分布应用于单个变量的情况。但在许多实际预测用例中,我们希望考虑多变量分布。
例如,如果某个产品使用不附带的稀有电池,对该电池需求的预测可能与对该产品需求的预测相关。
类似地,如果我们想要预测几个不同时间范围内的需求,我们期望连续预测之间存在某种相关性:需求不应过度波动。随时间范围的多变量概率分布应比每个范围的单独单变量预测更好地捕捉这种相关性。
问题在于多变量分位数函数的概念没有明确定义。如果CDF将多个变量映射到单个概率,当你反向执行该映射时,应该映射到哪个值?
这是我们在第二篇论文中解决的问题。同样,核心观察是分位数函数必须是单调非递减的。因此,我们将多变量分位数函数定义为凸函数的导数。
凸函数是处处趋向于单个全局最小值的函数:在二维中,它看起来像U形曲线。函数的导数计算其图形的斜率:再次在二维情况下,凸函数的斜率在接近全局最小值时为负但变平,在最小值处为零,在另一侧 increasingly 为正。因此,导数是单调递增的。
这个二维图像很容易推广到更高维度。在我们的论文中,我们描述了一种训练神经网络来学习作为凸函数导数的分位数函数的方法。网络的架构强制执行凸性,并且本质上,模型使用其导数作为训练信号来学习凸函数。
除了真实世界的数据集,我们还在多时间范围同时预测问题上测试了我们的方法,使用遵循多变量高斯分布的数据集。我们的实验表明,与单变量方法相比,我们的方法确实更好地捕捉了连续时间范围之间的相关性。
这项工作延续了某中心将分位数回归和深度学习结合以大规模解决预测问题的研究方向。特别是,它建立在2017年某中心科学家小组提出的MQ-CNN模型的工作基础上,该模型的扩展目前正在为某中心的需求预测系统提供动力。当前的工作也与样条分位数函数RNN密切相关,后者——像多变量分位数预测器一样——始于一个实习项目。
所有这些方法的代码都在开源GluonTS概率时间序列建模库中可用。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)或者 我的个人博客 https://blog.qife122.com/
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
公众号二维码
公众号二维码