评估时间序列的可预测性

机器算法验证 时间序列 预测 可预测性
2022-02-07 17:19:35

假设我从 2005 年 1 月到 2011 年 12 月有超过 20.000 个每月时间序列。每一个都代表不同产品的全球销售数据。如果我不想为每一个产品计算预测,而是只想关注少数“真正重要”的产品,那会怎样?

我可以按年总收入对这些产品进行排名,并使用经典的 Pareto 缩减列表。在我看来,尽管它们对底线贡献不大,但有些产品很容易预测,将它们排除在外将是错误的判断。过去 10 年每月销售 50 美元的产品可能听起来不多,但它需要很少的努力来预测未来的销售情况,我不妨这样做。

因此,假设我将我的产品分为四类:高收入/易于预测 - 低收入/易于预测 - 高收入/难以预测 - 低收入/难以预测。

我认为只留下属于第四组的那些时间序列是合理的。但是我如何准确地评估“可预测性”?

变异系数似乎是一个很好的起点(我还记得不久前看过一些关于它的论文)。但是,如果我的时间序列表现出季节性/水平变化/日历效应/强烈趋势怎么办?

我想我应该只根据随机分量的可变性而不是“原始”数据之一进行评估。还是我错过了什么?

以前有没有人偶然发现过类似的问题?你们会怎么做呢?

一如既往,非常感谢任何帮助!

4个回答

这是基于 stl 的第二个想法。

您可以对每个系列进行 stl 分解,然后将剩余分量的标准误差与忽略任何部分年份的原始数据的平均值进行比较。易于预测的系列应该具有较小的 se(余数)与均值(数据)的比率。

我建议忽略部分年份的原因是季节性会影响数据的平均值。在问题的示例中,所有系列都有完整的七年,所以这不是问题。但如果该系列延伸到 2012 年,我建议只计算到 2011 年底的平均值,以避免平均值的季节性污染。

这个想法假设均值(数据)是有意义的——即数据是平均平稳的(除了季节性)。它可能不适用于具有强烈趋势或单位根的数据。

它还假设良好的 stl 拟合转化为良好的预测,但我想不出一个不正确的例子,所以这可能是一个好的假设。

这是预测中相当普遍的问题。传统的解决方案是计算每个项目的平均绝对百分比误差 (MAPE)。MAPE 越低,项目越容易预测。

一个问题是许多系列包含零值,然后 MAPE 未定义。

我在Hyndman 和 Koehler (IJF 2006) [预印本]中提出了一个使用平均绝对比例误差 (MASE) 的解决方案。对于每月时间序列,缩放将基于样本内的季节性幼稚预测。那就是如果yt是时间的观察t, 数据从时间 1 到T

Q=1T12t=13T|ytyt12|,
那么比例误差是qt=(yty^t)/Q, 在哪里y^t是一个预测yt使用您为该项目实施的任何预测方法。取标度误差的平均绝对值来获得 MASE。例如,您可以使用滚动原点(又名时间序列交叉验证)并取结果一步的平均绝对值(或h-步骤)错误。

易于预测的系列应具有较低的 MASE 值。这里的“易于预测”是相对于季节性的幼稚预测来解释的。在某些情况下,使用替代基础度量来衡量结果可能更有意义。

您可能对ForeCA: Forecastable Component Analysis感兴趣(免责声明:我是作者)。顾名思义,它是一种降维/盲源分离 (BSS) 技术,用于从许多多变量(或多或少平稳)时间序列中找到最可预测的信号。对于您的 20,000 个时间序列的特殊情况,它可能不是最快的事情(解决方案涉及多元功率谱和最佳权重向量的迭代、分析更新;此外,我猜它可能会遇到pn问题。)

CRAN上还有一个 R 包ForeCA(同样:我是作者),它实现了基本功能;现在它支持估计可预测性度量的功能Ω(xt)对于单变量时间序列,它对多变量光谱有一些很好的包装函数(同样,20,000 个时间序列可能太多而无法一次处理)。

但是也许您可以尝试使用 Rob 提出的 MASE 度量,将 20,000 个子组中的几个子组进行粗略的网格分离,然后将 ForeCA 分别应用于每个子组。

这个答案已经很晚了,但对于那些仍在寻找产品需求时间序列可预测性的适当度量的人,我强烈建议查看近似熵

时间序列中重复波动模式的存在使其比没有这种模式的时间序列更可预测。ApEn 反映了类似观察模式不会被其他类似观察遵循的可能性。 [7] 包含许多重复模式的时间序列具有相对较小的 ApEn;较不可预测的过程具有较高的 ApEn。

产品需求往往具有很强的季节性成分,使得变异系数 (CV) 不合适。ApEn(m, r) 能够正确处理这个问题。就我而言,由于我的数据往往具有很强的每周季节性,因此我按照此处的建议设置了参数 m=7 和 r=0.2*std 。