跨多个商店的数千种产品的产品需求预测

机器算法验证 时间序列 预测 预测模型 多层次分析
2022-03-20 05:24:47

我目前正在处理一项需求预测任务,其中包含数千家商店的数万种产品的数据。更具体地说,我有每家商店每件产品几年的每日销售数据,我的目标是预测每家商店每件商品的未来销售额,提前一天;然后提前两天,等等。

到目前为止,我已经考虑将每个产品-商店对分解为单个时间序列,并按照 Neal Wagner 的论文“预测现实系统中多个时间序列的智能技术”中所做的那样对每个时间序列进行预测换句话说,我将仅使用特定商店的产品销售历史信息来预测该产品在该商店中的未来销售情况。

但是,我一直在浏览 Kaggle,像Corporación Favorita Grocery Sales Forecasting这样的竞赛提出了一种不同的方法,即使用来自所有商店和所有产品的信息来预测未来的销售情况。据我了解,所有商店的所有产品的历史销售信息都被转储到训练集中,模型将从中学习预测未来的销售。它与传统的时间序列方法有很大不同,但显然,根据比赛的结果,它是有效的。

后一种方法似乎很有希望并且更强大。但是,存在必须处理数亿个数据点的问题。

哪种方法更适合我的任务?对于那些解决过类似问题的人,您会推荐哪种方法?

1个回答

我不推荐 Neal等人使用的方法。. 他们的数据是独一无二的,原因有两个:

  • 他们正在处理食品数据,这些数据通常比其他零售产品销售数据更密集、更稳定。一个特定的地点每周将销售数十个牛奶盒或鸡蛋包,并且几十年来一直在销售这些相同的产品,而时装或汽车零件每 3 或 4 周销售一件商品的情况并不少见,并且只有一两年的数据可用。

  • 他们预测的是仓库而不是商店。一个仓库覆盖多个商店,因此他们的数据比平均水平还要密集。实际上,仓库通常用作商店的自然聚合/分组级别,因此它们实际上已经在执行商店数据的分组。

由于数据的性质,他们可以直接对单个时间序列进行建模。但大多数零售商的数据在单个 sku/商店级别上过于稀疏,以至于他们无法实现这一目标。

正如 zbicyclist 所说,这个问题通常使用分层或多梯队预测来解决。商业需求预测包都使用某种形式的分层预测

这个想法是将产品和商店分组到相似的产品和区域中,生成汇总预测并用于确定整体季节性和趋势,然后使用自上而下的方法与为每个单独的 sku 生成的基线预测进行协调。 /存储组合。

除了提到的挑战 zbicyclist 之外,更大的问题是找到产品和商店的最佳组合是一项艰巨的任务,需要结合领域专业知识和经验分析。产品和商店通常按详细的层次结构分组在一起(按部门、供应商、品牌等...对于产品,按地区、气候、仓库等...对于位置),然后将其与历史销售额一起输入预测算法数据本身。


解决 meraxes 评论

Corporación Favorita Grocery Sales Forecasting Kaggle Competition 中使用的方法怎么样,它们允许模型从几个(可能不相关的)产品的销售历史中学习,而无需进行任何明确的分组?这仍然是一种有效的方法吗?

他们通过使用 store、item、famlily、class、cluster 作为分类特征来隐式地进行分组。

我刚刚通读了一点 Rob Hyndman 关于分层预测的部分。在我看来,采用自上而下的方法可以提供对总体水平的可靠预测;然而,它的巨大缺点是由于聚合而丢失信息,这可能会影响底层节点的预测。它也可能“无法捕捉和利用单个系列特征,例如时间动态、特殊事件”。

与此相关的三点:

  • 他指出的缺点取决于数据的分组。如果您汇总所有产品和商店,那么是的,这将是一个问题。例如,聚合所有地区的所有商店会混淆任何地区特定的季节性。但是你应该只聚合到相关的分组,正如我所指出的,这需要一些分析和实验才能找到。
  • 在零售需求的具体案例中,我们并不担心“聚合丢失信息”,因为往往底层节点(即SKU/Store)的时间序列包含的信息很少,这也是我们将它们聚合到更高的原因。水平放在第一位。
  • 对于 SKU/商店特定事件,我们团队处理它的方式是在生成预测之前删除事件特定影响,然后在生成预测之后将它们添加回来。有关详细信息,请参见此处