大家好,我们是吃茶少年团队,这是我们团队第一次参加比赛。由于没什么经验,走了很多很多的弯路,我们在比赛中跟随大佬亦步亦趋地摸索前进。目前成绩在24名,写下这篇比赛心得,希望能共同交流、进步。
关于训练集、测试集的选取上:由于比赛数据是时序的数据,所以我们首先想到的思路是尝试用17-29日的数据预测30日,使用这样的训练集、测试集设置线下的对数损失很小,但是线上和线下的增减时而同步时而不同步。然后,经过我们多番尝试最终选择了随机70%生成为训练集、30%为测试集,调整随机数种子使得线上和线下尽可能同步。
关于本次比赛的数据,我们可以把比赛给定的14天中每3个小时的转换率画出来,如下图所示。我们可以明显看到最后几天转换率偏低,这是由于用户转换时间存在延迟造成的,对最后几天数据有影响,也就是说最后几天的数据存在噪音,转换率偏低。如果想要把最后加入训练集,那么需要最后对预测结果进行一个修正过程,可以通过Logistic反函数对预测概率进行修正。同样,在这个图中可以看到19号的上午和20号的中午存在两个转换率特别异常高的时段,我们可以分析为什么这两个时间段转换率特别高,这对我们数据清洗有一定帮助。
关于特征工程方面,我们首先尝试了一些基本的组合特征,把各id类特征组合起来使用点击数、转换数、转换率来表达。通过这些基础的组合统计特征,使得分数上涨了2个千分点。我们把过程中尝试的特征过程展示如下表所示:可以看到每次成绩的大进步都是依赖于新的强特征的增加。
特征组合 | 线上成绩 |
---|---|
ID类特征进行one-hot编码,使用LR进行分类 | 0.1072 |
把所有原始特征进行merge,使用xgboost进行分类 | 0.1036 |
原始特征+组合统计特征 | 0.1010 |
原始特征+组合统计特征+时间序列特征 | 0.0989 |
bagging+原始特征+组合统计特征+时间序列特征 | 0.0987 |
之后的找新特征过程,我们主要按照三个方面来找:
1 . 从业务的角度,即我们去猜测用户点击广告后是否发生转换可能与哪些因素有关。这部分通过猜测结合分析数据来实现,生成特征后使用groupby来确定这个新特征是否会对label的分布造成影响。比如在下面这张图中,我们通过groupby命令,connectionType这个变量不同的取值对label的分布有较大影响,可见connectionType这个变量对是否转换影响还是很大的。
2 . 从模型提供的信息,我们使用了xgboost这一模型来训练,通过xgboost给出的特征重要性,主要观察特征重要性在前面的特征,考虑这些特征是否可以有更好的表达。在下图xgboost给出的特征重要性中,我们可以看到ID类的特征都占据着十分重要的特征,对于这些重要性很高的特征,我们尝试把这些特征进行两两组合,而对特征重要性很低的特征比如app平台等我们可以考虑把他们去除。把这些无用的特征去除,可以加快训练模型的速度,也可以避免对模型产生干扰。
3 . 多与人交流。我们产生的很多新特征都来自于群里小伙伴的讨论中,从大家的讨论中得到一些灵感,积极借鉴大佬们的思路,借此生成新的特征。比赛中经常会出现较为隐蔽、但对分类效果提升很大的特征,这些magic特征往往来自于各个小伙伴的灵光一现,多关注群里的进展,往往可以获取这些magic特征,从而使成绩飞跃。
第一次参加比赛,收获很多,最后感谢腾讯提供的比赛、感谢队友、感谢群里的大佬。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。