一、CTR预估 kaggle实战
1、项目介绍
1)CTR预估中的一些定义
CPM:每曝光1千次,就计费一次
CPC:用户每点击一次,就发生一次计费
CPA:用户发生一次action(下单),进行一次计费
CTR(click through rate): clicks/impression * 100%
搜索引擎中的广告排序 是按照:CTR && 每click的price
CTR预估的情况分为两种:
有query:搜索引擎,如:百度
没有query:Facebook,用户有自己的浏览轨迹
在CTR场景下,最常用到的评估方式是:AUC
2)CTR案例介绍:
(1)Display advertising challenge:predict click through rates on display advertising;
label:click(1) or not(0)
feature:integer feature , category feature:广告位投放位置,用的手机设备类型,
如果训练数据集过大,想要在单机上跑的话,有两种方法:
way1:下采样:要保证click和not的样本比较均衡
way2:如果正负样本比例为:10:1,则将负样本随机采样,分为10份,每一份与正样本组成一个trainset,训练一个LR,共训练10个LR后,预测某一样本时,其概率值可取10个LR的平均值
对于数据量过大的情况,如果想使用LR,可采用的库:LIBLINEAR,其接收的数据形式:LIBSVM(稀疏矩阵);这种方式训练LR非常省内存;
2、算法总结
LR,RandomForest,FM,FFM,GBDT,DNN
需要了解的算法:FM,FFM
FFM在FM的基础上,提出了feature属于哪个field的概念,这在一定程度上缓解了 data 稀疏性 问题。
3、kaggle相关比赛
1)Display advertising challenge
2)Predict whether a mobile ad will be clicked
3)Avito Context Ad clicks
4、经验总结
CTR一般不用SVM,会用LR,GBDT,DNN
5、数据预处理
缺失值处理
离群点处理
6、特征工程
device_type:每个手机类型 下的点击率,如果每个device_type下的CTR有差别,说明该feature对于CTR预估有用。其他的feature也可用如是方法来看其对于model是否有用。(or通过求组内std来判断该feature是否有用)
时间feature:早上,中午,下午,傍晚,午夜
如果某feature的类别特别多,可以对其进行聚类,如:用户id,即可对其做这样的处理;
对于类别型的feature,如果有几个类别出现频次非常低,可以把其单独拎出来看一下,看是否可以通过该类进行直接判断;或者,将出现频次较高的类别单独拎出来以列作为一个feature,将其他几个出现频次较低的类组合作为一个feature;
组合特征:如:中国 新年,美国 感恩节;
组合特征带来的问题:1)使内存压力太大;2)特征稀疏,如:同时为“中国 新年”的sample很少,无法很好的fit model,导致训练得到的w不准;
解决方法:加入原要组合的特征数为n,则组合特征个数为C{2,n},参数个数为nn,为降低参数量,我们可以用FM,类似推荐系统中的LFM,将nn的矩阵,分解出一个中间factors,则求解nn =[ nc ] * [ c*n],参数量就降下来了。
7、需要查看的资料
Spark-Criteo-CTR-Prediction.py : 理解工业界 CTR 流程
kaggle比赛:Click through rate prediction 前3名方案:
owen Zhang:
模型融合:randomforest , vm , fm(矩阵分解) , xgboost 拟合 linear model
涉及3个库:libMF,libFM,SVDFeature,libFFM
FM 和 FFM是CTR中最常用到的方法
8、简历使用案例:Display Advertising Challenge
9、给出了一份工业界数据,在最后一张PPT中有网盘地址,应该是大众点评的数据。
10、方案构思
用LIBNEAR在原始数据上训练一个LR模型,得到各个feature的权重
在训练模型融合的各个模型时,选取 权重较大的 feature进行训练。除此以外,各个模型中的一些feature还有通过其他模型训练得到的。具体看owen zhang的方案文档,参照那个写。
模型融合使用的model:RandomForst,GBDT,FFM,各个模型的权重用linear model训练得到。