ctr_xgboost_blue

ctr項目簡介

Click through rate 廣告點擊率,是指瀏覽網頁的用戶點擊某個特定的鏈接(創意)的比例(ratio)。本ctr項目主要針對手機用戶預測ctr,主要使用的方法爲xgboost,模型好壞的離線衡量指標爲AUC,並與LR(Logistic Regression Model)模型做比較。在離線測試中,xgboost的AUC高於LR。(0.66>0.62)

項目實現流程

ctr_blue

項目簡要流程圖如上,主要流程爲:
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

正負樣本統計及剔除重複樣本

  1. 數據中idfa數據的總樣本量爲1575936,其中正樣本爲1418125,負樣本爲157811,負正樣本比例爲:8.98:1。
  2. imei數據的總樣本量爲1800166,其中正樣本爲1540377,負樣本爲259789,負正樣本比例爲:5.93:1。
  3. 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章