本篇文章为比赛第一名方案解析,该比赛涉及到时间序列预测-零售
介绍:在本次竞赛(第五次迭代)中,参赛者将使用全球收入最大的公司沃尔玛的分层销售数据来预测未来 28 天的每日销售额。
网址:www.kaggle.com/competition…
解决方案
我所使用的方法非常简单,并不那么出色。这完全基于社区洞察。
预处理
- 基于价格的特征
- 基于日历的特征
- 基于目标滞后(递归/非递归)的特征
- 基于目标滞后滚动均值/标准差(递归/非递归)的特征
CV 策略
基于时间的分割:模拟训练/测试分割
- cv1 : d_1830 ~ d_1857
- cv2 : d_1858 ~ d_1885
- cv3:d_1886 ~ d_1913
- public : d_1914 ~ d_1941
- private: d_1942 ~ d_1969
- 无提前停止
建模策略
-
递归 / 非递归
- 根据店铺 ID
- 按 store_id - cat_id 分组
- 按 store_id - dept_id 分组
模型
- LGBM(单)
- 目标 = tweedie
后处理
- 无后处理。(例如)魔法乘数。
简单总结如图
观点
一个名为 WRMSSE 的指标对我来说很陌生,数据结构也很复杂。所以我首先阅读了主办方提供的文档,并从那些出色的笔记本和讨论中获得了许多见解。
- 不同州、店铺、类别、部门的时序数据
- 灾害和天气对销售(目标)的影响
- 缺货问题
- 销售异常
- 简历的重要性
等等……
我通过这些洞察决定了两件事。
- 将具有相似时间序列的数据分组,并对其进行建模。
(例如)按店铺、按店铺类别、按店铺部门等。 - 选择最终模型,使用均方误差(cvs)和公共评分(public score)的平均值和标准差
(特别是,关注标准差)
最初,我使用非递归方法创建了基线,并观察到交叉验证和公共得分(large std)中存在很多变化。
然后,我使用基于@kyakovlev核的递归方法创建了第二个基线,但仍然存在很多变化。
这里有趣的部分是,
- 总体而言,递归方法比非递归方法得分更高。
- 非递归方法在 cv3 上得分最高。
- 递归方法在公共测试中得分最高。
基于这些见解,我预计将非递归和递归模型进行集成可能会带来鲁棒性。
然后,我选择了最终模型。