DataFoundation比赛总结
2018.3.20号左右,因为研究生的数据挖掘课程的老师要求我们集体参加一个比赛 ,所以在比赛参与时间、比赛难度和比赛类型的几种条件下,我们选择了2018平安产险数据建模大赛-驾驶行为预测驾驶风险比赛,这个比赛是由平安保险公司提供数据,借由DataFoundation和CCF联合平台举办的赛事。参加比赛一共两个月,因为是初次参加参赛,加上投入的时间不够,所以结果不是很好。但是这次经验是为了下个学期再参加比赛积累,所以特此总结一个整个比赛过程,反省一下。
比赛数据、比赛过程记录、比赛代码都已经上传到github 地址https://github.com/20130353/pingan_competition.git,方便随时回顾。
比赛中存在问题
- 没有验证线上和线下数据是否一致。
比赛最开始的时候,因为时间不够,临时分析了一下数据。但是这次比赛不一样的是,有线上和线下数据的区别,我们只分析了线下数据,完全没有考虑线上数据。作为数据分析人员,做比赛的时候我们必须要充分了解数据特性和数据分布,同时需要打比赛的时候要确定线上和线下数据是否一致。并针对结果进行不同的处理。当然很多时候线上数据和线下数据分布应该是一样的,因为线下数据是从线上数据中随机抽取的一部分。
- 没有找对正确的训练数据。
正如第一点所说,我们只分析了线下数据没有分析线上数据,但是事实上比赛方只是把线下数据作为测试用例,真正的训练数据和预测数据都在线上,所以我们一开始分析的只是测试用例,这对后面的数据挖掘完全没有用。
- 没有确定数据的范围和缺失。
没有确定数据的范围和缺失也意味着没有预处理,经过后来的预处理结果和没有预处理的结果对比,发现经过预处理的结果效果提议提升0.01。所以最开始还是要预处理。
- 预处理方式选择太多。
小组每个成员对于丢失数据的处理方式对不一样,每个人有每个人的道理,但是事实上训练数据达到百万级别,丢失数据和错误数据的比例很小,不同的预处理方式影响很小,所以没有必要考虑太复杂的预处理方式。同时考虑到这次比赛的平台计算要求,我们应该选择代价的方式处理数据。所以这个问题告诉我们,预处理的方式不一定只考虑最后结果,要在软件和硬件两方面的考虑下,选择最合适的方式。
- 代码写的太慢。
因为对python不熟,所以写代码非常慢,即使是有想法但是实现想法可能需要几天甚至是几个星期。
- 优化代码时想的太多。
因为比赛平台的硬件条件很差,所以对时间和内存要求很大,我们在优化代码方面耗时非常长,但是事实上是没有必要的,一方面我们可以直接从网上找最简单的方式优化代码,另一方方面可以直接问同学,毕竟我们是一个班参加比赛,大家遇到的问题差不多,为什么不直接请教同学从而快速解决问题呢?当时我想问同学时,同组成员觉得这是别的同学的辛苦劳动成果,担心人家是否会给我们,担心很多问题,但是我觉得这只是个比赛,同学直接就是相互学习,没有必要把竞争放到这里来,但是我仍然是在尝试了很久之后才问同学的,中间耽误了不少时间,所以我应该吸取教训。以求在最短时间内解决问题,比赛就是要在最短时间内找到最好的结果。
- 没有充分利用特征。
原始数据只提供了九个特征,所以我们得自己创造特征,我们找了很多资料创造了很多合理的特征,但是结果并不好,所以我们认为是特征的问题。但是有同学不断实践证明特征的结果搭配好的模型可以提醒效果。而我们从头到尾只使用了一种模型,遇到结果不好,我们就认为是特征不好,否定了这些特征,这样实际上浪费了这些特征的价值,同时也是浪费时间。
- 没有充分利用python的工具包。
详细地说就是眼界不够广,不知道很多现成的工具包,只知道sklearn的几个基本工具包,但是sklearn里的模型都是很旧的模型,效果也一般。最近很多的xgboost、lightBGM等模型,就用模型的默认值就可以取得很好的效果。
- 写的代码总是有问题。
感触很深的是代码写完之后经常是线下测试数据没有问题,但是线上就出错。写代码的时候完全没有想过线上是否可行,每次等待在线测试几个小时之后出bug了才知道,但是浪费几个小时的时间。这也反映出自己写代码的不严谨性,所以以后要多考虑看看在提交。
值得借鉴的博客
在作比赛的过程中参考了很多有意义的博客,在这里mark一下,为后面作比赛做准备。
博客中重点要看的是:
整套流程博客 https://blog.csdn.net/guoxinian/article/details/73740746
天池比赛经验总结 - https://segmentfault.com/a/1190000012084849
因为这两篇博客的都包含整个流程,对刚开始做比赛的同学来说,这个具有很大的指导意义。其中天池比赛经验的博客的实战意义更好。
剩下的就是一些常规博客。
- 十分钟搞定 - pandas https://www.cnblogs.com/chaosimple/p/4153083.html
- 正负相关分析博客 https://blog.csdn.net/kt513226724/article/details/79843073
- 基本信息可视化博客 https://blog.csdn.net/qq_24330285/article/details/80707504
- 缺失值处理 - https://blog.csdn.net/lujiandong1/article/details/52654703
- Xgboost 原理和实战 - https://blog.csdn.net/sinat_22594309/article/details/60957594
- Xgboost 原理 - https://blog.csdn.net/sinat_22594309/article/details/60957594
- Xgboost 调参过程 - http://www.cnblogs.com/harvey888/p/7203256.html
- Xgboost 调参过程 - https://blog.csdn.net/han_xiaoyang/article/details/5266539
- Xgboost 调参经验 - http://www.cnblogs.com/mfryf/p/6293814.html
- LGB 原理 - https://blog.csdn.net/niaolianjiulin/article/details/76584785
- LGB 参数速查 - https://blog.csdn.net/weiyongle1996/article/details/78446244
值得坚持的习惯
在比赛过程,我养成了记录文档的习惯,同时又将文档分成python学习记录文档、比赛过程记录两个文档,我觉得这样记录有助于帮助思考和记录过程,有时候因为研究生学业太忙一段时间没有做比赛就会忘记做到哪里了,需要话很长时间来回忆,有文档之后可以直接查文档,而且文档的时候会有源源不断的新想法冒出来,帮助扩展想法。
但是有个问题是,我是将比赛结果记录和想法记录记录写在一起的,有时候要看自己的比赛结果就很不方便,所以下次作比赛需要把想法和结果单独分开来写。
DataFoundation比赛总结的更多相关文章
- Livecoding.tv 现正举行iOS及Android App设计比赛
近日,Livecoding.tv, 一个为世界各地的程序员提供在线实时交流的平台,在其网站上发布了一篇通知, 宣布从4月15日至5月15日,会为iOS和Android的开发者举办一场本地移动app设计 ...
- 为什么我如此热爱这样一个比赛(转自vici)
为什么我如此的热爱这样一个比赛呢?因为它总能带给我一个目标,让我去努力实现它.因为可以看到胜利的希望,于是不断的去追逐.虽然其中的过程可能是比较艰辛的. 对于天才选手,作为天生的冠军,大概凭借天赋 ...
- HDU(1285)—确定比赛名次
/*最近都在复习期末了...好久没做题,都快没智商了*/ 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后 ...
- 白话贝叶斯理论及在足球比赛结果预测中的应用和C#实现
离去年“马尔可夫链进行彩票预测”已经一年了,同时我也计划了一个彩票数据框架的搭建,分析和预测的框架,会在今年逐步发表,拟定了一个目录,大家有什么样的意见和和问题,可以看看,留言我会在后面的文章中逐步改 ...
- [BZOJ3139][HNOI2013] 比赛
Description 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联 赛共N支球队参加,比赛规则如下: (1) 每两支球队之间踢一场比赛. (2) 若平局,两支球队各 ...
- hduoj 1285 确定比赛名次
http://acm.hdu.edu.cn/showproblem.php?pid=1285 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- 排球比赛计分规则(P205页)
排球比赛计分规则: 1.SPEC的目标是什么?SPEC的目标不包括什么? 为了让大家更加了解排球比赛. 2.SPEC用户和典型场景是什么? 用户:运动员,观众,教练 场景:排球赛场 3.SPEC用到哪 ...
- HDU 1285 确定比赛排名 (数组实现 )
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) ...
- 确定比赛名次---HDU1285(拓扑排序)
http://acm.hdu.edu.cn/showproblem.php?pid=1285 题目大意: 给你每场比赛的成绩,让你根据成绩把排名弄出来 分析: 本来我是用普通方法写的,然后就一直wa, ...
随机推荐
- shell脚本中执行shell脚本
1.a.sh #!/bin/sh name="hello" ./b.sh $name 2.b.sh(这里把b.sh与a.sh放在同一目录下,便于演示) #!/bin/sh ech ...
- jquery $.ajax status为200 却调用了error方法
参考: https://blog.csdn.net/shuifa2008/article/details/41121269 https://blog.csdn.net/shuifa2008/artic ...
- tensorflow中的Fetch、Feed(02-3)
import tensorflow as tf #Fetch概念 在session中同时运行多个op input1=tf.constant(3.0) #constant()是常量不用进行init初始化 ...
- vs code 批量替换
源内容 .icon-user, .icon-people, .icon-user-female, .icon-user-follow, .icon-user-following, .icon-user ...
- Python 操作rabbitmq中的confirm模式的错误
今天使用rabbitmq的confirm模式,书上介绍的是pika版本是0.9.6,但是我用的是别的版本,发现这样的错误 Traceback (most recent call last): Fil ...
- mysql5.7 忘记root密码修改方式
参考文档: http://www.jb51.net/article/77858.htm # /etc/init.d/mysql stop --停止mysql服务 # /work/program/mys ...
- Java编程打开运行exe程序
String path = "notepad.exe"; //(C:\Program Files\Tencent\QQ\Bin\qq.exe) try { Runtime runt ...
- Scrapy 中的模拟登陆
目前,大部分网站都具有用户登陆功能,其中某些网站只有在用户登陆后才能获得有价值的信息,在爬取这类网站时,Scrapy 爬虫程序先模拟登陆,再爬取内容 1.登陆实质 其核心是想服务器发送含有登陆表单数据 ...
- 【剑指Offer面试编程题】题目1516:调整数组顺序使奇数位于偶数前面--九度OJ
题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 输入: 每个输 ...
- AngularJS 官方启动文档
参考:https://angular.io/guide/quickstart 中文:http://www.angularjs.net.cn/