如何同时处理多个倍数序列?

机器算法验证 机器学习 时间序列 有马
2022-01-17 09:18:35

我有一个数据集,包括 25 个时期的几种产品(1200 种产品)的需求,我需要预测下一个时期每种产品的需求。一开始想用ARIMA,为每个产品训练一个模型,但是因为产品的数量和(p,d,q)参数的调优,太费时了,不实用。是否建议使用先前需求为自变量的回归(自回归)?

我可以知道是否有任何方法可以为所有 1200 种产品的需求预测训练单个模型?如果您能推荐 Python 中的任何库,我将不胜感激,因为我正在使用 Python。

4个回答

正如 Ben 提到的,多个时间序列的教科书方法是 VAR 和 VARIMA 模型。但在实践中,我还没有看到它们经常在需求预测的背景下使用。

更常见的,包括我的团队目前使用的,是分层预测也请参见此处)。只要我们有类似时间序列的组,就会使用分层预测:类似或相关产品组的销售历史,按地理区域分组的城市的旅游数据等......

这个想法是对您的不同产品进行分层列表,然后在基本级别(即每个单独的时间序列)和由您的产品层次结构定义的聚合级别(参见附图)进行预测。然后,您可以根据业务目标和所需的预测目标来协调不同级别的预测(使用自上而下、自下而上、最优协调等)。请注意,在这种情况下,您不会拟合一个大型多元模型,而是在层次结构中的不同节点处拟合多个模型,然后使用您选择的协调方法对这些模型进行协调。

在此处输入图像描述

这种方法的优势在于,通过将相似的时间序列分组在一起,您可以利用它们之间的相关性和相似性来找到单个时间序列可能难以发现的模式(例如季节性变化)。由于您将生成大量无法手动调整的预测,因此您需要自动化您的时间序列预测过程,但这并不太难 -请参阅此处了解详细信息

亚马逊和优步使用了一种更先进但在精神上相似的方法,其中一个大型 RNN/LSTM 神经网络在所有时间序列上同时进行训练。它在精神上类似于分层预测,因为它也试图从相关时间序列之间的相似性和相关性中学习模式。它与分层预测不同,因为它试图学习时间序列本身之间的关系,而不是在进行预测之前预先确定和固定这种关系。在这种情况下,您不再需要处理自动预测生成,因为您只调整一个模型,但由于模型非常复杂,调整过程不再是简单的 AIC/BIC 最小化任务,您需要查看更高级的超参数调整程序,

有关更多详细信息,请参阅此回复(和评论)

对于 Python 包,PyAF可用,但也不是很流行。大多数人在 R 中使用HTS包,对此有更多的社区支持。对于基于 LSTM 的方法,亚马逊的 DeepAR 和 MQRNN 模型是您必须付费的服务的一部分。有几个人还使用 Keras 实现了 LSTM 进行需求预测,你可以查一下。

通常,当您有多个时间序列时,您会使用某种基于矢量的模型同时对它们进行建模。为此目的,ARIMA 模型的自然扩展是 VARIMA(向量 ARIMA)模型。个时间序列这一事实意味着您需要对模型中的互相关项指定一些严格的参数限制,因为您将无法处理每对时间序列变量的自由参数。1200

我建议从一些简单的基于向量的低度数模型(例如,VAR、VMA、VARMA)开始,以及一些简单的互相关参数限制。看看你是否能找到一个合理的模型,将互相关与至少一个滞后度结合起来,然后从那里开始。这个练习需要阅读基于向量的时间序列模型。MTSbigtime的包R有一些处理多变量时间序列的能力,所以熟悉这些包也是值得的。

已经提出的质量拟合包的问题是它们始终无法处理潜在的确定性结构,例如脉冲、电平/阶跃变化、季节性脉冲和时间趋势,或者按照https://有效处理用户建议的因果关系autobox.com/pdfs/SARMAX.pdf

此外,计算时间可能是一个严重的并发症。AUTOBOX(我帮助开发)有一个非常复杂的模型构建阶段,用于归档模型和一个非常快速的预测选项,它重用以前开发的模型,将预测时间减少到严格模型开发时间的一小部分,同时调整最近的新预测模型开发和存储后观察到的数据。这是为 Annheuser-Busch 的 600,000 家商店预测项目实施的,该项目针对大约 50 多种商品,同时考虑了价格和天气。

模型可以滚动更新,根据需要替换之前的模型。

不需要参数限制或省略因果变量的同时影响,如 VAR 和 VARIMA ,而仅依赖于所有系列的过去 a la ARIMA 。

不需要只有一个模型和一组参数,因为模型可以而且应该针对单个系列进行定制/优化。

不幸的是,目前还没有 Python 解决方案,但希望永远存在。

1200 个产品是问题维度的主要驱动力。现在你只有 25 个周期。这是非常少的数据,不足以进行任何类型的全面相关性分析。换句话说,您没有数据可以在不降低维度的情况下同时预测所有产品。这几乎消除了所有 VARMA 和其他不错的理论模型。处理这些模型的系数是不可能的,它们太多了,无法估计。

考虑一个简单的相关分析。您需要协方差/相关矩阵中的 (1200x1200 + 1200)/2 个单元格。您只有 25 个数据点。该矩阵将在很大程度上降低秩。你会怎样做?一般来说,您有两种简单的方法:单独的预测和因子模型。

第一种方法很明显:您独立运行每个产品。变化是按某些特征对它们进行分组,例如“男士收尾”等部门。

第二种方法是将产品需求表示为,其中是一个因素。有哪些因素?这些可能是外生因素,例如 GDP 增长率。或者它们可能是外生因素,例如您通过 PCA 分析获得的因素。di=jFjβji+eiFj

如果它是一个外生因素,那么您需要通过单独回归这些因素的系列来获得 beta。对于 PCA,你可以做一个健壮的 PCA 并获得前几个因子的权重,即你的 beta。

接下来,您分析这些因素,并建立一个预测模型来产生并将它们插入到您的模型中以获得对产品需求的预测。您可以为每个因子运行时间序列模型,甚至可以为多个因子运行向量模型(例如 VARMA)。现在,问题的维数减少了,您可能有足够的数据来构建时间序列预测。F^j