返回列表

Top 1% solution (28th)

390. M5 Forecasting - Accuracy | m5-forecasting-accuracy

开始: 2020-03-03 结束: 2020-06-30 销量与需求预测 数据算法赛
Top 1% solution (28th)

Top 1% solution (28th)

作者: Daniela A. | 发布时间: 2020-07-01

所以我想和大家分享一下我策略中的一些要点。

我决定不使用任何乘数。我不太喜欢那种方法,我更倾向于通过特征工程和调整超参数来提高模型的泛化能力。

特征工程

我使用了 @kyakovlevM5 - Three shades of Dark: Darker magic 中发布的一些想法,例如:

  • 滚动平均值和标准差 - 滞后 [ 28 ] 滚动窗口 [ 7 14 30 60 180 ]
  • 滚动平均值 - 滞后 [ 1 7 14 30 ] 滚动窗口 [ 7 14 30 60]
  • 针对 'item id'(商品ID)、'cat id'(类别ID)和 'dept id'(部门ID)的均值和标准差目标编码

我从 M5 - Out of stock feature (640x faster) 中提取了:

  • 'gap e log10' 和 'sale prob',并计算了它们滞后28天的滚动平均值。

我还使用了其他特征,例如 'sell price'(售价)的最后两位数字、'days from last price change'(距上次价格变动的天数)、'sell price ratio'(售价比率)、'days from last sale'(距上次销售的天数)、'release week'(发布周)、'weeks from release'(发布后的周数)、'cluster'(聚类)、'ADI rolling mean'(ADI滚动平均值)以及考虑了 'weekend'(周末)、'snap'(SNAP补贴日)和 'event'(事件)+ 'preholidays'(节假日前)的目标编码。

还有一些不需要提及的基本特征。我还修正了我发现的一些异常值以及 讨论区 中提到的其他异常值。

关于数据,实际上我使用了自2011年以来的整个数据集来计算特征,除了编码特征,我将编码特征的起始日期设为2013年。

模型

我使用了 LightGBM,并为每家商店创建了模型,这是基于 @kyakovlev 的模型并根据我的需求进行了调整。

我使用了一种改编自 Time-Based Cross Validation 的滚动前向交叉验证方法进行训练。

我的想法

我认为我的解决方案还有很多可以改进的地方。到了周日,我的模型开始表现得很奇怪,所以我决定从零开始重建一切,所以我没有太多时间去分析哪些特征确实是好的。我删减了一堆特征,也没时间测试贝叶斯编码和其他想法,现在冷静下来我会去尝试这些。

希望这能帮助大家理解你们竞争对手的一些方法,尽管我们看到这次比赛的结果本来也可以通过“一些”乘数来达到。非常感谢那些分享想法并帮助改进我模型的人。

如果我忘记提及任何人的想法,请告诉我,我会给予适当的署名和引用。

同比赛其他方案