在菜鸟—需求预测与分仓规划比赛上,“我们为R代言”团队获得了季军。在分享中,“我们为R代言”团队主要对赛题进行了分析,提出了选择机器学习的理由,介绍了团队线下解决方案实现过程。
赛题分析
赛题主要是根据过去一年的销量来预测未来14天的销售情况。这个赛题相对于其他问题有比较明显的特点:赛题提供的数据量非常多,除了销量之外还有其他很多数据,怎么使用这么多的数据来提高精度?成本是一个非线性的数据,补多补少是不一样的两种情况,怎么根据成本来进行优化?全国仓和区域仓的问题,理论上全国仓应该等于区域仓之和,但是大部分情况并不满足这一点要求,全国仓和区域仓之间的关系怎么利用?
通过分析15组相对来说销量比较大的商品的数据,可以看出双十一的高峰是一个比较明显的特征,但是并不是所有的商品双十一的销量都会暴增。销量的变化更是五花八门,影响销量的因素非常多,除了商品本身的人气还包括类目、促销、仓储等的影响。如果单纯从销量来预测销量的话难度会比较高。
分析方法
对于上述问题,主要的分析方法有三种:时序分析,该方法的前提是需要具有外部特性的稳定性,上述的问题明显不符合稳定性,因为只给了一年的数据,很难看到长周期的变化,并且每个时间段都有每个时间段的特性;增加系统规则;基于滑窗的机器学习方法。由于我们获得的特征比较多并且机器学习的鲁棒性比较强,所以最终选择了机器学习。
特征分析
大赛数据提供了很多特征,销量包括成交金额、笔数、件数,类目等。由于给的特征非常多,不同的时间窗口都会获得一系列的特征,所以用滑窗方法来做的话,特征还会有几倍的增长。分类问题是在空间中找个超平面把空间切分成两半,有一个点的数值偏差很大时会很影响分界线。对于回归问题,过拟合和欠拟合往往发生在局部,导致很难调一组合适的参数让所有数据都拟合恰当。并且回归问题是一维特征,里面点的密度远远高于分类问题。所以,相同数量的训练集,回归问题容纳的特征会非常少,远远少于分类问题。
线下解决方案
为了使用回归分析,需要利用stacking方法进行特征压缩。首先根据一系列的阈值设计了分类器,把分类器的概率输出作为新的特征做回归分析。通过stacking把几百维的特征直接压缩到了10维。
此外,选择滑动窗口法利用28天的数据预测接下来14天的情况。数据清洗则直接把双十一和春节的数据进行了删除。
为了使训练结果更加准确,“我们为R代言”团队加入了一些规则。如果商品过去销量波动比较大(方差)的话,可以认为这条数据是比较难预测的,预测的准确度比较低,线下可以通过PSO例子优化方法修正。对于全国仓和分仓的问题,一般是利用全国仓的数据来修正分仓的数据。
优化改进
改进方面,对特征进行了选择,线上选择的方法是将所有的特征都拿来进行训练,而更优的方法是把最重要的特征单独取出来,把次要的特征也取出来一些进行压缩,把得到的特征和分类测试结果一起构成新的训练集进行回归训练。
对于补多补少成本,一个直观的想法就是修改训练的损失函数,但是损失函数引入外部参数会导致可变因素变多,很难确定一定有效果。所以,选择的方法是:再训练一个新的模型去估计我们训练的偏差,把第一个预测模型的相对误差作为label,再拿一个模型去趋近它。