天天看點

常見計算廣告點選率預估算法總結

導語: 本文讨論了CTR預估模型,包括工業界使用比較廣的比較經典模型和學術界最新的結合DeepLearning的一些工作。

談到CTR,都多多少少有些了解,尤其在網際網路廣告這塊,簡而言之,就是給某個網絡服務使用者推送一個廣告,該廣告被點選的機率,這個問題難度簡單到街邊算命随口告訴你今天适不适合娶親、适不适合搬遷一樣,也可以複雜到拿到各種諸如龜殼、銅錢等等家夥事,在沐浴更衣、淨手煴香後,最後一通預測,發現完全扯淡,被人暴打一頓,更有甚者,在以前關系國家危亡、異或争國本這種情況時,也通常會算上一卦,國家的興衰、。其實CTR和這個一樣,以前經常和小夥伴吐槽,其實做機器學習、無論是推薦還是計算廣告,都和以前的算命先生沒什麼差别,做的好的官至國師,不好的吃不了飽飯也是有的。要想把你CTR模型做的好好的,必須要先了解那些前輩們都是怎麼玩的。

一個典型的CTR流程如下圖所示:

常見計算廣告點選率預估算法總結

如上圖,主要包括兩大部分:離線部分、線上部分,其中離線部分目标主要是訓練出可用模型,而線上部分則考慮模型上線後,性能可能随時間而出現下降,弱出現這種情況,可選擇使用Online-Learning來線上更新模型:

· 資料收集:主要收集和業務相關的資料,通常會有專門的同僚在app位置進行埋點,拿到業務資料;

· 預處理:對埋點拿到的業務資料進行去髒去重;

· 構造資料集:經過預處理的業務資料,構造資料集,在切分訓練、測試、驗證集時應該合理根據業務邏輯來進行切分;

· 特征工程:對原始資料進行基本的特征處理,包括去除相關性大的特征,離散變量one-hot,連續特征離散化等等;

· 模型選擇:選擇合理的機器學習模型來完成相應工作,原則是先從簡入深,先找到baseline,然後逐漸優化;

· 超參選擇:利用gridsearch、randomsearch或者hyperopt來進行超參選擇,選擇在離線資料集中性能最好的超參組合;

· 線上A/B Test:選擇優化過後的模型和原先模型(如baseline)進行A/B Test,若性能有提升則替換原先模型;

· Cache & Logic:設定簡單過濾規則,過濾異常資料;

· 模型更新:當Cache & Logic收集到合适大小資料時,對模型進行pretrain+finetuning,若在測試集上比原始模型性能高,則更新model server的模型參數;

· Model Server:接受資料請求,傳回預測結果;

最簡單的模型也應該是工業界應用最廣的方法,Logistic Regression算法簡單易于調參,屬于線性模型,原理如下圖:

常見計算廣告點選率預估算法總結

将CTR模型模組化為一個分類問題,利用LR預測使用者點選的機率;通常我們隻需要離線收集好資料樣本構造資料集,選擇好合适的特征空間,離線訓練好模型,測試在離線資料集上的性能之後,即可上線,也可以适應資料分布随時間突變嚴重的情況,采用online-learning的政策來對模型進行相對頻繁的更新,模型的簡單能夠保證這部分的需求能夠得到保障。

LR優點是簡單高效,缺點也很明顯,它太簡單,視特征空間内特征之間彼此獨立,沒有任何交叉或者組合關系,這與實際不符合,比如在預測是否會點選某件t恤是否會點選,如果在夏天可能大部分地區的使用者都會點選,但是綜合季節比如在秋天,北方城市可能完全不需要,是以這是從資料特征次元不同特征之間才能展現出來的。是以,必須複雜到能夠模組化非線性關系才能夠比較準确地模組化複雜的内在關系,而PLOY2就是通過特征的二項式組合來模組化這類特征的複雜的内在關系,二項式部分如下圖公式:

常見計算廣告點選率預估算法總結

然而理想是美好的,現實卻是殘酷的,PLOY2有一個明顯的問題,就是在實際場景中,大部分特征都是稀疏的,即大部分特征值為0,對這些稀疏的特征做二項式組合,會發現最後大部分特征值都是0,而在梯度更新時,當大部分feature為0時,其實梯度并不更新,是以PLOY2的方法在實際場景中并不能比較好地解決這類特征組合來模組化更複雜線性關系的問題。

上面PLOY2雖然理論上能夠模組化二項式關系,但是在實際場景下稀疏資料時,無法使用,而FM就是為了解決這裡PLOY2的短闆的,FM的基本原理是将這些二項式矩陣做矩陣分解,将高維稀疏的特征向量映射到低維連續向量空間,然後根據内積表示二項式特征關系:

常見計算廣告點選率預估算法總結

複雜度為$O(kn^2)$,作者提出了一種簡化的算法:

常見計算廣告點選率預估算法總結

将複雜度簡化為$O(kn)$ 然後就是SGD來更新模型參數,使模型收斂(這裡還有很多其他替代SGD的方法,在FFM中有提到):

常見計算廣告點選率預估算法總結

訓練時間複雜度也是$O(kn)$,也就是線性時間,FM通過對二項式稀疏進行低維連續空間的轉換,能夠有效地解決PLOY2中存在的二次項系數在大規模系數資料下不更新的問題,另外由于訓練預測複雜度均為線性,PLOY2+SVM這樣邏輯下由于要計算多項式核,複雜度是n^2,由于FM的這幾個特征,在實際場景中,FM也大規模的應用在CTR中,尤其是在資料極其系數的場景下,FM效果相對于其他算法有很明星的改善。

FMM全程是 Field-aware FactorizationMachine,相對于FM增加了Field資訊,每個特征屬于一個field,舉個例子:

常見計算廣告點選率預估算法總結

而相對于FM,隻有Feature_index相同個數的低維連續表示,而FFM則不同,每一個feature對不同的field有不同的表示,是以有#Field_index*#Feature_index個不同的表示:

常見計算廣告點選率預估算法總結

通常由于每個低維隐變量表示隻學習特定field的表示,是以FFM的隐變量長度相對于FM的隐變量次元要小的多。FFM的優化問題相對其比較簡單,可以看看FFM這篇paper,裡面比較詳細地描述優化過程,還有相關的僞代碼

https://www.andrew.cmu.edu/user/yongzhua/conferences/ffm.pdf

從12年在ImageNet上深度學習超過經典模型之後,在計算機視覺、語音、NLP都有很多相關的工作,而在CTR上,深度學習的模組化能力也有一些應用,FNN和SNN就是其中的一些嘗試,來源于Deep Learning over Multi-field Categorical Data – A Case Study on User Response Prediction,這裡稍微描述下相關的做法:

常見計算廣告點選率預估算法總結

網絡底層由FM來進行參數初始化,W的元素由FM中的低維連續空間向量表示來做初始化:

常見計算廣告點選率預估算法總結

而構成W的低維連續空間向量表示預先由FM在資料集上生成,模型在訓練過程中,會通過BP來更新FM層參數,其他步驟和常見的MLP沒有什麼差別,這裡重點就是底層如何介入FM層參數的問題;

CCPM利用卷積網絡來做點選率預測,看了文章,沒有太明白其中的是以然,貼下網絡結構的圖吧:

常見計算廣告點選率預估算法總結

有弄清楚這篇文章的小夥伴可以讨論下。

PNN主要是在深度學習網絡中增加了一個inner/outer product layer,用來模組化特征之前的關系,如下圖,Product layer部分Z是weightfeature,P部分weightI(feature_i,feature_j)用來模組化二項式關系:

常見計算廣告點選率預估算法總結

PNN按product層的功能分為inner product layer和outer product layer,差別如下:

常見計算廣告點選率預估算法總結

和FM類似,構造好網絡之後,對輸入資料做embedding處理之後得到低維的連續向量表示,經過任意兩個feature的進行inner product or outer product(1也為feature的一部分,是以可以模組化線性關系),這裡很容易發現,這部分特征大小會變大很多(二次項數量級),尤其是稀疏空間,和PLOY2遇到的問題類似,變得很難訓練,受FM啟發,可以把這個大矩陣轉換矩陣分解為小矩陣和它的轉置相乘,表征到低次元連續向量空間,來減少模型複雜度:

常見計算廣告點選率預估算法總結

DeepFM更有意思的地方是WDL和FM結合了,其實就是把PNN和WDL結合了,PNN即将FM用神經網絡的方式構造了一遍,作為wide的補充,原始的Wide and Deep,Wide的部分隻是LR,構造線性關系,Deep部分模組化更高階的關系,是以在Wide and Deep中還需要做一些特征的東西,如Cross Column的工作,而我們知道FM是可以模組化二階關系達到Cross column的效果,DeepFM就是把FM和NN結合,無需再對特征做諸如Cross Column的工作了,這個是我感覺最吸引人的地方,其實FM的部分感覺就是PNN的一次描述,這裡隻描述下結構圖,PNN的部分前面都描述, FM部分:

常見計算廣告點選率預估算法總結

Deep部分:

常見計算廣告點選率預估算法總結

DeepFM相對于FNN、PNN,能夠利用其Deep部分模組化更高階資訊(二階以上),而相對于Wide and Deep能夠減少特征工程的部分工作,wide部分類似FM模組化一、二階特征間關系,算是NN和FM的一個更完美的結合方向,另外不同的是如下圖,DeepFM的wide和deep部分共享embedding向量空間,wide和deep均可以更新embedding部分,雖說wide部分純是PNN的工作,但感覺還是蠻有意思的。

常見計算廣告點選率預估算法總結

其他的一些方法

GBDT+LR:Facebook提出利用GBDT探索海量特征空間的特征組合,減少特征工程工作量,性能很好;

MLR:阿裡媽媽前端時間提出的一種增強LR模型,将region的劃分考慮進去來模組化非線性關系,感覺類似于深度學習的Attention機制,據說在阿裡媽媽相關業務提升很多;

前面讨論了一些CTR常見的方法,重點介紹了Factorization Machine及其變種Field-Aware Factorization Machine,還有和深度學習的結合,個人感覺PNN的邏輯比較有意思,完全使用神經網絡的思維模型重塑了FM,為後面DeepFM擴充wide and deep的工作打下基礎,減少了wide and deep中需要的一些基本的特征工程工作(wide部分二次項工作),上面隻是涉及到模型的算法部分,在實際中可以去探讨,并不能說明一定性能就好,另外由于架構的限制,綜合考慮其他方面的因素,如請求時間、模型複雜度,也是最終是否采用相關算法的考慮因素,各位對此有興趣讨論的小夥伴,歡迎回複讨論。