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

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

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

值得坚持的习惯

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

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

原文地址:https://www.cnblogs.com/x739400043/p/9255863.html