一.互聯網廣告特徵工程算法
博文《互聯網廣告綜述之點擊率系統》論述了互聯網廣告的點擊率系統,能夠看到,其中的logistic regression模型是比較簡單並且實用的,其訓練方法雖然有多種,但目標是一致的,訓練結果對效果的影響是比較大,可是訓練方法自己,對效果的影響卻不是決定性的,由於訓練的是每一個特徵的權重,權重細微的差異不會引發ctr的巨大變化。
在訓練方法肯定後,對ctr預估起到決定性做用的是選用的特徵。數據結構
1.1特徵選擇與使用機器學習
作點擊率預估須要兩方面的數據,一方面是廣告的數據,另外一方面是用戶的數據,如今全部的數據都有,那麼工做就是利用這兩方面的數據評估用戶點擊這個廣告的可能性(也就是機率)。
用戶的特徵是比較多的,用戶的年齡,性別,地域,職業,學校,手機平臺等等。廣告的特徵也很豐富,如廣告大小,廣告文本,廣告所屬行業,廣告圖片。還有反饋特徵,如每一個廣告的實時ctr,廣告跟性別交叉的ctr。如何從這麼多的特徵中選擇到能刻畫一我的對一個廣告的興趣的特徵,是數據挖掘工程師的一個大難題。
選中了特徵,還須要注意特徵的選擇方式,例如,若是單獨把年齡做爲一個特徵,最終能訓練出來啥嗎?由於年齡相加相減是沒有意義的,因此只能把每一個年齡作爲一個特徵,可是光這樣能夠了嗎?怎麼用特徵,是廣告算法工程師的一個大課題。學習
1.1.1 選擇特徵優化
什麼樣的特徵適合用來預估ctr?這個問題是不少廣告算法工程師的須要考慮的。
機器學習算法最多會大談模型,對於特徵的討論不多涉及。真正的應用中,多數數據挖掘工程師的工做都是在想特徵,驗證特徵。
想特徵是一個腦力加體力的活,須要很多的領域的知識,更讓人鬱悶的是,工業界並無一整套想特徵的辦法,工業界有的只是驗證特徵的辦法。對於互聯網廣告業,就簡單說說通用特徵怎麼來的吧。
首先說年齡這個特徵,怎麼知道它跟點擊率有關係?如今直觀的解釋是,年輕人廣泛喜歡運動類的廣告,30歲左右的男人喜歡車,房子之類的廣告,50歲以上的人喜歡保健品的廣告。能夠看到,選擇年齡做爲特徵的理由是基於對各個年齡段的人喜歡的不一樣類型的東西的一個粗略的劃分,是一個很主觀的東西。
再說性別這個特徵,直觀的感受是,男性廣泛喜歡體育類的,車類的,旅遊類廣告,女性廣泛喜歡化妝品,服裝類的廣告。這也能夠看到,選擇性別做爲特徵也是基於類似的理由,就是認爲男性和女性大致會喜歡不一樣的東西。
對於地域這個特徵,這下就學問多了,華南的人在比較喜歡動漫和遊戲,華北的人喜歡酒品和煙?
在廣告方面的特徵,廣告的圖片大小,廣告前景色背景色真的能影響人的點擊嗎?這其實都是一種猜想。圖片裏面是一個明星仍是一個動物之類的因素也能夠考慮。.net
總結:選特徵的流程,就是先猜測,而後統計驗證,而後將特徵加到模型中,進行驗證。
總之,想特徵的這個事情基本沒多大譜,只能天南地北地想象,還要多瞭解各行各業的知識,以便想到更多的特徵,哪怕某個特徵跟人關係並不大,也得好好驗證一番。
想到了特徵,就要驗證和進行判斷。
驗證特徵的辦法多,有直接觀察ctr,卡方檢驗,單特徵AUC等。直接觀察ctr是個頗有效的方法,如根據投放記錄,化妝品的廣告在女性上面的點擊率就比在男性上面的點擊率高不少,說明性別這個特徵在化妝品行業是有預測能力的;又如體育用品的廣告在男性上面的點擊率也比女性高,說明性別這個特徵在體育行業也是有預測能力的,通過多個行業的驗證,就認爲性別這個特徵能夠用了。
年齡這個特徵的評估類型,主要是觀察一個廣告在不一樣年齡段的點擊率是否有區別,再觀察不一樣廣告的點擊率在不一樣年齡段的分佈是否不同,若是都有區別,說明年齡這個特徵就能夠用了。
在實際的使用中發現,性別這個特徵比較有效,手機平臺這個特徵也比較有效,地域和年齡這兩個特徵有必定效果,但沒有前兩個那麼明顯,跟他們的使用方式可能有關,還須要進一步挖掘。
同時,實際使用中也發現,廣告反饋ctr這個特徵也頗有效,這個特徵的意思就是當前的廣告正在投放,已經投放了一部分了,這部分的點擊率基本能夠認爲是這個廣告的點擊率了,也能夠認爲是這個廣告的質量的一個體現,用來預估一個流量的ctr是頗有效的。3d
1.1.2 特徵的處理和使用日誌
選擇獲得特徵,怎麼用也是一個問題。
先說需求,其實預估ctr要作的事情是下面的圖的工做——計算一個用戶/廣告組合的ctr。
blog
上面已經選好了特徵,暫定有廣告的反饋ctr,用戶年齡,性別三個特徵。
1、離散化,有些特徵雖然也是數值型的,可是該特徵的取值相加相減是沒有實際意義的,那麼該數值型特徵也要當作離散特徵,採用離散化的技術。
反饋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個特徵就是互斥的,這樣的特徵稱爲離散化特徵。
2、交叉,交叉從理論上而言是爲了引入特徵之間的交互,也即爲了引入非線性性。是有實際意義的。本文對交叉的意義解釋得很是nice
這樣看起來就能解決上面的問題了,可是夠了嗎?
好比一我的是20歲,那麼在編號爲2的特徵上面,它一直都是1,對籃球的廣告是1,對化妝品的廣告也是1,這樣訓練的結果獲得的編號爲2的權重的意義是——20歲的人點擊全部的廣告的可能性的都是這個權重,這樣實際上是不合理的。
有意義的應該是,這個20歲的人,當廣告是跟體育相關的時候,它是一個值;當廣告跟保健品相關的時候,它又是一個值。這樣看起來才合理。若是這個不夠深入,基於跟上面一樣的道理,性別這個特徵也是同樣的,假如也作了上面的離散化操做,編號是12和13,12是男性,13是女性。這樣的話,對於一個男性/體育廣告組合來講,編號12的特徵值爲1,男性/化妝品的組合的編號12的特徵值也是1。這樣也是不合理的。
怎麼作到合理呢?以上面的性別的例子來講。編號12的特徵值不取1,取值爲該廣告在男性用戶上面的點擊率,如對於男性/體育廣告的組合,編號12的特徵的值爲男性在體育廣告上面點擊率,這樣,編號爲12的特徵就變成了一個浮點數,這個浮點數的相加減是有意義的。
這樣的作法稱爲特徵的交叉,如今就是性別跟廣告的交叉獲得的特徵值。還有不少其餘的方式能夠進行交叉,目前工業上的應用最多的就是廣告跟用戶的交叉特徵(編號爲1的那個特徵)、廣告跟性別的交叉特徵,廣告跟年齡的交叉特徵,廣告跟手機平臺的交叉特徵,廣告跟地域的交叉特徵。若是作得比較多,可能會有廣告主(每一個廣告都是一個廣告主提交的一個投放計劃,一個廣告主可能會提交多個投放計劃)跟各個特徵的交叉。
3、連續特徵變離散特徵:連續特徵離散化的基本假設,是默認連續特徵不一樣區間的取值對結果的貢獻是不同的
作到的交叉的特徵值就足夠了嗎?答案仍是不必定。
如編號爲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的特徵與這個用戶對廣告的點擊的機率不是徹底的正相關性,有可能值越大特徵越重要,也有可能值增加到了必定程度,重要性就降低了。好比說,在區間[0.2%,0.3%]區間的係數就要比[0.3%,0.4%]的係數大。故,咱們若是將數值型特徵進行區間離散化,就是默認不一樣區間的權重是不同的。
對於這樣的問題,百度有科學家提出了對連續特徵進行離散化。他們認爲,特徵的連續值在不一樣的區間的重要性是不同的,因此但願連續特徵在不一樣的區間有不一樣的權重,實現的方法就是對特徵進行劃分區間,每一個區間爲一個新的特徵。經常使用作法,就是先對特徵進行排序,而後再按照等頻離散化爲N個區間
具體實現是使用等頻離散化方式: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》。