我目前正在开展一个项目,该项目使用 13 家不同商店的 70 种不同产品的销售数据。我想使用数据创建一个时间序列模型,因此我希望制作滞后的销售功能。数据框如下所示:
Out[73]:
record_ID week store_id sku_id units_sold
0 1 17/01/11 8091 216418 20
1 2 17/01/11 8091 216419 28
2 3 17/01/11 8091 216425 19
3 4 17/01/11 8091 216233 44
4 5 17/01/11 8091 217390 52
... ... ... ... ...
150145 212638 09/07/13 9984 223245 38
150146 212639 09/07/13 9984 223153 30
150147 212642 09/07/13 9984 245338 31
150148 212643 09/07/13 9984 547934 12
150149 212644 09/07/13 9984 679023 15
我想创建 units_sold 目标变量的滞后特征。问题是,我想为每个产品 (sku_id) 以及商店 (store_id) 执行此操作。当我制作滞后特征时,我得到了正确的结果,但是它会按数据集的顺序考虑所有产品。这可以在下面看到。
Out[76]:
record_ID week store_id sku_id units_sold lagged_sales
0 1 17/01/11 8091 216418 20 NaN
1 2 17/01/11 8091 216419 28 20.0 #I do not want this lag to be here, since it is the lag of a different product!
2 3 17/01/11 8091 216425 19 28.0
3 4 17/01/11 8091 216233 44 19.0
4 5 17/01/11 8091 217390 52 44.0
5 9 17/01/11 8091 219009 18 52.0
6 10 17/01/11 8091 219029 47 18.0
7 13 17/01/11 8091 223245 50 47.0
8 14 17/01/11 8091 223153 82 50.0
9 17 17/01/11 8095 216418 99 82.0
如您所见,滞后特征只是按顺序为每个条目获取移位的units_sold。这反过来又考虑了不同产品的units_sold。例如,当您考虑一瓶百事可乐时,数据集会创建一个滞后单位,比如一瓶可乐。 (不同的 SKU_id)
我想制作一个滞后功能,显示每个产品/商店组合。仅考虑以下一种产品/商店组合时可以看出此问题:
对于商店 8095 中的产品 222087
temptrain = temptrain[temptrain['sku_id'] == 222087]
temptrain = temptrain[temptrain['store_id'] == 8095]
record_ID week store_id sku_id units_sold lagged_sales
18 30 17/01/11 8095 222087 214 102.0
1173 1670 24/01/11 8095 222087 129 35.0
2328 3306 31/01/11 8095 222087 64 64.0
3483 4942 07/02/11 8095 222087 71 82.0
4638 6582 14/02/11 8095 222087 88 282.0
5793 8220 21/02/11 8095 222087 135 171.0
6948 9854 28/02/11 8095 222087 131 66.0
8103 11469 07/03/11 8095 222087 113 56.0
很明显我的实现是错误的。 Lagged_sales 功能应该显示此特定产品/商店组合的滞后销售额。这是错误的,因为数据在第二个数据帧 (Out[76]:) 中的结构方式。如果有人能帮我解决这个问题,我将不胜感激。
我知道如果我像在最后一个数据帧中那样为每个商店/sku 组合明确创建一个新的数据帧,我就可以做到这一点,但是我想将其实现到我的初始数据帧中。
(注意:对不起,如果这令人困惑,很难准确表达我的意思)