389. M5 Forecasting - Uncertainty | m5-forecasting-uncertainty
恭喜所有的获奖者!以下是我们解决方案的总结。希望它能以某种方式对您有所帮助。
我们的解决方案结合了三种类型的模型:
之所以采用三种类型的模型,是因为时间序列具有层次结构的特性——某些模型更善于对层次结构中特定层级的不确定性进行建模。
如前所述,我们要处理的是层次化时间序列。在M5参赛指南的第3页,给出了聚合层级的细分。根据数据的行为,我们将层级自然地分为两种类型:
对于第一种层级类型,我们使用自回归RNN,具体来说是DeepAR,直接对销售分布进行建模。简而言之,DeepAR试图在给定时间序列过去的情况下,对其未来的条件分布进行建模。在训练期间,模型学习参数化所选概率分布的似然函数(鉴于数据的类计数性质,我们选择了负二项分布)。然后,在推理过程中,我们可以从模型参数化的选定概率分布中抽取样本,并从抽取的样本中计算分位数。
我们的DeepAR模型主要参考了这个很棒的Kernel开发。
对于第二种层级类型,我们最初尝试使用带有高斯分布的DeepAR直接对分布进行建模。虽然结果还不错,但我们发现结果对所使用的随机种子非常敏感,并且性能在不同折之间偶尔会有很大差异。事实证明,我们无法让DeepAR模型始终如一地捕捉到分布的中心(中位数)。
我们转而采用自下而上的方法,即预测单个产品的销售,并将各自的预测值相加,得到聚合销售的预测中位数。我们发现M5准确性竞赛中的LightGBM模型在这方面效果很好。特别是,我们改编了这个Kernel中的LightGBM模型。所做的关键更改包括:
显然,自下而上的方法只给了我们想要的一部分(中位数)。为了获得其余所需的分位数,我们回到了DeepAR(带有高斯分布)方法,我们使用分位数预测与中位数预测的比率作为乘数。例如,对于给定的系列和预测日,如果DeepAR模型中(比如)第25百分位数与中位数的比率是0.95,那么为了获得相应LightGBM预测的第25百分位数,我们只需将该预测值乘以0.95。我们对时间范围内每个时间步的所有聚合系列单独执行此操作。
我们觉得这种方法是有道理的,因为DeepAR模型捕捉了销售中的“固有不确定性”,这应该“延续”到LightGBM模型的预测中。诚然,这种理由有些牵强,缺乏严格的统计依据。然而,从经验上看,这种方法在所有折中都带来了稳定的改进,并且肯定比手动调整“分位数乘数”更可取。
我们的方法总结如下:

我们很早就意识到,鉴于竞赛指标的波动性以及容易过拟合的特点,依赖单个28天的验证期是不明智的。直觉上,我们也觉得折的时效性很重要。考虑到这些发现/想法,我们最终使用了最近的三个28天周期作为模型开发的验证“折”。
我们报告了一些实验在验证折上的加权标度弹球损失(WSPL):