阿里数据挖掘比赛总结

  好久不写博客了~~~

 

  研究生一年级上学期读了一半了,除了上课就是在宿舍玩游戏。偶尔用caffe给师兄老师提个特征,想这个日子也是无聊呀。之后看到了阿里的数据挖掘比赛公交线路客流预测这个题目,时间战线正好,之前也参加过阿里的挖掘比赛,由于没有坚持到最后而效果一般。这一次一下决心就报名了。如今比赛快完了,写一篇博客记录一下这一个月过程,就算不会获得啥奖励,也算是给自己一个交代吧~

 

  给出的数据是广州市公交线路的历史公交刷卡数据(8月1号到12月31号),天气情况以及线路情况,要求预测未来一周(1月1号到1月7号)的公交车流量数据。下载完数据,写了个py文件统计plot一看。

阿里数据挖掘比赛总结_第1张图片阿里数据挖掘比赛总结_第2张图片

  发现流量数据大致符合星期的变化(工作日多,节假日少),一天之内也会有规律的分布(早晚高峰多)。如果我把时间和星期作为一个特征,这样这个问题就是一个根据特征的回归问题了。想到这里还挺兴奋的,那么说干就干。

 

  Pycharm上建立了一个比赛的工程,将这个工程分成了code,data,ideas几个层次。Ideas记录各种想法,以及实现想法的技术和进度。Data将数据进行统计,画图方便观察更多的规律。Code实现各种想法。然后,按照计划做了数据的预处理,剔除了明显异常的数据,将数据做了切分,按照时间一切为二,其中20140801-20141101的数据作为线下训练模型预测20141101-20141107的人流量。然后剩下的数据预测20150101-20150107的结果。关于模型,工具选择的sklearn , 算法选的svr。一开始将时间编码做成特征放进去一看效果还不错,平均每一个时刻误差在10%左右。后来看了之前比赛获奖选手的参赛ppt,说是rf效果最好,放进去一看还真是,rf对特征的鲁棒性和最终的效果均高于svr。得!那就用它吧,就这样我把我预测的结果放在平台上一看,第一次大约25名,可以努努力说不定能一直保持下去,就这样开启了半个月的挖掘征程。

 

  想法是好的,但是付诸于实践往往会出现意想不到的问题。之前看论坛里的前辈说这种比赛其实就是一个特征工程,所以我已开始的全部精力都用在了特征挖掘,从日期和小时之类的基本特征增加到了天气,温度,温差,风力…..(有一天梦里还想着提特征,我也是醉了),但是把特征们放到模型里面有时可能会出现过拟合的情况。看着自己的名次慢慢下降也是着急,于是我开始重新从数据出发,观察数据之间的规律。看到中秋节的人流量数据明显比平时少很多,于是尝试用节假日和平时的周末单独拉出来建模,提交给平台一看,从一开始的67分上升到了73分。哇,这可是个重大的发现,这个发现使我又挤进了前30名,并且前50名的分数相差不到5分,顿时有一种绝处逢生感觉。

 

  接下来的一周我又尝试了许多想法,成绩起伏不定,名次因为没有提升也开始下滑。但是有三点值得一提。第一,我在想不出想法的时候求助了实验室的L老师,L老师是一个神经网络方面的资深’老司机’,在顶级会议上发过paper。从学术的角度考虑他向我推荐了LSTM(一种递归神经网络)并且热心地给我在实验室的服务器上clone了一份集成高大上LSTM版本的caffe。我花了3天时间看了一下lstm的原理并且在caffe和kears上做了尝试。发现LSTM确实可以从时间的角度学习出一种模式,这一种模式也能很好的反应一天中早晚高峰的人流量特点。但是奈何,预测集中有一个蛋疼的元旦三天,使得LSTM没有办法获得更好的结果。而且我道行较浅,除了跑出demo之外做不出可以设计网络结构这样的惊人之举。伟大的RNN在这一次比赛与我擦肩而过。同样擦肩而过的还有时间序列中经典的ARMA模型,关于这个模型我也找到了调用的package,跑出了一个简单地demo,还特地麻烦了在北美学金融精算的当年高中的老班长J哥给我讲了一通原理,但是还是因为算法原理不熟悉也没有坚持使用。第二,我在一个周末将前半个月写的代码review了一发,抽出了其中的精华将代码整体重构了一次,将工程重新分层,代码压缩了60%,统计画图,数据整理,特征提取比原来整洁了,用新的代码无论是debug还是和一起奋斗的舍友super.L讨论特征都方便了许多。对我来说这是参赛的一个巨大的收获,think as a scientists and practice as engineer !第三我加了一个比赛的微信群,认识了一个志同道合参赛的K君,恰逢K君是广州人,他告诉我一些广州公交卡扣钱的业务逻辑,其中每个月前15次全价,之后都是6折的消息让我默念3次OMG,然后迅速爬起来调整模型……

 

  如今数据切换了,比赛还有两天就结束了,总结一下这一次比赛,我尝试了4中特征回归方法,2中时序预测方法,想了一些有用特征尝试了sklearn模型选择func,看了一些台湾大学林轩田的机器学习技法,学会了用python.pandas。最大感受莫过于实际问题要从实际出发,多观察一些数据。另外要利用算法要学习这个算法的流程和适用范围,我想比赛完了我会花一些时间了解一些LSTM和ARMA拓展自己的知识面。最后善始善终,坚持到最后总会有收获。

 

  最后在此附上这次比赛每天的成绩,没啥可炫耀的,但是也是象征着一段经历的结束。希望还有’起飞’的一线生机。也希望还有时间再来一发这种比赛吧~

阿里数据挖掘比赛总结_第3张图片

你可能感兴趣的:(团队小项目,数据挖掘,机器学习,sklearn)