执行时间序列预测时何时删除重复项方便?

数据挖掘 时间序列 预言
2022-01-28 12:52:23

我有这个数据集。

 Head(df):

          ï..date   store item  qty    unit_price item_category 
 1220   2017-03-15    38  295   255      13.30            13 
 1453   2017-03-15    41   43   291      10.08            13 
 3181   2017-03-15    75  186   324      28.59            13 
 3541   2017-03-15    42  295   133      13.30            13 
 3624   2017-03-15    56  127   969      55.23            13 
 4657   2017-03-15    52   75   121      27.23            13 
 4702   2017-03-15    13  413    75      18.55            13 

日期列中显然有很多重复项(因为它取决于 store 和 items ,这是预期的),并且由于我的任务是进行预测并以 qty 变量的数字返回预测值 - 目标预测变量“数量”表示在 ITEM/DAY 级别销售的总数量 - 我认为我可以删除重复的日期(我将使用 ARIMA 模型)并仅保留 date 、 item 和 qty 列用于我的预测。

我想知道我的方法是否正确,任何建议将不胜感激,谢谢。

3个回答

在我看来,时间序列 ML 模型与其他常规 ML 模型有点不同。由于时间序列模型基于先前值的序列,因此删除日期可能会影响您的解决方案。

特别是在这种情况下,销售肯定取决于特定的日子。例如,考虑商店 38位于“2017-03-15”是假期的区域。因此,与其他商店等相比,商店 38的销售额将相对较高。

休息一下,您可以尝试两种不同的模型,一种是带日期的,另一种是不带日期的,并比较结果。

您通过删除“重复”而丢弃了许多有价值的数据,因为这些观察结果根本不是真正的重复;您的数据似乎是来自各种不同商店的不同时间序列的集合。

您仍然可以在这里使用 ARIMA,但 ARIMA 是一种单变量时间序列方法。我想到了一些可能的方法;

1)按日期聚合每个单独的时间序列/行(即取平均值/中位数),以便您拥有一个现在独立于商店编号的整体时间序列。根据您要执行的操作,这可能没问题,但您仍然会在这里丢失可能有用的信息。

2) 将单个 ARIMA/自动预测方法拟合到数据集中的每个单独的时间序列(因此,将预测方法拟合到每个单独的商店),然后使用分层时间序列方法将拟合的时间序列与实际总和相协调您在数据集中观察到的所有时间序列。可能是比 1) 更准确的方法,但需要更多的计算。

3) 保留您的数据集,但将日期列更改为时间特征,例如:2017-03-15 现在是 2017 + 74/365,或者 2017-03-15 现在是很多列;年 = 2017,月 = 三月,日 = 15,周 = 3,dayofWeek = 星期一,或类似的东西。现在,将问题视为监督学习(回归)问题。结合目标变量的滞后值或移动平均线(希望)捕捉短期趋势。如果您可以访问,请在日历上注明假期/重要事件或促销活动。使用商店 ID 作为功能。实际上,您正在尝试学习特定于每个商店的独特模式,同时还学习所有时间序列(如果存在)的“全局”模式。这是一个更“机器学习” 时间序列预测方法,它适用于您似乎拥有的数据集;但它需要大量的特征工程(通常)。

我正在尝试做类似的事情,并且我自己仍在摸索,但是以下内容可能会有所帮助:

ML 算法将数字视为表示某物的级别,因此当您有项目编号时,您可能需要对它们进行一次热编码,这将为您提供非常广泛的数据集。

要将数量与项目相关联,您可以使用数量作为项目列的值。这意味着你最终会得到这样的东西。

商店可能只是二进制的

 date           item295  item43  item186... store38  store41  store75
 2017-03-15     255      0       0          1        0        0
 2017-03-15     0        291     0          0        1        0
 2017-03-15     0        0       324        0        0        1

如果您想进一步减少行数,您可以考虑只为每个商店单独运行,然后一起删除商店列。那么你只剩下每个日期一行,其中每一列代表一个项目,值是数量。

希望这能让你朝着正确的方向前进。