这是我第一次参加数据挖掘类的比赛,幸运的是在比赛中认识了两个小伙伴,能够一起讨论,分享,得出成果,对我来说,受益良多。下面按照数据挖掘过程:数据预处理、特征工程、模型融合这三个方面进行一下总结,谈谈感受。
在初赛中,数据量在百万级别,因为我们没有做稀疏特征值的处理,但是决赛这种数据量增长了10倍的情况下,稀疏特征值的处理能够影响模型的稳定性,因此我们会对特征值中少于10次出现的值进行统一的稀疏标记。
构建验证集是比较重要的,目的是为了让线下成果与线上测试集结果保持一致,在几个周冠军的分享中,也都提到了构建有效的验证集的事情。在初赛中,我们直接使用了29号的数据进行验证,因为30号的数据不够准确,直接被我们舍弃了。在决赛中,我们会尝试一下方法进行验证集的构造:使用29号的数据,使用训练数据的10%(10%取决于训练集与测试集的比例)。
特征工程一般有三步:找到新的特征,然后进行简单的统计分析,判断其价值,再使用模型判断其是否有用。
在本次比赛中,我们将所有特征分成以下几类:
特征分类 | 描述 |
---|---|
原始特征 | 数据当中原有的特征 |
组合特征 | 将原来特征中的两个或多个直接进行组合 |
计数特征 | 主要针对用户,广告进行时序,非时序的统计 |
先验概率特征 | 类别特征的历史转化率 |
gbdt特征 | 利用gbdt模型对部分特征进行学习,将gbdt结果的叶子特征作为新的特征 |
在产生新的特征的过程中,如何初步判断特征的有效性是非常重要的,我们可以采取一些初步的统计进行比较,然后进行特征验证。
在本次比赛中,最让我感到困惑的地方就在于特征筛选,特征筛选的流程一般如下图所示:
在一开始的时候,我们将生面提到的所有特征一股脑的塞到模型里面,尽管有些特征的重要性很低,然而在我们删除了某些特征以后,模型的效果还是下降了,然而我们之后再删除特征的情况下,进行了模型参数的调整,把xgboost训练的树的深度增加以后,线下验证集的效果就提升了很多。其实,现在的特征中有很多冗余的特征,特征之间相关度比较高,目前正在采用单个特征逐步验证的方法,希望能够有所提升。
此次比赛中,我们使用了xgboost来进行特征的验证,之所以选择这个,是因为本次比赛中的很多特征都是类别特征,用传统的lr模型进行分类的话,会遇到onehot维度爆炸的情况,而是用xgboost则比较便捷,并且能够很好的查看特征的重要性。
在初赛中,我们并没有采用模型融合的方法,但是“三个臭皮匠,赛过诸葛亮”,据此次比赛中的小伙伴们实践分享,模型融合能够大幅度提升效果。
在类似的比赛中(广告点击率预估),比较常用的模型包括ffm,ftlr,xgboost,这些模型在各个优胜大佬们的分享中都起到了很大作用,值得尝试一下。模型融合方法有简单的平均,均值平均,或者是stacking等,初步的计划是使用不同的模型进行训练,然后讲给结果进行stacking。
参加这次比赛,能让我将理论与实践相结合,是一次很不错的经历。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。