如何同时处理多次序列?


15

我有一个数据集,其中包括25个期间的几种产品(1200种产品)的需求,我需要预测下一个时期每种产品的需求。起初,我想使用ARIMA并为每种产品训练一个模型,但是由于产品数量和(p,d,q)参数的调整,这非常耗时且不切实际。是否建议在先前需求为自变量的情况下使用回归(自回归)?

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


3
我知道,用于进行高维时间序列分析的最先进的软件包bigtime在R中。也许您可以从Python调用R来使用它。
理查德·哈迪

Answers:


11

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

我建议以低度的一些简单的基于矢量的模型(例如VAR,VMA,VARMA)为起点,并为互相关设置一些简单的参数限制。看看是否可以找到一个合理的模型,该模型将互相关与至少一个滞后程度结合在一起,然后从那里开始。此练习将需要阅读基于向量的时间序列模型。该MTS包装bigtimepacakageR有一套处理多元时间序列的一些功能,所以它也将是值得熟悉这些包。


bigtime我知道MTS,用于高维时间序列分析的最先进的软件包在R中。据我所知,它更像是教科书示例的演示,而不是实际的工作工具。在阻塞计算负担之前,那里的一些多元示例只能处理3维序列。
理查德·哈迪

@理查德·哈迪(Richard Hardy):谢谢---我已经编辑了答案以包含此内容。
恢复莫妮卡

1
进行此操作的一种好方法是考虑贝叶斯VAR,或更具体地说是大型贝叶斯VAR模型。
Graeme Walsh

7

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

包括我的团队当前使用的在内,更常见的是分层预测(另请参见此处)。每当我们具有相似时间序列的组时,就会使用分层预测:相似或相关产品组的销售历史记录,按地理区域分组的城市的游客数据等。

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

在此处输入图片说明

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

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

有关其他详细信息,请参见此回复(和评论)

对于Python软件包,PyAF可用,但也不是很流行。大多数人在R中使用HTS程序包,对此它有很多社区支持。对于基于LSTM的方法,有Amazon的DeepAR和MQRNN模型,它们是您必须付费购买的服务的一部分。也有几个人使用Keras实施LSTM进行需求预测,您可以查找它们。


1
作为旁白 。AUTOBOX实现了您在使用GROUP total作为可能的驾驶系列时所引用的那种层次建模,以便使用SARMAX模型帮助对儿童进行预测。子级预测中的不确定性也将是父级中不确定性的累积函数,同时又包含了两者中未来脉冲的可能性。
IrishStat

亚马逊最近在利用MxNet框架的GluonTS框架下开放了DeepAR算法的源代码,尽管我发现此时缺少文档。 aws.amazon.com/blogs/opensource/…–
hardikudeshi

5

所建议的大规模拟合软件包的问题是,它们始终无法处理潜在的确定性结构(例如脉冲,水平/阶跃偏移,季节性脉冲和时间趋势),或者无法有效地按照https://处理用户建议的因果关系autobox.com/pdfs/SARMAX.pdf

此外,计算时间可能会很复杂。AUTOBOX(由我帮助开发)具有非常复杂的模型构建阶段,可以对模型进行存档,并且具有非常快速的预测选项,该选项可以重用以前开发的模型,从而将预测时间减少到严格模型开发时间的一小部分,同时可以调整最新的预测开发并存储模型后观察到的数据。这是为Annheuser-Busch的600,000家商店预测项目实施的,其中考虑了Price和Weather,涉及约50多种商品。

可以滚动方式更新模型,并根据需要替换先前的模型。

不需要参数约束,也不必像VAR和VARIMA那样忽略因果变量的同时影响,而仅依赖于所有系列的过去ARIMA。

无需仅具有1组参数的模型,因为模型可以而且应该针对各个系列进行定制/优化。

不幸的是,目前还没有Python解决方案,但希望源源不断。


1
听起来不错。只是一个小小的错误:即使在像VAR这样简单的事情中,每个系列也都有自己的方程式,因此不必担心只有一个带有1组参数的模型。除非您为同一系列建议几个模型,否则从预测组合的角度来看这可能是个好主意。
理查德·哈迪

目标:“为所有1200个产品的需求预测训练一个模型?”我将其作为一种类型方程,带有从1200个时间序列中估算出的一组固定/全局参数。”也许我过度阅读了
IrishStat

也许我错了。
理查德·哈迪

3

1200种产品是您问题所在范围的主要驱动因素。现在您只有25个期间。这是非常少的数据,不足以进行任何类型的关联分析。换句话说,您没有数据可以同时预测所有产品而不降低尺寸。这几乎消除了所有VARMA和其他不错的理论模型。这些模型的系数是不可能的,估计的系数太多了。

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

第一种方法很明显:您独立运行每个产品。变化是将它们按某些功能分组,例如,诸如“男装关闭”之类的扇区。

d一世=ĴFĴβĴ一世+Ë一世FĴ

如果这是一个外在因素,那么您需要通过分别对这些因素进行回归来获得beta。对于PCA,您可以做一个强大的PCA,并获得权重为beta的前几个因素。

F^Ĵ


我看到您的观点是在一个非常短的时间序列中出现了25个周期,但是如果它们是月度值怎么办?然后,OP有两年的月度数据,足以捕获某些季节性因素,或者至少使用简单的指数平滑法,不是吗?
Skander H.19年

@ SkanderH。,25分就足以运行一个系列(即每个系列自己运行)或合计。我的观点是,仅将其作为系统运行是不够的。
阿萨卡(Aksakal),

或者它们可能是外源因素,例如您通过PCA分析获得的那些。也许是内生的
理查德·哈迪

1

我不知道,如果你有兴趣在基于云的解决方案,但亚马逊使得他们称之为“DeepAR”可以通过AWS SageMaker的算法,因为看到这里

该算法专门旨在能够从多个输入时间序列中学习,以便创建包括静态和动态特征的预测;如以上链接页面的摘录所示:

DeepAR算法的训练输入是通过相同过程或相似过程生成的一个或最好是更多目标时间序列。基于此输入数据集,该算法将训练一个模型,该模型学习此过程的近似值,并使用它来预测目标时间序列的演变方式。每个目标时间序列可以可选地与cat字段提供的静态(与时间无关)分类特征向量和dynamic_feat字段提供的动态(与时间有关)时间序列向量关联。

不幸的是,据我所知,他们没有将此算法提供给离线/自托管使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.