使用机器学习方法时,是否有必要对时间序列数据进行去趋势和循环?

机器算法验证 时间序列 机器学习 平稳性 预言
2022-03-29 07:11:06

例如:

我想使用 ANN 和/或 SVM 根据多个时间序列的先前值来预测时间序列的未来值。输入将是每个时间序列的滞后值,输出将是提前一步的预测(具有更远视野的预测将通过使用先前的预测“滚动”预测来完成)。

现在,SVM 和 ANN 不应该能够学习趋势和周期吗?他们不能学习诸如“在所有其他条件相同的情况下,这个系列的输出应该是之前输出的 2 倍”之类的东西吗?或者,如果我为月份提供一个分类变量,“因为现在是 1 月,将我所做的预测除以 2?”

试图对数据进行循环和去趋势化会导致施加比必要更多的偏见吗?

3个回答

对于机器学习算法,使用特征缩放或归一化来帮助算法在训练期间快速收敛并避免一组特征支配另一组特征通常是有益的。以预测股票价格的问题为例。如果您将苹果或微软等高价股票与一些低价股一起包括在内,那么您必然会从苹果和微软的价格中提取的高价值特征将压倒您从低价股中提取的那些特征,并且您不会在苹果对苹果的基础(没有双关语!),由此产生的训练模型可能不能很好地概括。

但是,恕我直言, “尝试对数据进行循环和去趋势化”将是一件非常好的事情。提取各种循环和趋势分量并通过减去它们各自的平均值并除以它们的标准差来归一化它们会将所有时间序列的所有数据置于相同的近似范围内,然后您将训练喜欢喜欢的数据,当通过反转归一化重新缩放,可能会更好地泛化用于预测目的。

此外,对于任何时间序列,趋势可能会淹没循环分量,因此您可能最终只训练趋势数据,这些数据几乎肯定不会在循环时间序列上表现良好,反之亦然。通过分离这两个组件并使用单独的 SVM 或 NN 对每个组件进行训练,然后重新组合这两个预测,您最终可能会得到一个更准确且更易于推广的算法。

与趋势或周期运行的时间尺度相比,您预测多远?Zhang, Qi 2005 -“季节性和趋势时间序列的神经网络预测”发现去季节性和去趋势 (DSDT) 是有益的,但它们的预测时间尺度与它们的趋势/季节性时间尺度相似。相比之下,我一直在研究数据,在这些数据中我进行了较短的时间尺度预测(例如 1 天),而趋势/季节性只在更长的时间尺度上起作用。DSDT 确实在一定程度上提高了我的预测准确性,但没有 DSDT,ML 可以自行相当好地应对,因为趋势/季节性与最后几个数据点实际上无关。

我很确定您在这里使用了错误的工具。

为插值创建 ML 方法(如从时间序列 B 和 C 预测时间序列 A);对于外推,我们有马尔可夫链和朋友。

您的方法的问题在于,在这种情况下非常容易过度拟合模型,更糟糕的是,很难发现这一点(正常的交叉验证会失败,因此很难以正确的方式拟合参数等.)。
为预测变量添加显式时间也是一个坏主意——我已经看到模型在时间和决策上拟合,在交叉验证和训练后数据测试的随机猜测中具有 90% 的准确率。如果您需要时间,最好将其包含为一系列周期描述符,例如星期几或午夜过后的秒数,显然永远不会超过甚至接近您的训练系列的长度。