Answers:
通常,当您有多个时间序列时,将使用某种基于矢量的模型来同时对它们进行建模。为此,ARIMA模型的自然扩展是VARIMA(矢量ARIMA)模型。您拥有时间序列这一事实意味着您将需要在模型中的互相关项上指定一些严格的参数限制,因为您将无法处理每对时间序列变量的自由参数。
我建议以低度的一些简单的基于矢量的模型(例如VAR,VMA,VARMA)为起点,并为互相关设置一些简单的参数限制。看看是否可以找到一个合理的模型,该模型将互相关与至少一个滞后程度结合在一起,然后从那里开始。此练习将需要阅读基于向量的时间序列模型。该MTS
包装和bigtime
pacakage中R
有一套处理多元时间序列的一些功能,所以它也将是值得熟悉这些包。
正如Ben所提到的,用于多个时间序列的教科书方法是VAR和VARIMA模型。但是在实践中,我还没有看到他们在需求预测中经常使用这种方法。
包括我的团队当前使用的在内,更常见的是分层预测(另请参见此处)。每当我们具有相似时间序列的组时,就会使用分层预测:相似或相关产品组的销售历史记录,按地理区域分组的城市的游客数据等。
想法是对您的不同产品进行分层列表,然后在基本级别(即,每个单独的时间序列)和产品层次结构定义的汇总级别进行预测(请参见附图)。然后,您可以根据业务目标和所需的预测目标在不同级别(使用“自上而下”,“ Botton向上”,“最佳对帐”等)进行协调。请注意,在这种情况下,您将不适合一个大型的多元模型,而是在层次结构中不同节点上的多个模型,然后使用您选择的对帐方法对帐。
这种方法的优势在于,通过将相似的时间序列分组在一起,您可以利用它们之间的相关性和相似性来找到可能很难在单个时间序列中发现的模式(例如季节性变化)。由于您将生成大量无法手动调整的预测,因此您需要使时间序列预测过程自动化,但这并不是太困难- 有关详细信息,请参见此处。
Amazon和Uber使用了一种更高级但本质上类似的方法,其中一个大型RNN / LSTM神经网络可以同时训练所有时间序列。它在本质上与分层预测相似,因为它还尝试从相关时间序列之间的相似性和相关性中学习模式。它与分层预测不同,因为它试图了解时间序列本身之间的关系,而不是在进行预测之前预先确定并固定该关系。在这种情况下,您不再需要处理自动的预测生成,因为您仅调整了一个模型,但是由于该模型是非常复杂的模型,因此调整过程不再是简单的AIC / BIC最小化任务,您需要看更高级的超参数调整程序,
有关其他详细信息,请参见此回复(和评论)。
对于Python软件包,PyAF可用,但也不是很流行。大多数人在R中使用HTS程序包,对此它有很多社区支持。对于基于LSTM的方法,有Amazon的DeepAR和MQRNN模型,它们是您必须付费购买的服务的一部分。也有几个人使用Keras实施LSTM进行需求预测,您可以查找它们。
所建议的大规模拟合软件包的问题是,它们始终无法处理潜在的确定性结构(例如脉冲,水平/阶跃偏移,季节性脉冲和时间趋势),或者无法有效地按照https://处理用户建议的因果关系autobox.com/pdfs/SARMAX.pdf
此外,计算时间可能会很复杂。AUTOBOX(由我帮助开发)具有非常复杂的模型构建阶段,可以对模型进行存档,并且具有非常快速的预测选项,该选项可以重用以前开发的模型,从而将预测时间减少到严格模型开发时间的一小部分,同时可以调整最新的预测开发并存储模型后观察到的数据。这是为Annheuser-Busch的600,000家商店预测项目实施的,其中考虑了Price和Weather,涉及约50多种商品。
可以滚动方式更新模型,并根据需要替换先前的模型。
不需要参数约束,也不必像VAR和VARIMA那样忽略因果变量的同时影响,而仅依赖于所有系列的过去ARIMA。
无需仅具有1组参数的模型,因为模型可以而且应该针对各个系列进行定制/优化。
不幸的是,目前还没有Python解决方案,但希望源源不断。
1200种产品是您问题所在范围的主要驱动因素。现在您只有25个期间。这是非常少的数据,不足以进行任何类型的关联分析。换句话说,您没有数据可以同时预测所有产品而不降低尺寸。这几乎消除了所有VARMA和其他不错的理论模型。这些模型的系数是不可能的,估计的系数太多了。
考虑一个简单的相关分析。在协方差/相关矩阵中需要(1200x1200 + 1200)/ 2个像元。您只有25个数据点。矩阵将在很大程度上降低等级。你会怎样做?广义上讲,您有两种简单的方法:单独的预测和因子模型。
第一种方法很明显:您独立运行每个产品。变化是将它们按某些功能分组,例如,诸如“男装关闭”之类的扇区。
如果这是一个外在因素,那么您需要通过分别对这些因素进行回归来获得beta。对于PCA,您可以做一个强大的PCA,并获得权重为beta的前几个因素。
我不知道,如果你有兴趣在基于云的解决方案,但亚马逊使得他们称之为“DeepAR”可以通过AWS SageMaker的算法,因为看到这里。
该算法专门旨在能够从多个输入时间序列中学习,以便创建包括静态和动态特征的预测;如以上链接页面的摘录所示:
DeepAR算法的训练输入是通过相同过程或相似过程生成的一个或最好是更多目标时间序列。基于此输入数据集,该算法将训练一个模型,该模型学习此过程的近似值,并使用它来预测目标时间序列的演变方式。每个目标时间序列可以可选地与cat字段提供的静态(与时间无关)分类特征向量和dynamic_feat字段提供的动态(与时间有关)时间序列向量关联。
不幸的是,据我所知,他们没有将此算法提供给离线/自托管使用。
bigtime
在R中。也许您可以从Python调用R来使用它。