第一届腾讯社交广告 高校算法大赛--基基复基基队伍分享(进入决赛)

我们是参加腾讯社交广告算法大赛的队伍,这次想在这分享下我们队伍的经验。首先介绍下我们队伍,我们队伍3个成员是来自西安电子科大和长安大学的高校生,在互联网上了解到这个竞赛,挺感兴趣,所以就参加了这个竞赛!

这次竞赛的要求是让选手预测出 App 广告点击后被激活的概率,也就是一种转化率的变形问题。对于这种问题,在提取特征的时候一般有3种有效的特征,一是原有的id特征,二是根据一些id特征做出来的历史转化率特征,三是相似度特征。对于我们这次竞赛,应该具体情况具体分析。

这次竞赛没有把所有的数据全部放在两个文件,也就是训练集和测试集中,而是给了8个数据文件,其中包括训练集、预测集、还有6个其他数据文件。在训练集和测试集中,共有的特征是:clickTime(用户点击时间,我想应该是点击广告中素材的时间,题目没明说);creativeID(广告素材的id),userID(用户id),positionID(广告位id,广告曝光的具体位置),connectionType(移动设备当前联网方式),telecomsOperator(运营商);训练集还多个 lable 列(我们要预测的列,二分类)和conversionTime(转化回流时间);训练集给了第17天到第30天的数据,也就是说点击时间是从第17天开始的,测试集是要预测第31天的情况。

其余的6个数据文件依次是:

1、user.csv (用户基础特征文件):有 用户 id、年龄、性别、教育程度、婚恋状态、是否有小孩、家乡、常住地;

2、app_categories.csv ( App 特征文件):有 Appid、app分类;

3、ad.csv (广告特征文件):有 广告主 id、推广计划 id、广告 id、素材 id、App的 id、App 所在平台;

4、position.csv (广告位特征文件):有 广告位 id、站点 id、广告位类型;

上面4个文件,我都可以根据 和训练集 预测集中相同的列,将他们的数据 merge 到训练集 预测集中,这样就完成了第一部分特征的提取,对于其他几部分特征,我之后就不再举这么详细的例子了!

5、user_installedapps.csv(用户 App 安装列表文件):截止到训练数据时间段中第一天用户全部的 App 安装列表,但是这个文件中只有 144万用户,和训练集中的 259万用户 相差些,和测试集用户的交集是 15万(测试集中一共有29万用户);

6、user_app_actions.csv (用户 App 安装流水文件):有3列,用户 id、安装时间、appid,但是这个文件只有 78万用户,和训练集中的259万用户 相差些,和测试集用户的交集是 8万(测试集中一共有29万用户)。

一、上面是数据分析过程,接下来说下我们的特征提取。

我们的特征主要有4个部分组成

1:第一个部分是基础Id特征,上面提到的几乎都有。刚开始我们使用了这些特征,后来将每一个基础id特征都用相应的“转换率”进行了替代(对转化率的定义是:在过去7天中,这款appID  label 为1的数目/(Label为0 + label为1的总数目))。

2:第二部分是组合特征,我们进行暴力搜索,首先进行两两组合,然后用230多个组合特征进行预测模型,得出最中要的50个,在组合特征中最重要的一些是:position和其他的组合。 然后提取出来他们的转化率

3:第三个部分是提取的一些统计特征+trick

(用户每天点击app多少次、这款appID在全局上的label为0的数据/label为1的数目)

(trick也是这个比赛所有队伍都比较在意的一些强特征,实际上这些trick是根据真实数据的特征分析出来的,初赛和复赛的trick都不一样,初赛的时候,是 对相同样本~clickTime+userID一样就定义为相同样本  进行排序,总数这两个特征;           复赛的时候是:同一个userID数据进行排序、统计总数、和第一条样本的时间差、和最后一条样本的时间差、每相邻两个样本之间的时间差,在初赛、复赛的时候这些trick都能提高 两个千分点)。

二、一些提分点:

1:转化率很重要,但是转化率在提取的时候我们是基于过去7天数据来提取的,所以对一些具有时间性质的组合特征,有时候就会出现在上一个7天中某个属性的转化率是0,但是在下一个7天中那个属性可能就不是0,这样不符合实际情况,会降低模型的预测效果,所以需要 拉普拉斯休整,这样可以提高0.5个千分点:

2:tfidf特征:对比赛过程中两个很大的数据文件user_installedapps.csv user_app_actions.csv,做统计特征的话,费时间而且效果不好。所以计算每一个appID的tfidf值,计算出来最合适的几个appID来当做特征(我们队伍没做)

3:模型部分提分点,在下面部分提及

三、模型部分

上面是所有的数据处理部分,接下来讲下我们的模型部分,在这次竞赛中很多选手都选用了 xgboost 和 ffm 这两种模型,初赛的数据量不是很大,用这两种模型还说的过去,但是在复赛的时候,数据量几乎达到了原先的10倍大小,只有在 xgb 上设置 gpu 加速模块,同时增加机器的核数以及gpu,在参数设置中将这些设置好,才能达到一个不错的速度。

我们在初赛使用了 xgb + lightgbm这两种模型,下面介绍下其中的xgb模型

首先因为它是一种树模型,属于 booster 的迭代算法,支持损失函数,支持L1L2正则可以防止过拟合,里面还有 scale_pos_weight 这个参数可以调节正负样本的加权训练。基分类器是 CART 树,每一棵树上的叶子节点都会有对应的判断,算法中采取投票器原则,得到最终的预测结果。而且在树分裂的时候,每一次分裂基于前一次分裂和目标函数 来计算信息增益,根据信息增益来选择最合适的特征,以及分割点。这是一种很完备的算法。

我们在复赛的时候树模型只使用了 Lightgbm这种树模型,因为这个很快,而且效果和xgb也相当,对复赛这种大数据的情况很适合!

提分点:我们选取了 xgb lightgbm 随机森林 gbdt这4中模型当做基模型,Lr作为第二层,使用stacking提了一些分

参加这次竞赛最要感谢的就是我的师兄队友们,跟着他们学到了很多知识。这次也希望能将这些知识分享给大家!

猜你喜欢

转载自blog.csdn.net/a1066196847/article/details/73928071
今日推荐