返回列表

3rd place solution - NN approach

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

开始: 2020-03-03 结束: 2020-06-30 销量与需求预测 数据算法赛
第3名方案 - 神经网络方法

第3名方案 - 神经网络方法

作者: Jeon, SH
比赛排名: 第3名

大家好,我们想与大家分享我们的解决方案。

首先,我们要感谢主办方和Kaggle举办了这场精彩的比赛。同时,也感谢所有参与者的有益讨论。就我个人而言,这是我第一次参加比赛,我很高兴能取得有意义的成果。

我们的目标是在这次比赛中利用深度学习(神经网络)方法获得高排名。我和我的同事对深度学习方法更为熟悉,我们相信神经网络可以获得与其他机器学习方法(尤其是梯度提升)相比具有竞争力的结果。


摘要

我们训练了带有Tweedie损失函数的改进版DeepAR模型,并利用过去14个周期的WRMSSE选出的多个模型进行集成,做出最终预测。

网络结构

我们的基础网络是DeepAR,由多个LSTM组成。我们修改了基线网络,在训练阶段通过滚动预测来预测28天(原始DeepAR在训练阶段只预测1天)。我们改进后的DeepAR从滚动的28天中生成损失,这使得滚动预测更加稳定。

损失函数

Tweedie Loss(Tweedie损失)

特征工程

我们使用了以下特征。所有特征被拼接后输入网络。

  • 销售数值
    • 滞后1天的值
    • 7天、28天的移动平均值
  • 日历:所有值归一化到 [-0.5, 0.5]
    • 星期几
    • 月份
    • 年份
    • 周数
    • 日期
  • 事件
    • 事件类型:使用嵌入
    • 事件名称:使用嵌入
  • SNAP(食品援助项目):[0, 1]
  • 价格
    • 原始值
    • 跨时间归一化
    • 在同一 dept_id 内归一化
  • 类别
    • state_id, store_id, cat_id, dept_id, item_id:使用嵌入
  • 零销量
    • 截止今日连续零销量的天数

训练方案

我们从每个序列中随机抽取28天的切片,每个批次制作64个切片。每个批次被输入网络,网络预测接下来的28天。训练迭代了300个epoch(一个epoch = 30490/64 次迭代)。我们使用Adam优化器,并使用余弦退火作为学习率调度策略。我们使用包括验证期(~1942)在内的所有时期进行训练。

交叉验证 (CV)

选择交叉验证期很难,因为WRMSSE根据时期的不同波动很大。此外,我们发现1914~1942时期更不可靠,因为该时期的特征与其他时期差异较大。(有许多商品从零销量开始销售)

由于第12层级(level 12)的数值是中间值且具有间歇性,我们得出结论,网络在学习训练值方面也很吃力。我们得出的结论是,我们不需要太在意过拟合。相反,我们专注于从训练好的模型中选择好模型,这些模型在特定时期具有较低的WRMSSE值。

我们评估了过去14个时期((1914, 1886, 1858,... 1550))的WRMSSE,并选择了WRMSSE平均值较低的模型。对于每个模型,我们每10个epoch(从200~300 epoch)评估一次,并选择排名前3的epoch。从训练好的8个模型中,我们用选出的8*3个模型组成集成模型进行最终预测。

  • 更准确地说,我们使用24 + 19个模型进行最终预测(24个模型应用了dropout,19个模型未应用dropout)。这只是一个启发式策略。

我们尝试过但失败的方法

  • 模型
    • 我们使用了其他网络架构,包括CNN、Transformers等。我们没有发现任何模型优于其他模型,所以我们选择了最基础的模型DeepAR。
  • 损失函数
    • 分类损失 (CE loss)
    • WRMSSE作为损失
  • 预测协调
    • 使用了不同的层级,但效果不如使用第12层级(lv12)