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 |