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. A - Bi-shoe and Phi-shoe 素数打表

    A - Bi-shoe and Phi-shoe Bamboo Pole-vault is a massively popular sport in Xzhiland. And Master Phi- ...

  2. Codeforces Round #585 (Div. 2)E(状态压缩DP,思维)

    #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h>using namespace std;long long n,x;long lon ...

  3. C++11类内static成员变量声明与定义

    众所周知,将一个类内的某个成员变量声明为static型,可以使得该类实例化得到的对象实现对象间数据共享. 在C++中,通常将一个类的声明写在头文件中,将这个类的具体定义(实现)写在cpp源文件中. 因 ...

  4. C++ list结构体变量排序

    以下内容是自己整理的根据结构体里面的不同变量,对list排序的实例,若有问题可以留言.仅供参考. #include <iostream> #include <list> #in ...

  5. 还在用SimpleDateFormat?Java8都发布N年了,转LocalDateTime吧

    前言 Java8发布,已有数年之久,但是发现很多人都还是坚持着用SimpleDateFormat和Date进行时间操作.SimpleDateFormat这个类不是线程安全的,在使用的时候稍不注意,就会 ...

  6. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:强制元素隐藏

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. HashMap ( Java 8)

    HashTable是早起java提供的基于hash表的实现,不允许存放null键和值,是同步的,影响开销,不太被推荐. HashMap行为上和HashTable差不多,不是同步的,允许键和值为null ...

  8. Python学习第六课——基本数据类型一之tuple and dict

    元组 (tuple) tu=(11,22,(123,456),[22,55],) # 一般定义元组的时候最后面加一个, # 元组不能被修改或者删除 v = tu[0] # 也可以根据索引取值 prin ...

  9. Kubernetes——YAML文件

    kubernetes——yaml文件的编写yaml文件的结尾后缀名.yaml或者.yml都能够识别.yaml文件就像脚本一样,可以放在任意的位置.编写yaml文件需要用到的帮助手册的查看: kubec ...

  10. [经验] 使用 jQuery+JSON 实现国际化

    技术选型关键词:  [spring boot] [jQuery] [JSON] [JSP] 前言: 关于国际化, 我在一开始的时候就有一个误解, 我认为所谓国际化就是编写一段高技术含量的代码, 然后这 ...