做完 Kaggle 比赛已经快五个月了,今天来总结一下,为秋招做个准备。

题目要求:根据主办方提供的超过 4 天约 2 亿次的点击数据,建立预测模型预测用户是否会在点击移动应用广告后下载应用程序。

  • 数据集特点:
  1. 数据量很大,有 2 亿条之多
  2. 数据是不平衡的,点击下载的数量远远小于没有点击下载的数量

不平衡数据集的处理思路:

一般对样本进行 上采样 和 下采样,顾名思义就是 多的样本少采一点,少的样本多采一点。极端情况下,就是样本太多的时候,就可以做增强学习,就是我给我的少样本增加噪音。但是由于我们这个预测问题,它是一个时间连续序列,没有办法给时间连续序列做一个不同频率的采样,所以我们没有办法进行 上采样 和 下采样,所以,针对这个问题,我们所做的是,在算法原理上,引入一个正则项,来限制它的不平衡率。引入一个系数,这个系数就是它的不平衡率,在这个数据集中约是 99.7%。具体到我们这个模型,它有一个参数叫 isUnbanlanced(是否是不平衡的),设置为 true 后,它可以自动的检测不平衡率。

接下来,针对这个不平衡数据集,要使用一些比较可靠的评价指标。评价指标用一般的准确率是不行的,举个例子,我们现在有一个分类器,对所有的患者判定是否患病,这么一个傻瓜分类器,人群中可能患者是 万分之一 的概率,那么,这个分类器的准确率可以到达 好几个9,比如 99.9%,但是这个数字是没有意义的,它没有起到分类的作用。所以,我们的评价指标不能够使用准确率,一般使用的叫 AUC,AUC 的全名叫做 Area Under Curve ,被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。ROC 曲线的横轴和纵轴分别是真阳率和伪阳率,真阳率和伪阳率的和为1,然后就会画一条曲线,AUC 就是 ROC 曲线下的面积。AUC 越大,准确率越高。AUC 不受这种不平衡的影响,所以经常会用 AUC 去做指标。

以上是针对不平衡数据集的处理。

下面是正式的流程。

  • 第一步是清洗数据。要给数据打上标签。
  • 第二步是特征工程,第一种办法,比如说 time 类型的一维数值,给它拆成 day hour minute second 这样就变成 四维了。还有频率,比如当中有一个设备号,它在所有数据中出现的频率。因为它提供的是设备号,这是一个类别特征,要把这个变成频率,就成了一个连续值特征。对于频率来说,还有一点就是我们引入了一个叫 置信系数,比如频率出现了异常值,在 2亿 条数据中出现了一次跟两次,其实没有区别,但在频率这个维度上就是一倍和两倍的关系,我们不想要这个差异,需要引入一个 置信系数,给分子分母同时加上 Log,这样差距就缩小了。然后给特征之间加上交叉组合,比如说,设备号相同的用户他们的信道号的平均数、方差、绝对值差异,这些数据都很有意义。经过特征工程,我们的特征就从7维扩展到了50维。
  • 建立模型。我们这里用到了 lightGBM。LGB 的原理,两个重点。1. 它是一个树模型,底层是二叉决策树;2. 它是在树模型上做一个 boosting 集成学习。集成学习有很多种,boosting 是其中之一。boosting 原理是产生很多模型,第二个模型拟合的不是真实对象,而是前一个模型与真实模型之间的残差,然后把所有模型加在一起。所以它是一个加法模型,然后不断逼近真实情况。这是 lightGBM 的两个特点。

Q: lightGMB 和GDBT 、XGB 的区别?

A:区别有:

1. 二叉树底层要找最佳收益分类点,但是数据太多了,复杂度很高。XGB 选择了预排序算法,就是说你要找最佳分类点,我就先跟你预排序,后面的复杂度就降下去了。但要维系一个已经排好序的特征,需要空间,而且时间上有所牺牲,但是,LGB不是这么处理的,它就不用传统的那种算法,它用统计学的一种算法,叫直方图算法,这种算法的好处是,不用对所有的数据做运算,而是把数据落在一个个区间上面,然后复杂度就会下降很快。就相当于邻近的数据都给缩成一类了。直方图很多时候都服从正态分布,一般有一个峰值。我们找到那个峰值,就默认它是最佳分类点。虽然在机器学习当中,经常是找到的最佳分类点不是绝对的最佳分类点,但是经过多次计算,也能达到同样的效果,就是牺牲了一定的精度,但速度比你快很多。

2. 因为 boosting 模型是不断逼近,可以做到非常准确,但是它有一个问题,就是容易过拟合。所以,XGB对树的深度做了一个限制,但是LGBM是对叶节点做限制。

3. XGB 不支持类别特征。比如说,你是男,我是女,这是类别。还有一种特征叫连续值特征,比如年龄,1岁,2岁,20岁,这是连续值特征。类别特征的输入,需要引入 独热编码 (OneHot编码),XGB在类别特征上需要做一个 独热编码,但是 LGB 不需要,因为它集成了

4. LGB 对并行的支持做了优化,比较快。

Q: 为什么使用 LGB,有没有试过别的模型,用过 LR 模型吗?

A: LR 和 LightGBM 的应用场景。LR、FM 这种以逻辑斯蒂回归为基础的算法模型,都使用于稀疏矩阵,而以 lightGBM 为代表的树模型,适用于不那么稀疏的,适用于连续值多的。业界往往有这么一种做法,用树模型挑选特征,因为特征比较稀疏,然后把稀疏矩阵送给 LR 做一个分类。因为我们的样本它不是稀疏的,所以直接用 LightGBM 做。


  • 跑模型。的出来的 AUC 是0.98 。

转载于:https://www.cnblogs.com/boxin/p/9785604.html

Kaggle比赛总结相关推荐

  1. 竞赛老陪跑怎么办?来自一位Kaggle比赛失败者的含泪总结

    大数据文摘出品 来源:medium 编译:zeroInfinity.笪洁琼 Kaggle比赛应该是数据竞赛中公认含金量最高的那个.每场比赛,参加的队伍至少上千人,也并非每次都次都能脱引而出,一不小心就 ...

  2. 在参加了39场Kaggle比赛之后,有人总结了一份图像分割炼丹的「奇技淫巧」

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转载自:机器之心 一个经历了 39 场 Kaggle 比赛的团队 ...

  3. 通俗理解kaggle比赛大杀器xgboost + XGBOOST手算内容 转

    通俗理解kaggle比赛大杀器xgboost    转 https://blog.csdn.net/v_JULY_v/article/details/81410574 XGBOOST有手算内容 htt ...

  4. Kaggle比赛冠军经验分享:如何用 RNN 预测维基百科网络流量

    Kaggle比赛冠军经验分享:如何用 RNN 预测维基百科网络流量 from:https://www.leiphone.com/news/201712/zbX22Ye5wD6CiwCJ.html 导语 ...

  5. Kaggle常用函数总结 原创 2017年07月03日 21:47:34 标签: kaggle 493 kaggle比赛也参加了好几次,在这里就把自己在做比赛中用到的函数汇总到这,方便自己以后查阅

    Kaggle常用函数总结 原创 2017年07月03日 21:47:34 标签: kaggle / 493 编辑 删除 kaggle比赛也参加了好几次,在这里就把自己在做比赛中用到的函数汇总到这,方便 ...

  6. kaggle比赛模型融合指南

    kaggle比赛模型融合指南 转载 2017年10月13日 16:29:32

  7. EL之Bagging:kaggle比赛之利用泰坦尼克号数据集建立Bagging模型对每个人进行获救是否预测

    EL之Bagging:kaggle比赛之利用泰坦尼克号数据集建立Bagging模型对每个人进行获救是否预测 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 bagging_clf = ...

  8. ML之RF:kaggle比赛之利用泰坦尼克号数据集建立RF模型对每个人进行获救是否预测

    ML之RF:kaggle比赛之利用泰坦尼克号数据集建立RF模型对每个人进行获救是否预测 目录 输出结果 实现代码 输出结果 后期更新-- 实现代码 #预测模型选择的RF import numpy as ...

  9. ML之FE:结合Kaggle比赛的某一案例细究特征工程(Feature Engineering)思路框架

    ML之FE:结合Kaggle比赛的某一案例细究特征工程(Feature Engineering)思路框架 目录 Feature Engineering思路框架 1.结合Kaggle比赛的某一案例细究F ...

  10. ML之FE:Kaggle比赛之根据城市自行车共享系统数据进行FE+预测在某个时间段自行车被租出去的个数

    Kaggle比赛之根据城市自行车共享系统数据预测在某个时间段自行车被租出去的个数 目录 一.FE整体设计思路 二.FE分步骤处理 相关代码 输出结果 一.FE整体设计思路 二.FE分步骤处理 相关代码 ...

最新文章

  1. Linux高负载下优化MYSQL(一)
  2. 用Tableau制作滚动时间轴(下)
  3. Python数据分析实战项目-共享单车骑行数据分析
  4. 小女子需要各位博友帮忙—— 一个关于JS 动态表格合并拆分问题
  5. html时钟翻牌效果,干货满满!如何优雅简洁地实现时钟翻牌器(支持JS/Vue/React)
  6. 我回答的一个粉丝关于用编程语言模拟SAP事务的问题
  7. leetcode47. 全排列 II(回溯)
  8. requests模块相关用法
  9. dj鲜生-26-登陆时-记住用户名的操作
  10. 主体功能区规划的定位
  11. linux php添加mysql扩展模块_linux下为php添加扩展库的方法
  12. “数据类型不一致: 应为 NUMBER, 但却获得 BINARY”解决方法
  13. 浏览器input自动填充
  14. 何华达回忆录:何华达经历的辛酸过去!
  15. 基于改进人工蜂群算法的K均值聚类算法(Matlab代码实现)
  16. 银行存款对账java代码_银行存款对账方法
  17. 51单片机定时/计数器的工作原理
  18. npm ERR! code EINTEGRITY 错误原因记录
  19. 蔡维德:区块链应用落地不是狼来了,而是老虎来了
  20. PixHawk飞控和Mission Planner地面站安装调试

热门文章

  1. 软件汉化:关于ZoomIt汉化的两个关键的问题
  2. 电容有17种?看看详细介绍!
  3. 流水号生成--数字+字母
  4. 如何制作含字母的流水条码
  5. Python Mongodb 查询以及批量写、批量查
  6. Python基于RCNN&CTC的文本识别系统(源码&部署教程)
  7. 信号发生器基础知识学习
  8. JAVA操作图片/合成/电子盖章等
  9. ERP与SCM相结合会更好-云创集团
  10. 远程桌面访问局域网内计算机的流程,局域网远程连接开启方法步骤