返回列表

1st place solution

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

开始: 2020-03-03 结束: 2020-06-30 销量与需求预测 数据算法赛
第一名解决方案

第一名解决方案

作者: Yeonjun In
发布时间: 2020年7月3日

各位 Kaggle 参赛者好!:)

这是我第一次分享解决方案,希望对大家有所帮助。

致谢

首先,我要感谢比赛组织者和参加比赛的数据科学家们。我真的从大家身上学到了很多,非常感谢。(特别是 @kyakovlev 的内核和讨论,真的非常有帮助。)

解决方案

我使用的方法非常简单,并没有什么了不起。这一切都基于社区的见解。

预处理

  • 基于价格的特征
  • 基于日历的特征
  • 基于目标滞后的特征(递归 / 非递归)
  • 基于目标滞后滚动均值/标准差的特征(递归 / 非递归)

交叉验证策略

基于时间的划分:模拟训练/测试集划分

  • cv1 : d_1830 ~ d_1857
  • cv2 : d_1858 ~ d_1885
  • cv3 : d_1886 ~ d_1913
  • Public LB : d_1914 ~ d_1941
  • Private LB : d_1942 ~ d_1969
  • 不使用早停

建模策略

  • 递归 / 非递归
    • 按 store_id
    • 按 store_id - cat_id
    • 按 store_id - dept_id

模型

  • LGBM(单模型)
  • 目标函数 = tweedie

后处理

  • 后处理。(例如:魔法乘数 magic multiplier。)

简单总结图示

Simple Summary Diagram

心得与见解

我对 WRMSSE 这个指标并不熟悉,而且数据结构也很复杂。所以我首先阅读了组织者提供的文档,并从精彩的 Notebook 和讨论中获得了很多见解。

  1. 按州、商店、类别、部门划分的不同时间序列
  2. 灾害和天气对销量(目标)的影响
  3. “缺货”问题
  4. 销量的异常值
  5. 稳健的交叉验证(CV)的重要性

等等……

通过这些见解,我决定了两件事:

  1. 将具有相似时间序列的组进行划分并建模。
    (例如:按商店、按商店-类别、按商店-部门等。)
  2. 使用均值(CVs, Public Score)和标准差来选择最终模型。
    (特别是关注标准差。)

起初,我使用非递归方法建立了基线,我发现 CV 和 Public Score 有很大的差异(标准差大)。

然后,基于 @kyakovlev 的内核,我使用递归方法建立了第二个基线,但仍然存在很大的差异。

这里有趣的部分是:

  1. 总体而言,递归方法的得分优于非递归方法。
  2. 非递归方法在 cv3 上得分最高。
  3. 递归方法在 Public LB 上得分最高。

基于这些见解,我预计将非递归和递归方法集成可能会带来更好的鲁棒性。

然后,我将其选为最终模型。


正如我之前提到的,我的方法非常简单,并没有什么了不起。所以我完全没有预料到这个结果。我很幸运能学到很多东西并获得令人难以置信的结果。

感谢所有的 Kaggle 参赛者!!

(也非常感谢许多在这个比赛中花费了大量时间和精力的参赛者。这一切都归功于你们。)

同比赛其他方案