天天看點

網際網路廣告綜述之點選率特征工程網際網路廣告綜述之點選率特征工程

網際網路廣告綜述之點選率特征工程

聲明:

1)該博文是整理自網上很大牛和專家所無私奉獻的資料的。具體引用的資料請看參考文獻。具體的版本聲明也參考原文獻

2)本文僅供學術交流,非商用。是以每一部分具體的參考資料并沒有詳細對應,更有些部分本來就是直接從其他部落格複制過來的。如果某部分不小心侵犯了大家的利益,還望海涵,并聯系老衲删除或修改,直到相關人士滿意為止。

3)本人才疏學淺,整理總結的時候難免出錯,還望各位前輩不吝指正,謝謝。

4)閱讀本文需要機器學習、統計學習理論、優化算法等等基礎(如果沒有也沒關系了,沒有就看看,當做跟同學們吹牛的本錢)。

5)本人手上有word版的和pdf版的,有必要的話可以上傳到csdn供各位下載下傳

一.網際網路廣告特征工程

博文《網際網路廣告綜述之點選率系統》論述了網際網路廣告的點選率系統,可以看到,其中的logistic regression模型是比較簡單而且實用的,其訓練方法雖然有多種,但目标是一緻的,訓練結果對效果的影響是比較大,但是訓練方法本身,對效果的影響卻不是決定性的,因為訓練的是每個特征的權重,權重細微的差别不會引起ctr的巨大變化。

在訓練方法确定後,對ctr預估起到決定性作用的是選用的特征。

1.1特征選擇與使用

做點選率預估需要兩方面的資料,一方面是廣告的資料,另一方面是使用者的資料,現在所有的資料都有,那麼工作就是利用這兩方面的資料評估使用者點選這個廣告的可能性(也就是機率)。

使用者的特征是比較多的,使用者的年齡,性别,地域,職業,學校,手機平台等等。廣告的特征也很豐富,如廣告大小,廣告文本,廣告所屬行業,廣告圖檔。還有回報特征,如每個廣告的實時ctr,廣告跟性别交叉的ctr。如何從這麼多的特征中選擇到能刻畫一個人對一個廣告的興趣的特征,是資料挖掘工程師的一個大難題。

選中了特征,還需要注意特征的選擇方式,例如,如果單獨把年齡作為一個特征,最終能訓練出來啥嗎?因為年齡相加相減是沒有意義的,是以隻能把每個年齡做為一個特征,但是光這樣可以了嗎?怎麼用特征,是廣告算法工程師的一個大課題。

1.1.1 選擇特征

什麼樣的特征适合用來預估ctr?這個問題是很多廣告算法工程師的需要考慮的。

機器學習算法最多會大談模型,對于特征的讨論很少涉及。真正的應用中,多數資料挖掘工程師的工作都是在想特征,驗證特征。

想特征是一個腦力加體力的活,需要不少的領域的知識,更讓人郁悶的是,工業界并沒有一整套想特征的辦法,工業界有的隻是驗證特征的辦法。對于網際網路廣告業,就簡單說說通用特征怎麼來的吧。

首先說年齡這個特征,怎麼知道它跟點選率有關系?現在直覺的解釋是,年輕人普遍喜歡運動類的廣告,30歲左右的男人喜歡車,房子之類的廣告,50歲以上的人喜歡保健品的廣告。可以看到,選擇年齡作為特征的理由是基于對各個年齡段的人喜歡的不同類型的東西的一個粗略的劃分,是一個很主觀的東西。

再說性别這個特征,直覺的感覺是,男性普遍喜歡體育類的,車類的,旅遊類廣告,女性普遍喜歡化妝品,服裝類的廣告。這也可以看到,選擇性别作為特征也是基于相似的理由,就是認為男性和女性大體會喜歡不同的東西。

對于地域這個特征,這下就學問多了,華南的人在比較喜歡動漫和遊戲,華北的人喜歡酒品和煙?

在廣告方面的特征,廣告的圖檔大小,廣告前景色背景色真的能影響人的點選嗎?這其實都是一種猜測。圖檔裡面是一個明星還是一個動物之類的因素也可以考慮。

總之,想特征的這個事情基本沒多大譜,隻能天南地北地想象,還要多了解各行各業的知識,以便想到更多的特征,哪怕某個特征跟人關系并不大,也得好好驗證一番。這基本上跟男人為回家晚想借口一樣,得有借口要想着怎麼解釋得好聽點,沒借口就要想借口。

想到了特征,就要驗證和進行判斷。

驗證特征的辦法多,有直接觀察ctr,卡方檢驗,單特征AUC等。直接觀察ctr是個很有效的方法,如根據投放記錄,化妝品的廣告在女性上面的點選率就比在男性上面的點選率高很多,說明性别這個特征在化妝品行業是有預測能力的;又如體育用品的廣告在男性上面的點選率也比女性高,說明性别這個特征在體育行業也是有預測能力的,經過多個行業的驗證,就認為性别這個特征可以用了。

年齡這個特征的評估類型,主要是觀察一個廣告在不同年齡段的點選率是否有差別,再觀察不同廣告的點選率在不同年齡段的分布是否不一樣,如果都有差別,說明年齡這個特征就可以用了。

在實際的使用中發現,性别這個特征比較有效,手機平台這個特征也比較有效,地域和年齡這兩個特征有一定效果,但沒有前兩個那麼明顯,跟他們的使用方式可能有關,還需要進一步挖掘。

同時,實際使用中也發現,廣告回報ctr這個特征也很有效,這個特征的意思就是目前的廣告正在投放,已經投放了一部分了,這部分的點選率基本可以認為是這個廣告的點選率了,也可以認為是這個廣告的品質的一個展現,用來預估一個流量的ctr是很有效的。

1.1.2 特征的處理和使用

選擇得到特征,怎麼用也是一個問題。

先說需求,其實預估ctr要做的事情是下面的圖的工作——計算一個使用者/廣告組合的ctr。

網際網路廣告綜述之點選率特征工程網際網路廣告綜述之點選率特征工程

上面已經選好了特征,暫定有廣告的回報ctr,使用者年齡,性别三個特征。

一、離散化

回報ctr是一個浮點數,直接作為特征是可以的,假設1号特征就是回報ctr。對應年齡來說就不是這樣了,因為年齡不是浮點數,而且年齡的20歲跟30歲這兩個數字20,30大小比較是沒有意義的,相加相減都是沒有意義的,在優化計算以及實際計算ctr是會涉及這兩個數字的大小比較的。如w.x,在w已經确定的情況下,x的某個特征的值是20,或者30,w.x的值相差是很大的,哪怕用邏輯化公式再比較,得到的值也是比較大的,但是往往20歲的人跟30歲的人對同一個廣告的興趣差距不會那麼大。解決這樣的情況的方法就是,每個年齡一個特征,如總共隻有20歲到29歲10種年齡,就把每個年齡做一個特征,編号是從2到11(1号是廣告的回報ctr),如果這個人是20歲,那麼在編号為2的特征上的值就是1,3到11的編号上就是0。這樣,年齡這一類特征就有了10個特征,而且這10個特征就是互斥的,這樣的特征稱為離散化特征。

二、交叉

這樣看起來就能解決上面的問題了,但是夠了嗎?

比如一個人是20歲,那麼在編号為2的特征上面,它一直都是1,對籃球的廣告是1,對化妝品的廣告也是1,這樣訓練的結果得到的編号為2的權重的意義是——20歲的人點選所有的廣告的可能性的都是這個權重,這樣其實是不合理的。

有意義的應該是,這個20歲的人,當廣告是跟體育相關的時候,它是一個值;當廣告跟保健品相關的時候,它又是一個值。這樣看起來才合理。如果這個不夠深刻,基于跟上面同樣的道理,性别這個特征也是一樣的,假如也做了上面的離散化操作,編号是12和13,12是男性,13是女性。這樣的話,對于一個男性/體育廣告組合來說,編号12的特征值為1,男性/化妝品的組合的編号12的特征值也是1。這樣也是不合理的。

怎麼做到合理呢?以上面的性别的例子來說。編号12的特征值不取1,取值為該廣告在男性使用者上面的點選率,如對于男性/體育廣告的組合,編号12的特征的值為男性在體育廣告上面點選率,這樣,編号為12的特征就變成了一個浮點數,這個浮點數的相加減是有意義的。

這樣的做法稱為特征的交叉,現在就是性别跟廣告的交叉得到的特征值。還有很多其他的方式可以進行交叉,目前工業上的應用最多的就是廣告跟使用者的交叉特征(編号為1的那個特征)、廣告跟性别的交叉特征,廣告跟年齡的交叉特征,廣告跟手機平台的交叉特征,廣告跟地域的交叉特征。如果做得比較多,可能會有廣告主(每個廣告都是一個廣告主送出的一個投放計劃,一個廣告主可能會送出多個投放計劃)跟各個特征的交叉。

三、連續特征變離散特征

做到的交叉的特征值就足夠了嗎?答案還是不一定。

如編号為1的那個特征,就是廣告本身的ctr,假設網際網路廣告的點選率符合一個長尾分布,叫做對數正态分布,其機率密度是下圖(注意這個是假設,不代表真實的資料,從真實的資料觀察是符合這麼樣的一個形狀的,好像還有雅虎的平滑的那個論文說它符合beta分布)。

網際網路廣告綜述之點選率特征工程網際網路廣告綜述之點選率特征工程

可以看到,大部分廣告的點選率都是在某一個不大的區間内的,點選率越高的廣告越少,同時這些廣告覆寫的流量也少。換句話說,點選率在0.2%左右的時候,如果廣告a的點選率是0.2%,廣告b的點選率是0.25%,廣告b的點選率比廣告a高0.05%,其實足以表示廣告b比廣a好不少;但是點選率在1.0%左右的的時候,廣告a點選率是1.0%,廣告b的點選率是1.05%,并沒有辦法表示廣告b比廣告a好很多,因為在這0.05%的區間内的廣告并不多,兩個廣告基本可以認為差不多的。也就是點選率在不同的區間,應該考慮是不同的權重系數,因為這個由廣告點選率組成的編号為1的特征與這個使用者對廣告的點選的機率不是完全的正相關性,有可能值越大特征越重要,也有可能值增長到了一定程度,重要性就下降了。

對于這樣的問題,百度有科學家提出了對連續特征進行離散化。他們認為,特征的連續值在不同的區間的重要性是不一樣的,是以希望連續特征在不同的區間有不同的權重,實作的方法就是對特征進行劃分區間,每個區間為一個新的特征。

具體實作是使用等頻離散化方式:1)對于上面的編号為1的那個特征,先統計曆史記錄中每條展示記錄中編号為1的特征的值的排序,假設有10000條展示記錄,每個展示記錄的這個特征值是一個不相同的浮點數,對所有的展示記錄按照這個浮點數從低到高排序,取最低的1000個展示記錄的特征值作為一個區間,排名1001到2000的展示記錄的特征值作為一個區間,以此類推,總共劃分了10個區間。2)對特征編号重新編排,對于排名從1到1000的1000個展示記錄,他們的原來編号為1的特征轉變為新的特征編号1,值為1;對于排名是從1001到2000的記錄,他們的原來編号為1的特征轉變為新的特征編号2,值為1,以此類推,新的特征編号就有了1到10總共10個。對于每個展示記錄來說,如果是排名1到1000的,新的特征編号就隻有編号1的值為1,2到10的為0,其他的展示記錄類似,這樣,廣告本身的ctr就占用了10個特征編号,就成為離散化成了10個特征。

等頻離散化需要對原有的每個特征都做,也就是原來的編号為1到13的編号,會離散化成很多的編号,如果每個特征離散化成10個,則最終會有130個特征,訓練的結果w就會是一個130維的向量,分别對應着130個特征的權重。

實際的應用表名,離散化的特征能拟合資料中的非線性關系,取得比原有的連續特征更好的效果,而且線上上應用時,無需做乘法運算,也加快了計算ctr的速度。

1.1.3 特征的過濾與修正

上面提到,很多特征其實是回報的特征,如廣告回報ctr,廣告與性别交叉特征,這些特征本來可以通過曆史展示日志的統計得到。但有些廣告本來展示量很少,在男性使用者上展示就更少,這時要計算廣告與性别交叉的ctr是很不準确的,需要對這個特征進行修正。具體的修正方法可以參考博文《廣告點選率的貝葉斯平滑》。

經過修正後的ctr再做特征,實際線上效果有了比較大的提升。

如果使用的特征又更多了,有了學校跟廣告交叉特征什麼的,離散化後有了上萬的特征,這下就會産生特征過多導緻的各種問題,如過拟合等。解決這個問題的方法一種是離線的資料評估,如用ctr的區分性。另一種就是利用正則,特别是L1正則,經過L1正則訓練的得到的權重向量,其中某些特征如果對點選率預估預測性不強,權重會變成0,不影響預估。這就是特征過濾,具體的有關L1的一些論述與實作參看博文《從廣義線性模型到邏輯回歸》《OWL-QN算法》和《線上學習算法FTRL》。

緻謝

多位Linkedln、百度公司的研究員無私公開的資料。

多位部落客的部落格資料。

參考文獻

[1] Ad Click Prediction: a View from the Trenches. H. Brendan McMahan, Gary Holt et al,Google的論文

[2] http://www.cnblogs.com/vivounicorn/archive/2012/06/25/2561071.html @Leo Zhang的部落格

[3] Computational Advertising: The LinkedIn Way. Deepak Agarwal, LinkedIn Corporation CIKM

繼續閱讀