SPA大赛:预测广告转化率实战心得

更多腾讯海量技术文章,请关注云加社区:https://cloud.tencent.com/developer

作者:肖洋

大家好,我是来自华中科技大学计算机系的肖洋。第一次参加这种机器学习类的比赛,侥幸进了决赛,也来分享一下比赛心得体会。

一、问题与数据分析

这次比赛是预测广告转化率的问题,就是预测某个用户点击某广告之后发生转化的概率,这显然是一个二分类问题。首先简单对数据做一下统计,发现这里面正类负类比例严重失调,正类也就是发生转化的样本只占了总样本的2.5%。一上来我使用随机深林做了一下简单预测,发现预测的结果当中最大的概率也不超过0.5,所以我感觉很不靠谱,另外在知乎上看到有人说这是一个imbalance learning的问题,所以我就看了各种文章,使用里面的过采样、欠采样等方法,但是效果都不好,很明显我掉到坑里面了。总结一个经验吧,数据和实验结果才是王道,不要老凭自己的感觉去揣测。

二、特征选择

“特征决定上限,模型只能原来无限逼近这个上限”,这次比赛我确实深刻体会到了这个至理名言。特征工程是数据预测里面最重要的环节,没有之一。

首先是特征选择因为没有做过类似的比赛,所以一上来我就急急忙忙开始用随机深林的feature_importance做特征选择,这毫无疑问是费时而且错误的选择。其实有两种很简单的方法可以用来观察特征的重要性:第一种是通过data.groupby('feature').mean()['label']方法,得到这个样本在各个取值下的均值,然后再求一次方差,就知道这个特征的重要性了;另一种是通df=data.groupby(['connectionType','label']).size()来观察一下在给特征取不同值的时候正负样本的比例,如果取不同值的时候比例相差很大,这个特征十有八九是一个强特征。

其次是各种特征的挖掘、组合等,这些隐藏的特征才是决定成绩的关键。特征挖掘方面,主要是各种统计变量,例如用户安装的app个数、与各种特征对应的点击量、转化量、转化率等;特征组合方面,可以通过groupby(['feature1','feature2']).size()来简单统计一下组合特征下的label情况,然后选择最重要的特征组合。听大佬说connectionType和positionID是一个很重要的组合特征,可能我没有用好,导致了我和前面队伍的差距。

三、数据处理

数据处理方面我也没有花太多功夫,主要是对某些与转化率相关的特征做了一下贝叶斯平滑。为什么要做平滑,举个例子,对于特征creativeID,比如取值为100的样本只出现了一次,没有发生转化,由于样本太少,我们并不能直接认为取值为100的样本转化率为0,毕竟样本太少,没有说服力。贝叶斯平滑的文章参考http://blog.csdn.net/mytestmy/article/details/19088519

四、模型选择

我使用过四种模型,随机深林、逻辑回归、xgboost和fm。其中随机深林效果最差,当然也有可能是我把这个模型用废了,逻辑回归其次,fm比xgboost稍微好一点,可能是因为fm考虑了特征的组合。另外提一句,在我的实验过程中调参对于结果的影响是微弱的,所以个人建议不要把太多的时间花在调参上面了。

最后希望自己能在决赛当中取得一个好成绩。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180112A0ALGL00?refer=cp_1026

扫码关注云+社区