Giter VIP home page Giter VIP logo

baiduhankanpredict's Introduction

先说结论

这是我正儿八经参加的第一个数据科学竞赛,心路历程也是十分艰辛,队友经历几次更换,自己也是经常游走在崩溃的边缘,同门都说我头发又见秃,总之不是很顺利的,最后结果不是很理想。用我队友的话就是100来人的比赛,不拿个top3真的没用。 菜是原罪😢 在这里插入图片描述这个比赛总结,拖了太久了,自己真的是拖延癌晚期,写出来对别人实际参考意义不大,只是对我自己的一个总结,想在这个基础上把代码整理一下,争取下次别这么丢人了~

百度点石

先来谈谈百度点石吧,常见的比赛阵地是天池、kaggle、datacastle等等,点石算是比较小众的吧,含金量不高,参赛人数较少,倒是之前因为他和我交合作了一个比赛有点印象。

再也不想参加点石的比赛了,有问题官方不管不顾,题目不规范,对新手最终要的论坛也存在活跃度几乎为0的情况,体验感超差,太不友好了,费心费神。如果你和我一样还是入门新手的话,建议还是平台大一些的天池或者kaggle吧,和一些热爱分享的人一起比赛,进步会很快的~

一次管够,再也不想参加了。

赛题背景

学计算机还是需要点英文阅读能力的~ 如果你读着很累,还是选择有道滑词翻译插件吧~ 在这里插入图片描述

数据探索

获取数据

数据呈现的特点是:真实脱敏数据,数据庞大,缺失值很多,原始特征共21维。 当训练数据下载下来的时候,我是懵逼的:

  1. 原始数据以二进制文件存储,以前没碰到过。
  2. 好不容易将数据切分开以后,发现训练数据24G,测试数据8G。 咨询了大佬以后,我认为解决办法有三个:选择spark or 借一台至少64G内存的服务器 或者选择将数据拆分开一组一组的跑模型~ 最终,厚着脸皮找同学借到了他们实验室的服务器,尽管有64G内存,但是还是时刻在崩掉的边缘啊~

数据

    用户id
    性别
    年龄
    教育程度
    地域编码
    是否留存
    安装渠道
    视频id
    视频分类
    视频tag
    创作者
    上传时间
    视频时长
    是否展现
    是否点击
    推荐类型
    视频播放时长
    行为发生时间戳
    是否评论
    是否点赞
    是否转发
  1. 数据特点 因为是真实数据,所以缺失值非常多,还存在很多异常数据,比如这个用户一会是男生一会是女人。
  2. 滑窗法(pass) 一般这样的问题呢,大多数都是时候滑窗法,对一段时间的数据进行分割,划分成多个自数据集(如果你还没了解过滑窗法,请戳这里),但是虽然此次数据的时间跨度如下
训练集 10.15-10.31
测试集 10.15-10.31
预测11.1周四的留存率

但是每个用户在这段时间内只有一天有数据,所以滑窗法失效。

  1. 各个特征与是否留存的相关性 这段需要绘图来查看,这种常用的小代码,我会更新在文末,总结成一个专门的笔记。 绘图之后,都差不多,没有特别相关和特别无关的特征,这又给我们增加了难度。

数据整理

在最开始的时候我们纠结的点就在于,一个是滑窗法对此题该怎么应用,另一个就是如何填充这里大量的缺失数据。 事实证明,年轻人拿到数据就该多自己观察数据,而不要就想着我该怎么处理。这两个问题都是无用的, 因为是线上数据,所以必然有很多缺失值,而且也是合理存在的,同时lightgbm是对缺失值不敏感的,所以还是经验太少了,在此处耽误了很多时间。 主要的处理数据步骤: 1. 删除整份数据都相同的特征。 2. 规范异常数据。 3. 对数据按照uid和timestamp_of_behavior升序排序。 4. 对必要特征处理缺失值和异常值,比如性别的异常。将所以的缺失值替换成nan。 5. 时间戳转化为日期。 6. 连续特征离散化,离散属性数字化。 7. 转化数据类型,降低内存使用率。 8. 最后将原始数据整理成一个用户一条数据的形式。(我觉得我成绩不好的原因绝对是这里出了问题)

我的问题???反思自己一下吧~

  1. 数据观察不够,不够详细,也可能是没有经验吧,只知道观察数据,但是忽略了“如何做”。
  2. 这块没有一步到位的处理好,写的bug太多,导致到最后的时间内我还在修改这块的代码。
  3. 没有及时将数据保存,节省代码运行时间。我在前面写过,这次比赛的数据量非常大,运行一次简简单单的数据处理,可能就需要个把个小时,所以要随机应变啊~
  4. 变通性太差,一直在纠结,殊不知只有实践才是检验真理的唯一标准,别犹豫,多查多做即可。
  5. 前期积累太差,没有做好常用小函数的笔记,写的时候翻书,翻别人博客浪费了很多时间。《利用Python进行数据分析》一定要多翻多看多用,我就是太久不用,非常生疏。

特征工程

特征工程的话,我还从user、item、user-item这三方面进行展开的,但是为啥最终效果这么差,我觉得旁人没法给我一个解释,还需要我自己在去读别人的代码,来进行自我反思吧。 我阅读了几个大牛开源的思路后整理一个这个,仅供新手使用,大牛勿喷~ 特征工程的特征从何而来

反思

在做特征的时候就注定我是个loser了吧,后期进行代码排查的时候我发现我写的几个地方就把数据大变样了,造成了很多问题,虽然后期纠正了,但是还是逃不过命运。在一个地方就是我没有掌握如何判断新加特征是否能提高AUC,我就一味的加特征加特征,我觉得十分忙目,不知道如何处理。还有的就是在昨晚特征之后也是可以把数据保存成一个新数据的,节省时间,最后一次模型跑了8个多小时,都快哭了。

训练模型

因为是第一次参加这种比赛,我就选用了对新手最友好的lgb训练了一个模型,这个比xgb训练速度会更快一些,效果也差不多。我没有用网格搜索来挑选最合适的参数,我觉得这点影响都是微乎其微的可以忽略。在这一阶段我最大的收获就是学习了lgb这种数据科学比赛大杀器,官方文档一生推,你想要的官方文档都有。

模型融合

到训练模型我的历程也就结束了,都没做到模型融合的一步,真的是遗憾。 奉上我之前找到的非常好的博文: https://blog.csdn.net/WxyangID/article/details/80205075

人生经验

  1. 练习赛和真实比赛绝对不一样!!!比飞行棋更加紧张刺激~
  2. 团队协作很重要,如果你是新手菜鸟,一定要有队友,孤军奋战真的太累~
  3. 找到适合的入坑比赛。尽量选择预测、分类这种常见场景的,数据集大小要适中,像我这次就是数据25G的数据,跑一次模型几个小时,要快速迭代才能给我们更多反馈,进行更多优化。
  4. 熟能生巧。表格型比赛大同小异,打上一两次就能积累非常多的经验,要有自信,也要把一些常见的代码积累下来,都是可复用的。
  5. 版本控制。无论是你自己还是队友之间都需要进行版本控制,才能不用浪费一遍又一遍的时间来记住我哪里做了改动,而且现在github开放私人库了,我觉得是十分友好的。
  6. 海量数据处理时记得降低内存使用,优化存储空间,我就因为对pandas数据处理机制不理解,没有好好优化,跑崩过一次又一次。
  7. 代码的耦合性一定要降低啊,一定要降低,我把数据处理、特征工程、和模型都放在一起,后期好痛苦- -。
  8. 学会多读别人的源码,学习思路,学习代码优化,这样才能快速提升。 良心推荐,一个top solution集合,一个成电的学弟进行总结的。
  9. 心态要好,打比赛嘛,肯定是要适当熬夜的,但是别让自己太暴躁。

第三名的简短经验分享

https://developer.baidu.com/forum/topic/show/298191

结语

写到最后,发现自己并没有写太多的干货,特别重要的特征工程都是一笔带过,因为自己真的菜吧,好多问题还是没理解,真的很惭愧。

baiduhankanpredict's People

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.