经过了近两个月的艰苦工作,这次在阿里天池的比赛终于结束了。第一次正经的去参加数据挖掘的比赛,从第一赛季开始到第二赛季结束,完整地经历了整个流程,每天提出新想法,学习新的方法,然后用编程的方法去实现,看着自己的MAPE一天天的下降,那种感觉也是很棒的。觉得付出了很多,也收获了很多,自己也找到了自己的方向,希望自己在未来可以朝着大数据和人工智能方向继续前行。而且这次比赛之后,自己在剩下三年的大学时光中还会继续参加很多这种比赛的,觉得这种比赛要比基础算法比赛更有趣,漫长的周期也更适合我比较散漫的生活方式。在这里回顾一下比赛,总结一下比赛的经验和教训吧。
第一赛季:
初次接触数据挖掘大赛。
第一次参加数据挖掘比赛,虽然前面打过KDD CUP的比赛,而且类型都是差不多的,但是那次也只是分析了一下数据,然后用统计量做了一下填补而已。而这次我们要动真格的了,我们要用机器学习的模型去生成结果——大杀器Xgboost。至于Xgboost的厉害之处,我会在另一篇blog上写一下,据老师私下里给各个模型的排名,Xgboost除了在图像处理上略逊于深度学习,在其他领域上应该都是最厉害的模型了。
第一次提交结果。
第一天的时候,我们并没有去分析什么数据(其实以后也没怎么分析,我认为这也是我们犯下的一个很大的错误),而是直接去填了一个历史中位数,我当时并没有理解为什么要用这么个简单的中位数去填补结果,只是在第二天早上起来睡得懵懵地看了一眼线上结果,MAPE在0.4284,在当天排名中占25名。当时感觉还不错的,也没有在意什么别的东西,到了第二赛季的时候想了想,这么提交个中位数应该是为了获得一个MAPE标准,看看建模比这个统计量能提升多少。当时没有测试线下数据集的MAPE,也没有对提交有一个详细的日志,导致到了第二赛季刚开始时,很多问题找不到原因,想与第一赛季同样方法做出的结果做对比时却没有数据的尴尬。后来又对这个统计量做了一下优化,但是并没有提升多少,可见这种在KDD CUP上做起来效果还不错的方法在这次比赛上并不好。我觉得可能是这次比赛数据量比较大的原因吧,当数据量比较大时模型训练的就越完备,预测的也就越接近真实值,这是我的理解。
Xgboost建模。
由于有了之前用Sklearn中的liner-regression建模的经验,这次初次使用Xgboost建模并没有遇到多少的困难,只是Xgboost的训练集和测试集要求使用libsvm格式的文件,我尝试过把训练集和数据集做成libsvm文件的形式,但是出现了各种各样的格式问题。后来发现可以直接用numpy的二维数组导入。。。真的坑。
第一次建模没有采用任何的特征工程,也没有对数据采取任何的预处理,当时的数据纯净度还不是特别好。我们只用了历史中位数和路长两个特征,用了6月份6-7点的数据作为训练集,6月份8点的数据作为测试集来建模,最后的线上结果可以达到0.3540,相对于单纯的使用统计特征MAPE有了将近7%的提升,看来Xgboost果然名不虚传。但是刚刚开始做的时候,我建模的时候感觉特别别扭,因为感觉平时做建模的时候都不是这样做的,后来想了想,这样实际上是在历史中位数和真实值之间做了一个映射,而不是通过特征在历史数据和未来数据中建立映射,所以才会感到很别扭。
原文地址:https://www.cnblogs.com/abc1168/p/9610001.html