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

因为这两篇博客的都包含整个流程,对刚开始做比赛的同学来说,这个具有很大的指导意义。其中天池比赛经验的博客的实战意义更好。

剩下的就是一些常规博客。

值得坚持的习惯

在比赛过程,我养成了记录文档的习惯,同时又将文档分成python学习记录文档、比赛过程记录两个文档,我觉得这样记录有助于帮助思考和记录过程,有时候因为研究生学业太忙一段时间没有做比赛就会忘记做到哪里了,需要话很长时间来回忆,有文档之后可以直接查文档,而且文档的时候会有源源不断的新想法冒出来,帮助扩展想法。

但是有个问题是,我是将比赛结果记录和想法记录记录写在一起的,有时候要看自己的比赛结果就很不方便,所以下次作比赛需要把想法和结果单独分开来写。

DataFoundation比赛总结的更多相关文章

  1. Livecoding.tv 现正举行iOS及Android App设计比赛

    近日,Livecoding.tv, 一个为世界各地的程序员提供在线实时交流的平台,在其网站上发布了一篇通知, 宣布从4月15日至5月15日,会为iOS和Android的开发者举办一场本地移动app设计 ...

  2. 为什么我如此热爱这样一个比赛(转自vici)

    为什么我如此的热爱这样一个比赛呢?因为它总能带给我一个目标,让我去努力实现它.因为可以看到胜利的希望,于是不断的去追逐.虽然其中的过程可能是比较艰辛的.   对于天才选手,作为天生的冠军,大概凭借天赋 ...

  3. HDU(1285)—确定比赛名次

    /*最近都在复习期末了...好久没做题,都快没智商了*/   有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后 ...

  4. 白话贝叶斯理论及在足球比赛结果预测中的应用和C#实现

    离去年“马尔可夫链进行彩票预测”已经一年了,同时我也计划了一个彩票数据框架的搭建,分析和预测的框架,会在今年逐步发表,拟定了一个目录,大家有什么样的意见和和问题,可以看看,留言我会在后面的文章中逐步改 ...

  5. [BZOJ3139][HNOI2013] 比赛

    Description 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联 赛共N支球队参加,比赛规则如下:  (1) 每两支球队之间踢一场比赛. (2) 若平局,两支球队各 ...

  6. hduoj 1285 确定比赛名次

    http://acm.hdu.edu.cn/showproblem.php?pid=1285 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory ...

  7. 排球比赛计分规则(P205页)

    排球比赛计分规则: 1.SPEC的目标是什么?SPEC的目标不包括什么? 为了让大家更加了解排球比赛. 2.SPEC用户和典型场景是什么? 用户:运动员,观众,教练 场景:排球赛场 3.SPEC用到哪 ...

  8. HDU 1285 确定比赛排名 (数组实现 )

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    ...

  9. 确定比赛名次---HDU1285(拓扑排序)

    http://acm.hdu.edu.cn/showproblem.php?pid=1285 题目大意: 给你每场比赛的成绩,让你根据成绩把排名弄出来 分析: 本来我是用普通方法写的,然后就一直wa, ...

随机推荐

  1. 洛谷P1198 [JSOI2008]最大数(线段树)

    题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:LLL不超过当前数列的长度.(L> ...

  2. IELTS Simon wr task p3

  3. AJAX请求返回JSON数据动态生成html

    1:DeliveryPersonVO对象 package com.funcanteen.business.entity.delivery.vo; import java.util.List; impo ...

  4. 「Luogu P3680 凸轮廓线」

    一道神奇的计算几何题 前置芝士 正三角形,正方形,圆:什么,您都会,那真是太好了. 三角函数的运用:因为我不是很想在这一块写太多,具体可以自行百度. 推导公式 对于一串是圆和正方形开头和结尾时是十分好 ...

  5. python读取文件用b模式读取

    f = open('aaa','rb')    返回的是字节 字符串编码 python中所有的字符串编码为Unicode,如果从一个文件读取字符串,那么该字符串的编码就是该文件的编码. f.tell( ...

  6. [转]网络协议-redis协议

    Redis 通信协议(protocol) 本文档翻译自: http://redis.io/topics/protocol . Redis 协议在以下三个目标之间进行折中: 易于实现 可以高效地被计算机 ...

  7. 线程context

    线程切换的时候,要保存当前运行状态,以便后续切换回来 CONTEXT结构体保存的是一堆寄存器 两个函数 //You cannot get a valid context for a running t ...

  8. Prometheus组件

    Prometheus组件 上一小节,通过部署Node Exporter我们成功的获取到了当前主机的资源使用情况.接下来我们将从Prometheus的架构角度详细介绍Prometheus生态中的各个组件 ...

  9. Lesson 44 Patterns of culture

    What influences us from the moment of birth? Custom has not commonly been regarded as a subject of a ...

  10. kali打开networkmanager

    有时候可能在用网卡时,或者是其他情况下关闭了networkmanager,而要管理网络这个又是必须的,需要我们手动打开. 没有网络管理器是这样的: 有管理器是这样的: 不多废话了,用命令/etc/in ...