ctr项目简介
Click through rate 广告点击率,是指浏览网页的用户点击某个特定的链接(创意)的比例(ratio)。本ctr项目主要针对手机用户预测ctr,主要使用的方法为xgboost,模型好坏的离线衡量指标为AUC,并与LR(Logistic Regression Model)模型做比较。在离线测试中,xgboost的AUC高于LR。(0.66>0.62)
项目实现流程
项目简要流程图如上,主要流程为:
1. preprocessing : 读取数据,剔除缺失数据,将数据转化为训练所需的key:value形式。
2. cross validation: 为选取合适的参数进行交叉验证。(由于cv测试需要耗费大量时间,实际测试中将数据集随机分成两份,分别占比:0.8/0.2,前者用户train后者用于evaluation。【cv与直接拆分数据集的AUC值相差不大】)
3. train
4. predict
以下详细介绍各部分细节
数据预处理 preprocessing
实际数据的格式如下:
idfa和imei各取三条
idfa数据各列含义:
IDFA,常驻城市(多个城市以,分割不超过3个),家庭小区,机型特点标签(以|分割),操作系统,分辨率(长*宽*dpi),
标签大类01(具体说明见标签文档,多个标签以|分割,前面为标签CODE,;后面是权重值), 标签大类02(同01),标签大类03(同01),标签大类04(同01),标签大类06(同01),标签大类07(同01)
idfa数据内容:
00002533-951c-43e9-8bcf-a9aa27fb88cd 成都市 苹果|手机|4.5-3.1英寸|陀螺仪|1000-1999|iPhone 4 7.1.2 640*960
00005a36-29da-48bb-846a-60ba0668ebbf 福州市 苹果|手机|摄影手机|5.5-5.1英寸|陀螺仪,指纹识别|4000及以上|iPhone 6 plus 8.3 640*1136 02011302;1.18|020113;1.18
00005c2f-9afe-4cf7-92d5-93920e42da6f 南京市,汉中市 仁恒国际公寓 苹果|手机|摄影手机|5.5-5.1英寸|陀螺仪,指纹识别|4000及以上|iPhone 6 plus 9.2 1242*2208 030301;10.0 060103;0.01|06010101;0.0|06010301;0.01|060101;0.0|06010102;0.0
imei数据各列含义:
IMEI,ANDROIDID(多个以|分割),MAC地址(多个以|分割),常驻城市(多个城市以,分割不超过3个),家庭小区,机型特点标签(以|分割),操作系统,分辨率(长*宽*dpi),
标签大类01(具体说明见标签文档,多个标签以|分割,前面为标签CODE,;后面是权重值), 标签大类02(同01),标签大类03(同01),标签大类04(同01),标签大类06(同01),标签大类07(同01)
imei数据内容:
000000000000311 3f585f1859cd7f3b 1a:47:95:57:82:ba android+4.2.2 480*764*120
000000176761971 e3efe5b05dac9be0 c2:c1:f4:8f:9e:c0|c2:c1:80:9e:d1:c0 阳泉市 OPPO|手机|5.0-4.6英寸|陀螺仪,NFC芯片|2000-3999|Find 5 android+4.1.1 1080*1920*480 070503;101|070101;101|070403;101|070201;101
000000842880155 6682edddc91f318f 00:08:22:86:4f:3f OPPO|手机|美颜|5.0-4.6英寸|8核,双卡双待|2000-3999|R7 android+4.4.4 1080*1920*480 02011308;0.14|020113;1.04|020111;0.14|02011301;0.89|02011101;0.14 030401;0.04|030502;0.04|030102;100.0|030209;100.0
其中标签大类对应表如下:
游戏偏好 01
应用兴趣 02
人口属性 03
消费偏好 04
定制标签 05
地理位置 06
游戏深度标签 07
正负样本统计及剔除重复样本
- 数据中idfa数据的总样本量为1575936,其中正样本为1418125,负样本为157811,负正样本比例为:8.98:1。
- imei数据的总样本量为1800166,其中正样本为1540377,负样本为259789,负正样本比例为:5.93:1。
- imei数据中,若以ANDROIDID为唯一id,此id有重复。为了剔除重复样本并缩小正负样本比例,这里只对负样本的重复样本进行剔除。剔除的负样本量为9945,剔除后的负正样本比例为5.89:1
特征提取及转换
实际测试中只提取用户标签大类作为特征(如上),若一个样本这7个标签大类都没有信息则去除此样本。将有信息的样本转换为key:value的形式。
name | value |
---|---|
剔除的样本量为 | 846583 |
最终有效样本为 | 2529519 |
负正样本比例为 | 6.45:1 |
最终处理后的样本格式为:
label{0,1} key1:value1 key2:value2 …
1 32:0.61 34:0.61 69:0.61 70:0.61 113:0.47 114:0.47 151:0.46 152:0.46 156:0.61 158:0.61 188:0.61 197:0.61 219:8.34 220:8.34 221:0.61 224:0.61
1 273:10.0 361:0.0 362:0.0 367:0.0 368:0.0
1 273:10.0 361:0.0 362:0.0 367:0.03 368:0.03 369:0.03 370:0.02
0 19:1.76 20:1.76 21:1.76 98:1.76 151:0.88 152:0.88 188:1.76 197:1.76 198:1.76 219:11.41 220:7.02 221:1.76 222:0.88 225:1.76 227:3.51 230:0.88 231:0.88 481:101 484:101 613:0.88
0 69:0.88 70:0.88 107:1.76 108:0.88 109:1.76 151:0.88 152:0.88 156:1.76 159:1.76 176:0.88 178:0.88 219:4.39 220:1.76 221:1.76 222:0.88 223:0.88 224:0.88 227:1.76 481:101
cv 调参
booster=gblinear的部分参数
参数 | 说明 |
---|---|
lambda | L2正则化参数,默认为0 |
alpha | L1正则化参数,默认为0 |
lambda_bias | L2的偏置量 |
booster=gbtree的部分参数
参考自【xgboost】导读与实战.pdf
参数 | 说明 |
---|---|
subsample | 每次做gb选取的数据比例,可以用作避免过拟合,默认为1 |
min_child_weight | 这个参数默认是 1,是每个叶子里面 h 的和至少是多少,对正负样本不均衡时的 0-1 分类而言,假设 h 在 0.01 附近, min_child_weight 为 1 意味着叶子节点中最少需要包含 100 个样本。这个参数非常影响结果,控制叶子节点中二阶导的和的最小值,该参数值越小,越容易 overfitting。 |
eta | 学习率 |
max_delta_step | 如果设立了该值,对叶子节点的权重值做了约束在 [max_delta_step,max_delta_step]。以防在某些 loss 下权重值过大,默认是 0(其实代表 inf)。可以试试把这个参数设置到 1-10 之间的一个值。这样会防止做太大的更新步子,使得更新更加平缓 |
lambda | L2正则化参数,默认为1 |
alpha | L1正则化参数,默认为0 |
调参记录
以下测试的训练集与测试集没有变化,以及一些不变的参数为:
参数名 | 值 |
---|---|
subsample | 0.8 |
silent | 1 |
objective | binary:logistic |
eval_metric | auc |
nthread | 4 |
gblinear调参记录
iteration | lambda | alpha | eta | iter:max_AUC | end_AUC |
---|---|---|---|---|---|
500 | 0 | 0 | 0.3 | 44:0.623807 | 0.622787 |
207 | 0 | 0 | 0.1 | 182:0.623858 | 0.623631 |
176 | 0.01 | 0 | 0.1 | 160:0.623936 | 0.623906 |
224 | 0 | 0.01 | 0.1 | 160:0.623920 | 0.623498 |
213 | 0.1 | 0 | 0.1 | 165:0.623399 | 0.623026 |
132 | 1 | 0 | 0.3 | 100:0.622977 | 0.622827 |
gblinear需要调的参数有L1、L2正则化参数以及步长大小;上表每列分别表示:iteration迭代步长、l2正则化参数、l1正则化参数、eta步长缩减比例、max_auc迭代过程中最最大auc、end_auc最后一次迭代auc,这里计算的AUC都是测试集的AUC。整体来看,根据实际情况适度调整参数后实际auc变化不大,当使用L2正则化参数系数为0.01时auc最高为0.623936。
gbtree调参记录
iteration | max_depth | min_child_weight | eta | lambda | alpha | iter:max_AUC | end_AUC |
---|---|---|---|---|---|---|---|
146 | 6 | 1 | 0.3 | 1 | 0 | 122:0.660744 | 0.660410 |
146 | 12 | 1 | 0.3 | 1 | 0 | 14:0.655844 | 0.654396 |
72 | 8 | 1 | 0.3 | 1 | 0 | 326:0.658738 | 0.658738 |
72 | 6 | 1.5 | 0.3 | 1 | 0 | 326:0.658738 | 0.658738 |
155 | 6 | 0.5 | 0.3 | 1 | 0 | 145:0.660733 | 0.660531 |
234 | 6 | 1.5 | 0.3 | 1 | 0 | 215:0.659923 | 0.659663 |
gbtree需要调的参数有max_depth每棵树的深度,min_child_weight,eta每次迭代步长缩减比例,正则化参数lambda和alpha。经过一些测试,max_depth数值在超过6时有过拟合的趋势,训练集合auc明显升高,测试集合auc没有提升;为3时效果几乎不变auc0.65;为6时效果最好。min_child_weight在1时效果最好。总上,第一行的参数组合auc最高0.660744。
增加特征
原始数据的用户行为标签是认为标定的浮点型数值,这些数值可能存在不合理,为了减少这种情况的影响,将每个具有此类标注的标签增加一个{0,1}标注的特征值。即
之前的特征
1 32:0.61 34:0.61 69:0.61 70:0.61 113:0.47 114:0.47 151:0.46 152:0.46 156:0.61 158:0.61 188:0.61 197:0.61 219:8.34 220:8.34 221:0.61 224:0.61
增加之后的特征
1 32:0.61 34:0.61 69:0.61 70:0.61 113:0.47 114:0.47 151:0.46 152:0.46 156:0.61 158:0.61 188:0.61 197:0.61 219:8.34 220:8.34 221:0.61 224:0.61 654:1 656:1 691:1 692:1 735:1 736:1 773:1 774:1 778:1 780:1 810:1 819:1 841:1 842:1 843:1 846:1
原来一共有622个特征,特征32对应数值为0.61 那么增加 (32+622)654:1,key 32 与 654对应的同一个特征。
测试
gbtree调参记录
iteration | max_depth | min_child_weight | eta | lambda | alpha | iter:max_AUC | end_AUC |
---|---|---|---|---|---|---|---|
191 | 6 | 1 | 0.3 | 1 | 0 | 122:0.660744 | 0.660142 |
几乎没有变化
gblinear调参记录
iteration | lambda | alpha | eta | iter:max_AUC | end_AUC |
---|---|---|---|---|---|
177 | 1 | 0 | 0.3 | 44:0.623817 | 0.622792 |
总体来看,增加特征的方式并没有提升,与原来的效果几乎相同。
总结
1. 增加特征的方式效果不好,还是使用原来的特征。
2. gbtree比gblinear效果好,但是速度慢一些。
3. gbtree主要需要调的参数有三个:树的深度max_depth:越大越容易过拟合、每次迭代步长的缩减比例eta:越小每次走的步长小更精细,但是慢、min_child_weight越小越容易过拟合。
4. 最终的参数:
iteration | max_depth | min_child_weight | eta | lambda | alpha | iter:max_AUC | end_AUC |
---|---|---|---|---|---|---|---|
146 | 6 | 1 | 0.3 | 1 | 0 | 122:0.660744 | 0.660410 |