一.互聯(lián)網(wǎng)廣告特征工程
博文《互聯(lián)網(wǎng)廣告綜述之點擊率系統(tǒng)》論述了互聯(lián)網(wǎng)廣告的點擊率系統(tǒng),可以看到,其中的logistic regression模型是比較簡單而且實用的,其訓(xùn)練方法雖然有多種,但目標(biāo)是一致的,訓(xùn)練結(jié)果對效果的影響是比較大,但是訓(xùn)練方法本身,對效果的影響卻不是決定性的,因為訓(xùn)練的是每個特征的權(quán)重,權(quán)重細(xì)微的差別不會引起ctr的巨大變化。
在訓(xùn)練方法確定后,對ctr預(yù)估起到?jīng)Q定性作用的是選用的特征。
1.1特征選擇與使用
做點擊率預(yù)估需要兩方面的數(shù)據(jù),一方面是廣告的數(shù)據(jù),另一方面是用戶的數(shù)據(jù),現(xiàn)在所有的數(shù)據(jù)都有,那么工作就是利用這兩方面的數(shù)據(jù)評估用戶點擊這個廣告的可能性(也就是概率)。
用戶的特征是比較多的,用戶的年齡,性別,地域,職業(yè),學(xué)校,手機平臺等等。廣告的特征也很豐富,如廣告大小,廣告文本,廣告所屬行業(yè),廣告圖片。還有反饋特征,如每個廣告的實時ctr,廣告跟性別交叉的ctr。如何從這么多的特征中選擇到能刻畫一個人對一個廣告的興趣的特征,是數(shù)據(jù)挖掘工程師的一個大難題。
選中了特征,還需要注意特征的選擇方式,例如,如果單獨把年齡作為一個特征,最終能訓(xùn)練出來啥嗎?因為年齡相加相減是沒有意義的,所以只能把每個年齡做為一個特征,但是光這樣可以了嗎?怎么用特征,是廣告算法工程師的一個大課題。
1.1.1 選擇特征
什么樣的特征適合用來預(yù)估ctr?這個問題是很多廣告算法工程師的需要考慮的。
機器學(xué)習(xí)算法最多會大談模型,對于特征的討論很少涉及。真正的應(yīng)用中,多數(shù)數(shù)據(jù)挖掘工程師的工作都是在想特征,驗證特征。
想特征是一個腦力加體力的活,需要不少的領(lǐng)域的知識,更讓人郁悶的是,工業(yè)界并沒有一整套想特征的辦法,工業(yè)界有的只是驗證特征的辦法。對于互聯(lián)網(wǎng)廣告業(yè),就簡單說說通用特征怎么來的吧。
首先說年齡這個特征,怎么知道它跟點擊率有關(guān)系?現(xiàn)在直觀的解釋是,年輕人普遍喜歡運動類的廣告,30歲左右的男人喜歡車,房子之類的廣告,50歲以上的人喜歡保健品的廣告??梢钥吹?,選擇年齡作為特征的理由是基于對各個年齡段的人喜歡的不同類型的東西的一個粗略的劃分,是一個很主觀的東西。
再說性別這個特征,直觀的感覺是,男性普遍喜歡體育類的,車類的,旅游類廣告,女性普遍喜歡化妝品,服裝類的廣告。這也可以看到,選擇性別作為特征也是基于相似的理由,就是認(rèn)為男性和女性大體會喜歡不同的東西。
對于地域這個特征,這下就學(xué)問多了,華南的人在比較喜歡動漫和游戲,華北的人喜歡酒品和煙?
在廣告方面的特征,廣告的圖片大小,廣告前景色背景色真的能影響人的點擊嗎?這其實都是一種猜測。圖片里面是一個明星還是一個動物之類的因素也可以考慮。
總結(jié):選特征的流程,就是先猜想,然后統(tǒng)計驗證,然后將特征加到模型中,進(jìn)行驗證。
總之,想特征的這個事情基本沒多大譜,只能天南地北地想象,還要多了解各行各業(yè)的知識,以便想到更多的特征,哪怕某個特征跟人關(guān)系并不大,也得好好驗證一番。
想到了特征,就要驗證和進(jìn)行判斷。
驗證特征的辦法多,有直接觀察ctr,卡方檢驗,單特征AUC等。直接觀察ctr是個很有效的方法,如根據(jù)投放記錄,化妝品的廣告在女性上面的點擊率就比在男性上面的點擊率高很多,說明性別這個特征在化妝品行業(yè)是有預(yù)測能力的;又如體育用品的廣告在男性上面的點擊率也比女性高,說明性別這個特征在體育行業(yè)也是有預(yù)測能力的,經(jīng)過多個行業(yè)的驗證,就認(rèn)為性別這個特征可以用了。
年齡這個特征的評估類型,主要是觀察一個廣告在不同年齡段的點擊率是否有區(qū)別,再觀察不同廣告的點擊率在不同年齡段的分布是否不一樣,如果都有區(qū)別,說明年齡這個特征就可以用了。
在實際的使用中發(fā)現(xiàn),性別這個特征比較有效,手機平臺這個特征也比較有效,地域和年齡這兩個特征有一定效果,但沒有前兩個那么明顯,跟他們的使用方式可能有關(guān),還需要進(jìn)一步挖掘。
同時,實際使用中也發(fā)現(xiàn),廣告反饋ctr這個特征也很有效,這個特征的意思就是當(dāng)前的廣告正在投放,已經(jīng)投放了一部分了,這部分的點擊率基本可以認(rèn)為是這個廣告的點擊率了,也可以認(rèn)為是這個廣告的質(zhì)量的一個體現(xiàn),用來預(yù)估一個流量的ctr是很有效的。
1.1.2 特征的處理和使用
選擇得到特征,怎么用也是一個問題。
先說需求,其實預(yù)估ctr要做的事情是下面的圖的工作——計算一個用戶/廣告組合的ctr。
上面已經(jīng)選好了特征,暫定有廣告的反饋ctr,用戶年齡,性別三個特征。
一、離散化,有些特征雖然也是數(shù)值型的,但是該特征的取值相加相減是沒有實際意義的,那么該數(shù)值型特征也要看成離散特征,采用離散化的技術(shù)。
反饋ctr是一個浮點數(shù),直接作為特征是可以的,假設(shè)1號特征就是反饋ctr。對應(yīng)年齡來說就不是這樣了,因為年齡不是浮點數(shù),而且年齡的20歲跟30歲這兩個數(shù)字20,30大小比較是沒有意義的,相加相減都是沒有意義的,在優(yōu)化計算以及實際計算ctr是會涉及這兩個數(shù)字的大小比較的。如w.x,在w已經(jīng)確定的情況下,x的某個特征的值是20,或者30,w.x的值相差是很大的,哪怕用邏輯化公式再比較,得到的值也是比較大的,但是往往20歲的人跟30歲的人對同一個廣告的興趣差距不會那么大。解決這樣的情況的方法就是,每個年齡一個特征,如總共只有20歲到29歲10種年齡,就把每個年齡做一個特征,編號是從2到11(1號是廣告的反饋ctr),如果這個人是20歲,那么在編號為2的特征上的值就是1,3到11的編號上就是0。這樣,年齡這一類特征就有了10個特征,而且這10個特征就是互斥的,這樣的特征稱為離散化特征。
二、交叉,交叉從理論上而言是為了引入特征之間的交互,也即為了引入非線性性。是有實際意義的。本文對交叉的意義解釋得非常nice
這樣看起來就能解決上面的問題了,但是夠了嗎?
比如一個人是20歲,那么在編號為2的特征上面,它一直都是1,對籃球的廣告是1,對化妝品的廣告也是1,這樣訓(xùn)練的結(jié)果得到的編號為2的權(quán)重的意義是——20歲的人點擊所有的廣告的可能性的都是這個權(quán)重,這樣其實是不合理的。
有意義的應(yīng)該是,這個20歲的人,當(dāng)廣告是跟體育相關(guān)的時候,它是一個值;當(dāng)廣告跟保健品相關(guān)的時候,它又是一個值。這樣看起來才合理。如果這個不夠深刻,基于跟上面同樣的道理,性別這個特征也是一樣的,假如也做了上面的離散化操作,編號是12和13,12是男性,13是女性。這樣的話,對于一個男性/體育廣告組合來說,編號12的特征值為1,男性/化妝品的組合的編號12的特征值也是1。這樣也是不合理的。
怎么做到合理呢?以上面的性別的例子來說。編號12的特征值不取1,取值為該廣告在男性用戶上面的點擊率,如對于男性/體育廣告的組合,編號12的特征的值為男性在體育廣告上面點擊率,這樣,編號為12的特征就變成了一個浮點數(shù),這個浮點數(shù)的相加減是有意義的。
這樣的做法稱為特征的交叉,現(xiàn)在就是性別跟廣告的交叉得到的特征值。還有很多其他的方式可以進(jìn)行交叉,目前工業(yè)上的應(yīng)用最多的就是廣告跟用戶的交叉特征(編號為1的那個特征)、廣告跟性別的交叉特征,廣告跟年齡的交叉特征,廣告跟手機平臺的交叉特征,廣告跟地域的交叉特征。如果做得比較多,可能會有廣告主(每個廣告都是一個廣告主提交的一個投放計劃,一個廣告主可能會提交多個投放計劃)跟各個特征的交叉。
三、連續(xù)特征變離散特征:連續(xù)特征離散化的基本假設(shè),是默認(rèn)連續(xù)特征不同區(qū)間的取值對結(jié)果的貢獻(xiàn)是不一樣的
做到的交叉的特征值就足夠了嗎?答案還是不一定。
如編號為1的那個特征,就是廣告本身的ctr,假設(shè)互聯(lián)網(wǎng)廣告的點擊率符合一個長尾分布,叫做對數(shù)正態(tài)分布,其概率密度是下圖(注意這個是假設(shè),不代表真實的數(shù)據(jù),從真實的數(shù)據(jù)觀察是符合這么樣的一個形狀的,好像還有雅虎的平滑的那個論文說它符合beta分布)。
可以看到,大部分廣告的點擊率都是在某一個不大的區(qū)間內(nèi)的,點擊率越高的廣告越少,同時這些廣告覆蓋的流量也少。換句話說,點擊率在0.2%左右的時候,如果廣告a的點擊率是0.2%,廣告b的點擊率是0.25%,廣告b的點擊率比廣告a高0.05%,其實足以表示廣告b比廣a好不少,因為有足夠多的樣本支持這個結(jié)論;但是點擊率在1.0%左右的的時候,廣告a點擊率是1.0%,廣告b的點擊率是1.05%,并沒有辦法表示廣告b比廣告a好很多,因為在這0.05%的區(qū)間內(nèi)的廣告并不多,兩個廣告基本可以認(rèn)為差不多的。也就是點擊率在不同的區(qū)間,應(yīng)該考慮是不同的權(quán)重系數(shù),因為這個由廣告點擊率組成的編號為1的特征與這個用戶對廣告的點擊的概率不是完全的正相關(guān)性,有可能值越大特征越重要,也有可能值增長到了一定程度,重要性就下降了。比如說,在區(qū)間[0.2%,0.3%]區(qū)間的系數(shù)就要比[0.3%,0.4%]的系數(shù)大。故,我們?nèi)绻麑?shù)值型特征進(jìn)行區(qū)間離散化,就是默認(rèn)不同區(qū)間的權(quán)重是不一樣的。
對于這樣的問題,百度有科學(xué)家提出了對連續(xù)特征進(jìn)行離散化。他們認(rèn)為,特征的連續(xù)值在不同的區(qū)間的重要性是不一樣的,所以希望連續(xù)特征在不同的區(qū)間有不同的權(quán)重,實現(xiàn)的方法就是對特征進(jìn)行劃分區(qū)間,每個區(qū)間為一個新的特征。常用做法,就是先對特征進(jìn)行排序,然后再按照等頻離散化為N個區(qū)間
具體實現(xiàn)是使用等頻離散化方式:1)對于上面的編號為1的那個特征,先統(tǒng)計歷史記錄中每條展示記錄中編號為1的特征的值的排序,假設(shè)有10000條展示記錄,每個展示記錄的這個特征值是一個不相同的浮點數(shù),對所有的展示記錄按照這個浮點數(shù)從低到高排序,取最低的1000個展示記錄的特征值作為一個區(qū)間,排名1001到2000的展示記錄的特征值作為一個區(qū)間,以此類推,總共劃分了10個區(qū)間。2)對特征編號重新編排,對于排名從1到1000的1000個展示記錄,他們的原來編號為1的特征轉(zhuǎn)變?yōu)樾碌奶卣骶幪?,值為1;對于排名是從1001到2000的記錄,他們的原來編號為1的特征轉(zhuǎn)變?yōu)樾碌奶卣骶幪?,值為1,以此類推,新的特征編號就有了1到10總共10個。對于每個展示記錄來說,如果是排名1到1000的,新的特征編號就只有編號1的值為1,2到10的為0,其他的展示記錄類似,這樣,廣告本身的ctr就占用了10個特征編號,就成為離散化成了10個特征。
等頻離散化需要對原有的每個特征都做,也就是原來的編號為1到13的編號,會離散化成很多的編號,如果每個特征離散化成10個,則最終會有130個特征,訓(xùn)練的結(jié)果w就會是一個130維的向量,分別對應(yīng)著130個特征的權(quán)重。
實際的應(yīng)用表名,離散化的特征能擬合數(shù)據(jù)中的非線性關(guān)系,取得比原有的連續(xù)特征更好的效果,而且在線上應(yīng)用時,無需做乘法運算,也加快了計算ctr的速度。
1.1.3 特征的過濾與修正
上面提到,很多特征其實是反饋的特征,如廣告反饋ctr,廣告與性別交叉特征,這些特征本來可以通過歷史展示日志的統(tǒng)計得到。但有些廣告本來展示量很少,在男性用戶上展示就更少,這時要計算廣告與性別交叉的ctr是很不準(zhǔn)確的,需要對這個特征進(jìn)行修正。具體的修正方法可以參考博文《廣告點擊率的貝葉斯平滑》。
經(jīng)過修正后的ctr再做特征,實際線上效果有了比較大的提升。
如果使用的特征又更多了,有了學(xué)校跟廣告交叉特征什么的,離散化后有了上萬的特征,這下就會產(chǎn)生特征過多導(dǎo)致的各種問題,如過擬合等。解決這個問題的方法一種是離線的數(shù)據(jù)評估,如用ctr的區(qū)分性。另一種就是利用正則,特別是L1正則,經(jīng)過L1正則訓(xùn)練的得到的權(quán)重向量,其中某些特征如果對點擊率預(yù)估預(yù)測性不強,權(quán)重會變成0,不影響預(yù)估。這就是特征過濾,具體的有關(guān)L1的一些論述與實現(xiàn)參看博文《從廣義線性模型到邏輯回歸》《OWL-QN算法》和《在線學(xué)習(xí)算法FTRL》。