廣告點擊率(ctr)預估中的特徵選擇

轉載自http://blog.csdn.NET/mytestmy/article/details/19088827


互聯網廣告綜述之點擊率特徵工程

一.互聯網廣告特徵工程

博文《互聯網廣告綜述之點擊率系統》論述了互聯網廣告的點擊率系統,可以看到,其中的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

發佈了11 篇原創文章 · 獲贊 147 · 訪問量 44萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章