390. M5 Forecasting - Accuracy | m5-forecasting-accuracy
首先,我要感谢整个 Kaggle 社区:在这里,你几乎在每场比赛中都能学到很多新东西,而且社区非常热情。
在这篇文章中,我想分享我的方法,对我来说,这个结果并不令人惊讶。
当比赛刚宣布时,我非常有动力投入大量时间以获得高名次,但我在工作中遇到了一些挑战,因此我的比赛开始时间推迟了。我在截止日期前大约 1 个月才开始着手这项比赛,当时公共 LB(Leaderboard)已经发布了。
基于我的 CV(交叉验证)分数以及许多带有自定义乘数的顶级公共 Notebook,我决定只构建一个优秀的基线模型。
在我看来,这是最重要的部分。
我在 3 个折上进行验证:
在我的第 3 个验证折中,我试图选择大约与最终评估部分相同的时期——即一年中的同一时间段。
在每个单独的时间序列中存在一些异常值和峰值,所以我做了一些平滑处理:使用过去 180 天的 MAD(中位数绝对偏差)来发现异常值,并将其替换为 7 天前的值——如果没有这种平滑处理,包含假期(如圣诞节)的滚动均值特征将无法正常工作。
标准的 LGBM,使用 Tweedie 损失函数(所有日期使用 1 个模型)
params = {
'boosting_type': 'gbdt',
'objective': 'tweedie',
'tweedie_variance_power': 1.1,
'metric': 'rmse',
'subsample': 0.75,
'subsample_freq': 1,
'learning_rate': 0.03,
'num_leaves': 2**11-1,
'min_data_in_leaf': 2**12-1,
'feature_fraction': 0.7,
'max_bin': 100,
'n_estimators': 1400,
'boost_from_average': False,
'verbose': -1,
}
带有 GRU 部分的 Wavenet 模型
最终提交是模型的加权平均值,系数分别为 0.8 和 0.2。
对于我的 LGBM 模型,我没有使用需求量 (Demand)作为目标——相反,我使用了需求量与 28 天前需求量的差值 (Difference)——对于基于树的模型来说,这是处理趋势的一个很好的技巧。
没有使用自定义系数 :)
非常标准,大多数可以在公共 Notebook 中找到。在我的 CV 中,滚动均值和中位数的比率效果很好。
data['ratio_mean_60'] = data['rolling_mean_t60'] / data['rolling_median_t60']
参与这次比赛是一段非常棒的旅程——像往常一样学到了很多技巧,不知何故,这次比赛让我想起了 LANL 比赛,同样有着巨大的排名震荡和自定义乘数。
热烈祝贺获奖者,也非常感谢 @kyakovlev, @girmdshinsei, @sibmike,我在解决方案中引用了他们的 Notebook 和想法。