第六名解决方案 - Pascal Terpstra
第六名解决方案
首先,感谢所有分享有趣讨论的人——我从中学到了很多!
我的最终解决方案是由 3 个不同模型组成的集成模型。第一个模型是我改编自 @kdmitrie 发布的 Notebook。第二个模型使用了乘法线性回归模型,第三个模型是 @cdeotte 发布的 Transformer。
模型 1(公共榜单 = 0.04792, 私有榜单 = 0.04678)
- 乘法模型
- 考虑了闰年(2012 年和 2016 年)。实际上,这只是意味着我修改了 dayofyear 列,对于闰年,将 2 月 29 日之后的所有日期减去 1。
- 使用了不同的国家权重:我意识到肯尼亚的预测对最终分数影响很大,这是由于 MAPE 指标的性质(试着给肯尼亚的所有预测值加 1,看看会发生什么!)。我在所有预测值乘以 1.06 的基础上,对肯尼亚额外使用了 1.02 的乘数。我还尝试了对其他国家使用稍低的乘数,并使用了基于观测值的特定乘数,其中每个乘数基于预测的置信度(基于往年相同预测的变异性)。
模型 2(公共榜单 = 0.04874, 私有榜单 = 0.04800)
- 训练了一个线性回归模型,用于预测一年中每一天的年度销售总量 (num_sold) 的占比。
- 店铺占比是通过简单地取给定日期和国家内每个产品的 num_sold 的平均占比获得的。
- 产品占比(这意味着某一天内一个国家总 num_sold 中的产品占比)是通过线性回归获得的。这里使用了简单的 cos 和 sin 变换来进行强预测。
- 我发现首先留出 2016 年作为验证集来调查误差中的任何模式很有用。
模型 3(公共榜单 = 0.0526, 私有榜单 = 0.06037)
- 第三个模型 simply 是 @cdeotte 发布的 Transformer 的输出。
模型集成(公共榜单 = 0.04706, 私有榜单 = 0.04722)
- 这是三个模型的集成。
- 事后看来,只提交模型 1 的预测会更好(现在说起来容易!)。
我尝试过但无效的方法
- 使用 Boosting 方法(例如 Catboost, XGBoost)和 RNN。
- 在线性回归模型中考虑节假日(例如考虑复活节后的影响)。