盐城上牌预测总结

从去年12月到现在,这应该算是我第一次做的非常认真的比赛。比起之前的工业AI和医疗比赛的名次来说,应该说有所进步,但还是不太理想。最后初赛/复赛的名次分别为27/44。话不多说,直接开始总结。

初赛:

和盐城汽车销售量的比赛一样,上牌量比赛也是一个时间序列的问题。而且和其他问题不同,这是一个长期预测问题(要预测后面200-300天的label),因此一些其他的时序方法不太能套用进来。经过初步的数据分析,整理了数据之后,考虑最近比较火的深度学习,直接上lstm,发现效果并不理想(这也就是我菜的地方),MSE直逼170W。不顾数据跑模型就是耍流氓,于是回到最初的地方,开始分析数据。

通过EDA可以判断出,上牌量主要集中在周一到周五,周六周日放假上牌量会有所下降。但在周六周日中,有个别日期出现了反常的情况。考虑节假日效应,结合日历仔细比对,我推算出了日期的真实值。根据日期真实值,周一到周日填充对应的上牌平均值,我顺利进入了复赛。当时主要精力还是放在盐城汽车销售量比赛上,但最后销量以初赛114名的成绩错失复赛。因此上牌量初赛定格在27名,除了推算真实日期外,并没有耗费太多精力。

复赛:

数据处理:复赛之前,技术圈有朋友分享出了推算真实日期的套路,搞得我心里还是有那么点不爽,毕竟也是自己辛苦推出来的。那么复赛开始,依然是先推演出真实日期首先画出10个品牌的趋势图,仔细分析发现除了brand5和brand8之外,没有明显随年份增加的趋势特征。根据趋势图,选择了date为520之后的所有样本选取特征。每个工作日的内部也有自己的变化特征,总的来说周一周二上排量是略高于后三天的。因此决定采用曜日数做为特征。整个过程没有做异常值处理,虽然分析数据时发现了异常值,这个后面再说。

特征提取:特征主要分为:节假日标注,月份,曜日数,品牌,是否周末。基本把关于时间能用的特征全用上了。想不出还有什么特征。之前很想加时序问题常用的滑窗特征,但考虑到这是一个长期预测的时序问题,如果采用滑窗特征的话,误差很容易累加导致靠后的日期有巨大的偏差,因而放弃。特征这一块感觉下的功夫不是很足,期待大佬们的思路让吾等凡人开开眼界。

采用模型:特征提取后采用xgboost跑,默认参数。有句话说的好,如果你没有进前十的话,调参起的帮助并不大。因此主要精力也不在这个地方。试过其他一些模型,比如线性回归等,也想过融合,但都最终弃用(个人见解题目的关键可能不在这个地方)。后期我的思考重点,当然还是在数据本身上,通过分析,重点关注上了brand8和brand9,有以下两个疑问。

1、注意到了brand9在2016年10月后的一系列异常高值。猜想可能是9号车的10月促销活动所引起的,反观其他年份brand9并没有这系列高值,那么2017年10月应该如何预测brand9呢?促销活动可能延续,也可能不会延续。

2、brand8在历年是有一个上升趋势,到17年后有一个对brand9的反超。但反超的区间在17年9月左右,数据量很小,无法准确判断之后的趋势。

最后我的模型是xgboost*0.5 +历史均值*0.5的一个加权模型。因此最后模型针对brand8和brand9做了一些微调。有一点病急乱投医的感觉。根据排行榜的情况看,我成绩应该比平均稍微好一点。赛后有人透露,用到初赛答案会提升成绩,不过这应该算作弊吧。期待前排大神结果。

个人总结:

1、EDA能力还需加强,对数据需要有深入又透彻的理解,感觉自己理解的还不是很够。

2、python代码功夫还需提高,很多地方只能想到用循环处理,导致程序运行很慢。其实主要还是pandas用的不是很熟练。不能对dataframe的数据随心所欲操作,很多时候都是把数据单拿出来,用循环来做。

3、继续学习别人的骚套路吧!

发表评论

电子邮件地址不会被公开。 必填项已用*标注