389. M5 Forecasting - Uncertainty | m5-forecasting-uncertainty
我原本的目标是金牌,没能拿到让我非常失望。看到像这样的帖子,人们用基础的解决方案就能获得高排名,我很嫉妒。由于私有数据集的不同,那些具有更宽分位数的模型可能占了便宜。
同时,当阅读像第一名方案这样的文章时,我只能承认他们更强,并避免成为一个输不起的人 :)
无论如何,既然很少有人发布他们的代码库、基准测试,而且我的方法与大多数人不同,我认为值得与大家分享。我原本打算发布一份更详细的图文报告(也许发表我的第一篇论文?),既然没拿到金牌,我有点泄气 :)
我还花了1.5个月的时间优化Pinball损失的方向搞反了(用了 < 而不是 >=)。这真不太聪明。
写完这篇文章后,我刚刚提交了一个经过0.97调整的分数(没试过其他调整)。这本来能让我拿第一名。我更受挫了 ^^
通过绘制随时间变化的活跃商品数量,我们可以看到全球增长并不是由于沃尔玛门店的增长,而可能是由于数据集构建方式的偏差。
因此,当预测聚合序列时,实际上它不是该序列的历史总销售额,而是当时活跃的选定产品的销售额。
有趣的是,总销售额在上升,但每个产品的平均销售额在下降。这大概可以用生存偏差来解释。销售多年的商品之所以是“幸存者”,是因为它们是畅销品。早年(2012/13年)表现较差的商品被淘汰,并在我们的数据集中被新产品取代。
一个日期可以从不同的时间跨度(1到28天)进行预测。每个时间序列都是小数据,因此我期望通过数据增强获得显著更好的结果。
注意:我仅对与商品无关的粒度执行了此操作。
我假设商品粒度可以被视为一种逐点方法。出于性能原因,我允许自己将这些粒度的数据下采样一半。我们倾向于随机采样而不是删除部分数据(两个日期之间),因为我们假设未解释的方差主要归因于季节性因素而不是商品行为。
我经常在特征工程(FE)上花很多精力,在这次比赛中我想先专注于基准测试部分和软件工程,然后才是FE。我还是做了很多FE。如果你感兴趣,可以找到我描述关于水平扩展理念的中型文章。
注意:当使用“分层”形容词时,意味着特征被“传播”到更低的粒度。例如:total_id 的 event_trend 可以添加到 category_id 粒度。
我试图用预测日期的温度/过去平均温度来消除过去销售数据的偏差。似乎帮助不大。我没有使用预测日期的温度,因此符合规则。
序列在不同时间窗口 [3, 7, 14, 28, 56, 112] 上的历史平均销售额。
不同时间窗口 [28, 56, 112] 上的历史分位数 [要预测的9个分位数,某种程度上的目标编码]。
序列在窗口 [1, 2, 3, 4] 上同一周几的历史平均销售额。
多个窗口的历史平均价格。
date_to_predict / date_from 的 day_of_year 平均趋势的包外(每年被视为一折)目标编码。
看到圣诞节前后爱好类别的趋势很有趣。
预测日期 t 取决于:
这是一个对于树模型来说极难处理的