最近参加了kaggle的walmart weekly sales 预测比赛,已经过期但还能提交获得评分。
提供的数据特征不复杂,就是商店信息、节假日信息、当地每周的气温、油价、CPI啥的。目标是预测每个商店下每个部门的周销售额。
关于提高预测精度要一步步来,每个部门的销售数据都是有周期性的。最简单的方式就是用去年的同期数据进行预测。效果实际很不错,直接就排进top 20%。
第二个想到的方法,把周日期(week)离散化为年份(year)、当年第几周(week_of_year)2个特征,然后加上当地的温度、油价,建一个回归树模型。用GBDT跑出来得分有所提高,但还不显著。
后来看了第一名的方案。基本思路是应用R的forecast包,对每个商店每个部门的销售时序数据应用stl分解,获得周期性数据(seasonal)和趋势性数据(trend),对trend应用arima或ets进行预测,然后加上上一年度的seasonal数据,得到最终预测数据。使用该方案直接就能进入top 5%。but,还有提升空间。由于评分公式对holiday周的权重很大,而美国节日的定义方法并不一样,比如圣诞节是固定的1224,而感恩节是第11月的第四个星期四,所以需要对节日进行对齐。对齐后进入top 2%。最后,对每个部门,建立日期(index)、商店(columns)这样一个矩阵,对该矩阵就行pca处理,减少不同商店带来的噪声信息。