天池第一战--乘用车销量预测16/2500 心得分享
最近打完比赛以后,沉迷于抖音不能自拔。作为业余程序员里面的一股清流,不能再这么颓废了!!!所以,趁着有空,赶快把比赛回忆一下吧。
Timeline:
初赛:2018.1.15-2.26
复赛:2018.2.27-3.15
复赛最后换榜那三天,竟然浑浑噩噩的反而淡定得很。。。
初赛:各种模型各种试,从基本的线性回归、svm、mlp、树模型、LGB、XGB都试过了。后来发现,不管打什么比赛,首先看评分函数是什么。从那里你可以获得不少小trick。因为特征工程没什么特色,所以没啥好说的。没有尝试lstm是个小遗憾,接下来几天可以试试。。不过先得把机器学习理论看好了,比如我们这个比赛,损失函数是log相关,我们可以将label先log再做。。。
初赛6/2500
复赛:前期一直没有进展,知道后来遇到了dong_dong_shen学长,教了我一个叫做时间划窗的东西,就是利用纯粹的时间销量特征去做。网上基本没有人对划窗做一个好好的解释,可能都是大家偷着藏着的基础杀招吧。我认为划窗有两个作用:充分发挥时序和销量的关系,不考虑其他因素的影响,相当于挖掘销量和时间的关系的一个函数。另一个作用就是增大训练集,排除噪声(因为只用到了销量统计,题目中其所有特征全部删除)。划窗本身可以达到一个不错的效果,但是它不够好。就本身而言,划窗的滑动窗口你可以自己定义,12个月,6个月,1个月,10天,7天,根据不同情况需要你自己制定。因为我们是预测一个月的总销量,所以我的划窗就是12个月和半年(我怕单独12个月划窗不够好,所以我又写了个6个月的,事实证明两个划窗在最后结果的平均数上基本一致,至于细节预测的差异我没仔细看)。单独从划窗的角度去提升,除了用多个划窗,最后加权融合,还有一个就是需要你将单条继续细分。比如我这个比赛,我刚开始是按车型分,统计销量的时候直接把同车型不同配置的车的销量都合并了。而实际上,细分配置用划窗,效果更好。能替代成绩从0.95提升到了0.92。我们还尝试把在纯划窗里面加其他构造的特征,效果基本没有提升,还可能下降。。。
对了对了,添加特征的时候,有一种特征不能要哦。他们叫穿越特征,就是你吧未来时间才有的特征的信息加到你构造的新的特征里面了。比如,你想用2017年数据做验证集,用2012-2016年数据做训练集。而你,好巧不巧的在特征里面加了一列包含2017年潜在信息(比如你取了2012-2017年的平均数),这样子可能的后果就是你的线下分数很好,但是线上超级差。。。
好了,我们最后融合的模型是:粗粒度划窗(没分配置)+细粒度划窗(分了配置)+统计模型+arima 这四个模型。
总结下来:时序问题用时序特征会有一个比较靠谱的结果,然而想要更好,需要结合基础特征,用机器学习模型去做。本次比赛第一的团队,我们学院的,感觉好像是小白一枚,然而就是用了基础特征+时间特征的思想。
他们把题目给的特征处理好的基础上,又加了四列特征,就是我说的时间销量特征。然后训练,所以说,以后做时序比赛:基础特征+时间特征,会有一个不错的结果。