更多腾讯海量技术文章,请关注云加社区:https://cloud.tencent.com/developer
作者:周鸿宇
1 问题描述
计算广告是互联网最重要的商业模式之一,广告投放效果通常通过曝光、点击和转化各环节来衡量,大多数广告系统受广告效果数据回流的限制只能通过曝光或点击作为投放效果的衡量标准开展优化。腾讯社交广告发挥特有的用户识别和转化跟踪数据能力,帮助广告主跟踪广告投放后的转化效果,基于广告转化数据训练转化率预估模型(pCVR,Predicted Conversion Rate),在广告排序中引入pCVR因子优化广告投放效果,提升ROI。本题目以移动App广告为研究对象,预测App广告点击后被激活的概率:pCVR=P(conversion=1 | Ad,User,Context),即给定广告、用户和上下文情况下广告被点击后发生激活的概率。
2 数据概览
提供的数据主要有以下几种:
1 训练数据文件(train.csv),其中用户、APP等信息为独立文件
2 用户基础特征文件(user.csv),包含用户的年龄性别等
3 用户App安装列表文件(user_installedapps.csv)
4 用户App安装流水文件(user_app_actions.csv),提供了训练数据开始时间之前16天开始连续30天的操作流水,即第1天0点到第31天0点
5 App特征文件(app_categories.csv),提供了每种APP的特征。
6 广告特征文件(ad.csv)
7 广告位特征文件(position.csv)
3.1 初赛数据描述
测试数据从训练数据时段随后1天(即第31天)的广告日志中按照与训练数据同样的采样方式抽取得到。需要根据训练数据所给出的信息,对数据集中Label -1的待预测信息进行预测。
3.2数据预处理
数据的预处理主要通过pandas实现,主要包括了平滑,采样,将数据分级操作。预处理的目的主要是解决以下问题:
1 不同量纲
2 信息冗余
3 定性信息量化
4 缺失值处理
5 提高信息利用率
第一个版本数据处理代码如下:
3.3 问题分析
有这么一句话在业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。
由于数据集里面特征较多,对时序的要求不是很高。于是重点放在了特征的分析与选择上。开始特征选择使用了sklearn里面的feature_selection模块。
但是这个模块跑起来比较占内存电脑实在不给力,特征多起来之后程序运行非常耗时。之后改用pandas直接进行一些统计分析。
同理对每个数据集都进行如上处理。特征的选择主要关注几点:特征是否发散:如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用。特征与目标的相关性:这点比较显见,与目标相关性高的特征,应当优选选择。除方差法外,本文介绍的其他方法均从相关性考虑。选择方法主要使用Filter方法。
3.4数据探索
训练模型使用了xgboost,由于github上开发团队把windows文件夹给删了,装这个算法库还破费了一些时间。装上以后简单跑了一下效果还不错:
Xgboost的调参网上也有一些博客讲,通用的方法是使用cv函数,确定几个重要参数的范围。根据cv函数的返回分数调整。另外feature_important分析也很重要,正好在这个函数里面一起看了。
![](//blog-10039692.file.myqcloud.com/1496979354955_4341_1496979370748.jpg)
在这些之后模型的精度也就到极限了,再想提高就需要从特征中重新挖掘可用的信息了。我想到的是交叉统计。直接把id特征相乘,之后再对id乘积的表格中的个数进行统计,这样就增加了一倍多的特征,成绩也有所上升。之后根据编码的原理,把特征进行分级编码,得到一些有效的维度,也还比较有效
4 总结
实际上我们可以使用sklearn完成几乎所有特征处理的工作,而且不管是数据预处理,还是特征选择,抑或降维。如果电脑给力的话,可以用它很方便的完成。在这期间有很多不会的,还需要再磨炼一下水平,有时候哪块不会就拿IRIS(鸢尾花)数据集开刀。学会了再拿到比赛里用。最后发现其实不一定要使用各种特征,因为各个特征也有有随机因素在里面的,如果把特征用的很多,最后模型都不知道拟合到哪去了,关键还是结合赛题背景。
领取专属 10元无门槛券
私享最新 技术干货