互聯網廣告系統綜述七特徵

互聯網廣告系統綜述七特徵

聲明:

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

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

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

4)閱讀本文需要互聯網廣告業的基礎(如果沒有也沒關係了,沒有就看看,當做跟同學們吹牛的本錢)。

5)此屬於第一版本,若有錯誤,還需繼續修正與增刪。還望大家多多指點。請直接回帖,本人來想辦法處理。


描述完系統,模型等方面,就到了花費互聯網廣告算法工程師的最大精力的點了,就是特徵工程,這是一個持久戰鬥的點。

流程複雜,而且各種機器學習的方法都可以在這裏用上,有效果,有產出,有指標。當然,玩砸的也不少,打擊總是很多的。

前面那麼多的工作,都可以在系統搭建完成後,變化都不會特別大,剩下還可以變化的,就是預估ctr的時候的那個x了,這個x就是由特徵組成,對ctr預估起到決定性作用的是選用的特徵。

下面就特徵工程的一些相關的點說一下。

特徵工程真是艱苦的戰役。包括想特徵,特徵生成,分析特徵,特徵加工,離線指標評估,線上效果評估,特徵上線等,中間夾雜着各種工作。

下面一一來說一下吧。

1.1想特徵

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

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

想特徵是一個腦力加體力的活,需要不少的領域的知識,更讓人鬱悶的是,工業界並沒有一整套想特徵的辦法,工業界有的只是驗證特徵的辦法。對於互聯網廣告業,就簡單說說通用特徵怎麼來的吧。

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

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

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

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

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

想到了特徵,就要分析、驗證和進行判斷。

 

1.2分析特徵

再說年齡這個特徵,怎麼知道它跟點擊率有關係?

只好去看看每個年齡段的人在各個廣告上面的表現,比如經過跑數據分析,發現20~30歲之間的男性用戶對車、房子之類的廣告點擊率比較高,而50歲以上的用戶對保健品的廣告點擊率比較高。這就有了區分性了,說明年齡這個特徵是對點擊率是有預測能力的。

再說性別這個特徵,去把每個性別對各個廣告的點擊率跑出來。根據結果,發現男性用戶體育類的,車類的廣告點擊率比較高;而女性用戶則對化妝品,服裝類的廣告點擊率比較高。這就說明了性別這個特徵對點擊率是有預測能力的,因爲有區分性。

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

實際使用中也發現,實時廣告ctr這個特徵也很有效,這個特徵的意思就是當前的廣告正在投放,已經投放了一部分了,這部分的點擊率基本可以認爲是這個廣告的點擊率了,也可以認爲是這個廣告的質量的一個體現,用來預估一個流量的ctr是很有效的。

 

1.3特徵加工

想到了特徵,分析過了,發現是有效的,就想直接上線?沒那麼容易,對於很多特徵來說,還是需要經過加工的,因爲很多特徵在加工後在線上的效果提升都很明顯(當然,沒加工過的特徵也能起到一定的效果,只是沒有發揮最大作用而已)。

特徵加工目前用到三個主要的工藝:二值化,交叉,平滑,離散化

1.3.1二值化

假設暫定有實時廣告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個特徵就是互斥的,這樣的特徵稱爲二值特徵。

對於性別來說也是,兩種性別,分別編號到12、13號特徵上就完成了二值化了。

1.3.2交叉

二值化看起來就能解決兩個特徵的差沒有意義的問題了,但是夠了嗎?

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

有意義的應該是,這個20歲的人,當廣告是跟體育相關的時候,它是一個值;當廣告跟保健品相關的時候,它又是另一個值這樣看起來才合理。

因爲特徵需要根據人和廣告的關係不斷變化,才能使得一個人對不同的廣告預估出不同的ctr來,如果特徵不能跟着廣告變化,那麼一個用戶對所有廣告都預估出同一個值來,也是不行的。

基於跟上面同樣的道理,性別這個特徵也是一樣的,假如也做了上面的離散化操作,編號是12和13,12是男性,13是女性。這樣的話,對於一個男性/體育廣告組合來說,編號12的特徵值爲1,男性/化妝品的組合的編號12的特徵值也是1。這樣也是不合理的,主觀看過去都不合理。

怎麼做到合理呢?以上面的性別的例子來說。編號12的特徵值不取1,取值爲該廣告在男性用戶上面的點擊率,如對於男性/體育廣告的組合,編號12的特徵的值爲男性在體育廣告上面點擊率,這樣,編號爲12的特徵就變成了一個浮點數,這個浮點數的相加減是有意義的,這個浮點數的值越大,意味着這個性別的用戶對該廣告越感興趣。這樣過後,同一個用戶,對不同的廣告主,編號爲12的位置的值都不一樣了。而且這樣可以不用編號爲13的特徵了,直接拿性別/廣告的組合的點擊率作爲編號12的特徵的值,兩種性別都考慮到了。其實也就是說,經過組合後,年齡和性別各自又變回了一個特徵,這個特徵的值會隨着不同的廣告變化的,這個值跟廣告有關。

這樣的做法稱爲特徵的交叉,現在就是性別跟廣告的交叉得到的特徵值。還有很多其他的方式可以進行交叉,目前應用起來效果比較好的就是廣告跟性別的交叉特徵,廣告跟年齡的交叉特徵,廣告跟手機平臺的交叉特徵,廣告跟地域的交叉特徵。如果做得比較多,可能會有廣告主(每個廣告都是一個廣告主提交的一個投放計劃,一個廣告主可能會提交多個投放計劃)跟各個特徵的交叉。

 

1.3.3平滑

經過上面的處理,很多特徵變成了交叉的特徵,而且特徵值是一個廣告過去一段時間的點擊率(ctr)。

這個值是一個浮點數,計算的方式是交叉特徵下的歷史點擊數/歷史展示數,用字母表達是click/pv。

這個往往是很多問題的,如廣告只投放了一次,就被點擊了一次,點擊率就是100%了,這個值是相當大的,只是肯定不可信,因爲點擊率一般百分之幾就不得了了;又比如廣告投放了100次,點擊了1次,點擊率1%,這樣又可信了嗎?假如pv爲0呢?難道點擊率就無窮大?

關於這個問題雅虎出了個paper,能很好地解決這個問題,是用貝葉斯學派的方法的。

首先兩個假設。

假設一,所有的廣告有一個自身的ctr,這些ctr服從一個Beta分佈。

假設二,對於某一廣告,給定展示次數時和它自身的ctr,它的點擊次數服從一個伯努利分佈 Binomial(I, ctr)。

如果用r表示點擊率,I表示展示,C表示點擊。這兩個假設可以用下面的數學表示。


根據這兩個假設,假如已經有了很多個廣告投放數據,I1,C1,I2,C2……In,Cn,就可以根據這些投放數據列出似然函數


求解這個極大似然問題,得到兩個參數alpha和beta,然後每個廣告的點擊率就可以利用這兩個參數計算後驗ctr(平滑ctr)了,公式如下:

r=(C + alpha) / (I + alpha + beta)

有了這個技術,上面說的那些交叉特徵的特徵值都用這個技術平滑了一下,就避免了出線1.0或者正無窮這種這麼病態的特徵值,因爲一般都是很小的特徵值。

事實證明,平滑技術很有效。

 

1.3.4離散化

假設還是實時廣告ctr,用戶年齡,性別三個特徵,經過上一次交叉和平滑,現在得到了3個特徵值,實時廣告ctr編號爲1,年齡與廣告交叉特徵編號爲2,性別與廣告交叉特徵編號爲3。現在就三個特徵了了。

這三個特徵直接訓練logisticregression模型,可以嗎?可以的,但是線上效果並不好。爲啥?這倒是個問題。看看下面的解釋。

如編號爲1的那個特徵,就是廣告實時的ctr,假設互聯網廣告的點擊率符合一個長尾分佈,叫做對數正態分佈,其概率密度是下圖(注意這個是假設,不代表真實的數據,從真實的數據觀察是符合這麼樣的一個形狀的,好像還有雅虎的平滑的那個論文說它符合beta分佈)。


對於不同檔次的點擊率來說,重要程度是不一樣的,比如在接近對數正態分佈的那個拱附近(0.2%左右)的點擊率,由於這類型的情況比較多,重要程度並不高,特徵的權重需要小一點;但是對於接近那個長尾的那些點擊率來說,這種情況比較少,重要程度高,特徵的權重也應該大一點。下面是重要程度分佈圖。


如果直接用ctr的那個浮點值作爲特徵,訓練後,對這個特徵,只有一個權重,沒辦法把重要程度區分開來,所以效果不好。

當然,點擊率與重要程度不一定是完全的正相關性,有可能值越大特徵越重要,也有可能值增長到了一定程度,重要性就下降了。這樣的就是非線性的情況,利用一個線性的方式去擬合,效果自然打折扣。

解決的方法就是把ctr那個浮點值離散化。

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

具體實現是使用等頻離散化方式: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個特徵。

另外的兩個交叉ctr也是用這樣的方式離散化成了10個特徵,那樣總共就有了30個特徵。訓練的結果w就會是一個30維的向量,分別對應着30個特徵的權重。

實際的應用表明,離散化的特徵能擬合數據中的非線性關係,取得比原有的連續特徵更好的效果,而且在線上應用時,無需做乘法運算,也加快了計算ctr的速度。

 

1.4離線指標評估

特徵想到了,分析完了,加工過了,就需要出些跟線上應用相關的東西流量,就是離線指標。

離線指標可以先評估單特徵AUC,就是根據這個特徵的取值情況,就是前面離散化之前的那個浮點值,跟真實的點擊數據組合成一對數據,去計算AUC,如果AUC大於0.6,就已經算是一個很不錯的特徵了;如果很接近0.5,說明識別能力不強,還要繼續加工或者放棄。

爲了跟線上情況一致,要做的事情就是跟線上目前情況一樣,先訓練一個模型,再把測試樣本經過模型,得到一堆預估的ctr,再根據這些ctr很真實點擊情況對比,計算一些指標。

評估模型效果的方法有很多,主要有以下兩個:

1. AUC,從排序的角度評估模型預估效果;

2. MAE(Mean Absolute Error)/MSE(Mean Squared Error),從準確率的角度評估模型預估效果;

AUC在其他的博文裏面詳細描述了,主要比較正負樣本的序關係。

MAE就是看預估的ctr與真實的ctr的差的情況,估得越準確越小,MSE同理。

 

1.4線上效果評估

離線評估完後,只是對這個特徵有了個期待,但是決定特徵能否上線的還是在線的A/B Test,即隨機選取兩部分線上同質流量,一部分用基準模型A進行實際投放,一部分用加了新特徵的模型B進行投放。如果後者對在線業務指標(如點擊率、千次展現收益等)有正向效果,就認爲是好模型,特徵就是好特徵,這個特徵就可以上線了。

 

1.5特徵上線

在A/B Test過程中,的如果模型B業務指標一直比模型A好,模型B就可以全量上線了,這樣,新特徵也全量上線了。到這,一個特徵的上線過程就描述完了

新的業務策略上線同樣也是用這種方法。

 

 

1.6特徵生成

在前面說特徵生成的時候,還是挺靠前的,但是爲了描述的流暢性,就放到了最後。

前面一直在說想特徵,分析,加工啥的,就是沒有說一個事情,特徵怎麼從離線數據中獲取。其實不是這個工作不重要,而是這個工作又雜又繁瑣。

一、先說實時廣告ctr吧,其實這個是整整一個項目的結果。

步驟如下:

1、廣告投放平臺投放廣告,結算系統產生投放日誌和點擊日誌。

2、日誌發送到收集系統。

3、實時計算程序實時讀取日誌,解析,獲取其中的廣告信息。

4、按照時間窗口進行統計pv,click。

5、寫入線上存儲器提供讀取。

6、線上實時進行加工。

二、再說交叉特徵

對於性別/廣告主交叉特徵。

這個也要根據實時的投放日誌,根據用戶id,從日誌/數據倉庫獲取用戶性別,再統計每個廣告主在每個性別上的點擊率,可以經過一些加工,寫入線上存儲器供線上程序讀取。

上面兩點,看起來簡簡單單幾句話,卻跨域了4個部門,需要各種的溝通合作,才能得到線上的數據。廣告投放平臺與結算系統,日誌收集與實時計算,線上存儲器,分別是由三個部門提供的服務。完成這些工作需要大量的溝通工作。

數據生成後驗證正確性是很耗時間的,因爲只能在某個時間點讀出來,再根據日誌裏面時間戳去統計,兩個對比,看看數據是否正確。

驗證工作耗費比較大的精力,還要比較多的精力去調試,保證整個項目各個模塊的穩定。還要根據其他一些數據建立數據監控。

特徵工程還會遭遇其他方面的問題,如某個系統出問題,如結算系統,發送日誌錯誤了,重複發送了,就會導致數據監控方面的報警。還容易遇到的問題是,線上存儲器空間不足,導致有些特徵導入失敗,線上使用也出了問題等等。一時半會是說不完的,工程上的問題也會困擾算法的優化工作。

用linkin的ppt上的一頁來說吧。


大致情況就是這樣了。

一旦搭上特徵工程這個賊船,就沒得脫身的了。

沒見到哪個書好好描述一下這個情況:數據不光變化,還是不穩定的變化,隨時出現的髒數據讓人猝不及防。

模型不斷在更新,但是要選擇一個好的模型,也是非常難的,有時候得人工介入。上面那頁PPT真是“滿紙荒唐言,一把辛酸淚”。不是身在其中,又如何體會費老大的勁搞出來的一個特徵,在線上怎麼都沒有產生預期的效果,各種扒拉日誌與分析;一個月也看不到什麼像樣的指標提升的尷尬事更是屢見不鮮。

 

 

致謝

多位互聯網博主如@Rickjin等。

多位Linkedln研究員無私公開的資料。

 

參考文獻

[1] ComputationalAdvertising: The LinkedIn Way. Deepak Agarwal, LinkedIn Corporation CIKM

[2] http://www.flickering.cn/uncategorized/2014/10/%E8%BD%AC%E5%8C%96%E7%8E%87%E9%A2%84%E4%BC%B0-2%E9%80%BB%E8%BE%91%E5%9B%9E%E5%BD%92%E6%8A%80%E6%9C%AF/騰訊的廣點通的技術博客《邏輯迴歸技術》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章