训练一个模型适用于多个时间序列

机器算法验证 时间序列 预测 面板数据 数据集
2022-04-03 19:11:56

我一直在使用时间序列数据来尝试对产品进行多步需求预测。有数千种产品,为每种产品调整单个模型在计算上非常昂贵且劳动密集型。

据我所知,有几个现实的选择可供我使用:

  1. 尝试将“相似”产品组合在一起。根据他们的时间序列,它们看起来并不相关,但也许有一些方法可以对不同长度的时间序列数据进行聚类?我尝试了一些使用动态时间扭曲的方法,但是当我拥有可管理数量的集群(10-20)时,该系列看起来非常不同。我不知道是否有对时间序列数据进行聚类的标准方法,或者是否有某种关于聚类何时变得不同的指导方针?如果这可行,则为每个集群手动调整模型。

  2. 同时在所有不同的时间序列上训练一个模型(可能是神经网络或 LSTM),希望这个模型能够对每个输入的时间序列产生“好的”预测。

是否有某种方法可以训练模型以对许多(看似无关的)时间序列数据进行预测?我读过的大多数文献都关注为一个时间序列生成模型,而不是更通用的模型。我理解在预测时假设模型能够“模仿”生成现有数据的函数,因此很难拥有多用途模型。但是必须有某种解决方案或普遍接受的方式来处理许多不同的时间序列数据?

2个回答

是否有某种方法可以训练模型以对许多(看似无关的)时间序列数据进行预测?

最接近实际方法的是分层预测

在我的团队(我从事需求预测工作)中,我们使用一种分层预测来生成产品/位置组的预测(例如,针对单个地区的整个产品类别)。但是,我们不进行任何类型的聚类或科学相似性分析,而是有一个由业务定义的预定义产品相似性矩阵(根据产品类型、供应商等...)。该方法在本质上与 Kolassa 博士提到的论文相似,在某种意义上,集团层面的预测提供了预测的季节性和形状——然后单个产品历史被简单地用于调整信号的高度。

  1. 同时在所有不同的时间序列上训练一个模型(可能是神经网络或 LSTM),希望这个模型能够对每个输入的时间序列产生“好的”预测。

另一方面,您在 (2) 中描述的方法是亚马逊在其 DeepAR 模型中使用的方法。它是一个巨大的 LSTM,它同时接收所有产品,然后尝试学习不同产品之间的相关性,从而给出一个用于所有产品的大模型。尽管即使使用 DeepAR,您仍然必须提供产品属性特征,以便它正确估计产品相似度。

是的,有一些方法可以做到这一点。您可以应用某种元学习来使学习过程适应每个单独的时间序列,或者使用迁移学习将从一个序列学到的知识转移到另一个序列。我没有指针,因为这肯定不是我要做的第一件事,见下文。

您还可以尝试计算产品组的季节性指数并将它们一起去季节化,然后将更简单的非季节性模型应用于去季节化的系列。Mohammadipour, Boylan & Syntetos, Foresight , 2012的“产品组季节性指数对单个产品的应用”是一篇关于此的简单论文类似的流程也适用于其他驱动因素,例如趋势、日历事件或促销活动。


或者,请考虑为所有系列拟合简单模型,例如指数平滑这将非常适合。或者,在一些特征工程上投入一点时间并考虑一个非常简单的线性模型——请参阅Varmerdam 的 PyData 演示文稿,了解简单模型的好处;他甚至讨论了时间序列模型。如果不出意外,更简单的模型将作为一个有用的基准。在你花了一天时间训练简单模型和两周元和迁移学习更复杂的模型之后,你很可能会发现简单模型的表现要优于更复杂的模型(而且它们更易于解释和交流,以及在生产中维护。)