样条可以用于预测吗?

机器算法验证 面板数据 样条 火星
2022-01-28 23:59:28

我无法具体说明数据的性质,因为它是专有的,但假设我们有这样的数据:每个月,有些人注册了一项服务。然后,在随后的每个月中,这些人可能会升级服务、中断服务或拒绝服务(例如,因为未能付款)。对于我们数据中最早的队列,我们​​有大约 2 年的数据(24 个月)。

每个月加入的人数很大(在 100,000 范围内),而做这三件事中任何一项的人数是数千人。但是,我们使用的不是个人级别的数据(可能是数百万行),而是按月和群组聚合的数据(每个群组每个月做每件事的比例)。

我们一直在使用多元自适应回归样条 (MARS) 对现有数据进行建模,并发现了一些有趣的结果。 但是,我担心使用这些来推断或预测未来。我担心的是因为对未来的预测必然在样本空间之外(就时间而言),并且样条曲线对于外推可能变得不稳定。

这是合法的方法吗?存在哪些问题,可以解决吗?

1个回答

根据我对问题的解释,您要问的根本问题是您是否可以将时间建模为样条曲线。

我将尝试回答的第一个问题是您是否可以使用样条线来推断您的数据。简短的回答是视情况而定,但在大多数情况下,样条曲线对于外推并不是那么好。样条曲线本质上是一种插值方法,它们对数据所在的空间进行分区,并且在每个分区处它们适合一个简单的回归器。那么让我们看看MARS的方法。MARS 方法定义为 ^F(X)=n一世=1α一世一世(X[一世])

f^(x)=i=1nαiBi(x[i])
在哪里α一世αi是 MARS 模型中第 i 项的常数,一世Bi是第 i 项的基函数,并且X[一世]x[i]表示在第 i 个术语从您的特征向量中选择的特征。基函数可以是常数,也可以是铰链函数(整流器)。铰链功能很简单 一种X(0,X[一世]+C一世)
max(0,x[i]+ci)
铰链函数迫使模型创建分段线性函数(有趣的是,具有校正线性激活函数的神经网络可以看作是 MARS 模型的超集模型)。

因此,回到为什么样条线通常不适用于外推的问题是要意识到,一旦您需要外推的点开始超出内插的边界,只有模型的很小一部分将被“激活”或者它的很大一部分将被“激活”,因此模型的力量消失了(因为缺乏变化)。为了对此有更多的直觉,让我们假设我们正在尝试将 MARS 模型拟合到位于R. 因此,给定一个数字,我们尝试预测另一个数字。MARS 模型提出了一个看起来像这样的函数: ^F(X)=5+一种X(0,X-5)+2一种X(0,X-10)


如果外推发生在数字之后10现在的功能变成 ^F(X)=10+2(X-10)=2X-10
我们之前的 MARS 模型现在归结为单个线性函数,因此 MARS 模型的功能消失了(这是大多数术语“激活”的情况)。数字之前的外推也会发生同样的事情5. MARS 模型的输出将只是一个常数。这就是为什么大多数时候样条不适合外推的原因。这也解释了您在帖子评论中提到的问题,即外推预测“对新值非常不利”,并且对于不同的时间序列,它们往往“朝着相同的方向继续”。

现在让我们回到时间序列。时间序列是机器学习中的一个非常特殊的案例。它们往往具有一些结构,无论是部分不变的还是许多不同类型的子结构之一,并且可以利用这种结构。但是需要能够利用这种结构的特殊算法,不幸的是样条不能做到这一点。

我建议您尝试几件事。第一个是循环网络。如果您的时间序列不是那么长(并且没有长期依赖关系),您应该能够使用简单的 vanilla 循环网络。如果您想了解正在发生的事情,您可以使用带有偏差的校正线性单元作为激活函数,这相当于对时间序列的子集和循环神经网络的“记忆”进行 MARS 建模持有。很难解释网络是如何管理内存的,但是您应该对生成的分段线性函数如何处理子空间有所了解。此外,如果您有不属于时间序列的静态特征,则在网络中仍然使用它们相对容易。

如果您拥有的时间序列很长并且可能具有长期依赖性,我建议使用门控循环网络之一,例如 GRU 或 LSTM。

在更经典的时间序列分类方面,您可以使用隐马尔可夫模型。我不会深入探讨这些,因为我对它们不太熟悉。

总之,我不建议使用样条线,原因有两个。一,它无法处理复杂的外推问题,这似乎是您所描述的问题。第二,样条不利用时间序列的子结构,这在时间序列分类中可能非常强大。

希望这可以帮助。