策略產(chǎn)品經(jīng)理必讀系列—搜廣推業(yè)務(wù)中如何對預(yù)估CTR進(jìn)行校準(zhǔn)
搜廣推三大業(yè)務(wù)場景中都需要CTR預(yù)估模型,并基于模型預(yù)估的Pctr對內(nèi)容進(jìn)行排序。但我們又該在搜廣推業(yè)務(wù)中如何對預(yù)估CTR進(jìn)行校準(zhǔn)?本文作者總結(jié)了相關(guān)流程,希望對你有所幫助。
一、CTR預(yù)估的保序與保距
搜廣推三大業(yè)務(wù)場景中都需要CTR預(yù)估模型,基于模型預(yù)估的Pctr(Predicted CTR)對內(nèi)容進(jìn)行排序。但不知道各位讀者有沒有思考過一個問題:用戶對于某個內(nèi)容的單次點擊概率真的是可以被預(yù)估的嘛?
因為在現(xiàn)實生活中,用戶對于內(nèi)容的興趣度最終反饋的結(jié)果只有“點擊”和“不點擊”,并沒有反饋是在多大概率的情況下點擊的。實際工作中我們統(tǒng)計的Actr(Actual CTR),并不是單次的的CTR,而是在大數(shù)統(tǒng)計的維度上,將該內(nèi)容曝光給大量用戶以后,統(tǒng)計了所有用戶對該內(nèi)容的點擊情況,然后得到的一個CTR大數(shù)統(tǒng)計值。
無法構(gòu)建一個CTR預(yù)估回歸模型,只能退而求其次構(gòu)建一個二分類模型。
實際情況導(dǎo)致在CTR預(yù)估中,我們無法構(gòu)建一個回歸模型去擬合用戶對于每個物料的預(yù)估CTR,只能通過用戶實際反饋的“點擊”和“不點擊”來構(gòu)建一個二分類模型,然后將分類模型對于正樣本的概率預(yù)估值近似地視為CTR預(yù)估值。
我們在對CTR預(yù)估模型做離線評估時,針對CTR預(yù)估模型主要看的是AUC指標(biāo),AUC指標(biāo)是衡量模型的排序能力,是模型將正樣本排序在負(fù)樣本前的概率。如果該場景僅僅只是使用CTR預(yù)估模型返回的Pctr來對內(nèi)容進(jìn)行排序,那么CTR預(yù)估模型只要能保證順序的準(zhǔn)確性即可,也就是保序能力,具體Pctr和真實點擊率之間絕對值的差異有多大,其實影響不大。
但目前搜廣推三大業(yè)務(wù)場景中,實際都用到了Pctr的絕對值。在搜推業(yè)務(wù)的排序公式中,Pctr是作為一個排序因子。而在廣告業(yè)務(wù)中Pctr的準(zhǔn)確性將直接影響廣告收益。
如上圖所示,模型1和模型2分別對A、B、C三個不同的內(nèi)容進(jìn)行CTR預(yù)估并進(jìn)行排序,雖然模型1和模型2對于內(nèi)容的排序順序都是正確的,但是很明顯模型2預(yù)估的Pctr和內(nèi)容實際的Actr更接近。如果從離線AUC指標(biāo)上來說模型1和模型2的AUC是完全一樣的,但很明顯模型2的預(yù)估效果是要優(yōu)于模型1的。如果模型本身只是將內(nèi)容進(jìn)行排序,那么模型1和模型2達(dá)到的效果是一樣的,但是在廣告業(yè)務(wù)中確不是。
如上圖所示,在廣告業(yè)務(wù)中以點擊來進(jìn)行扣費,假設(shè)內(nèi)容A、B和C分別對應(yīng)的點擊收益是2元、3元、4元。廣告業(yè)務(wù)中的物料排序是以eCPM來排序,eCPM = CTR * Bid(出價)* 1000。 如果以Actr為準(zhǔn),實際廣告收益應(yīng)該是B > A > C,這也是最終的理想排序。模型2的排序結(jié)果就是和理想排序一致的,但是模型1的排序結(jié)果是C > B > A。雖然模型1和模型2對于物料的CTR預(yù)估排序順序是一樣的,都是A > B > C。但是實際應(yīng)用時結(jié)合了其他業(yè)務(wù)指標(biāo)后,模型1的效果就不如模型2了,根本原因還是模型1對于CTR的預(yù)估和實際后驗CTR之間的差距太大。
所以模型在進(jìn)行CTR預(yù)估時,不僅僅要保序還需要保距。 既要保證排序的準(zhǔn)確性,又要保證具有一定區(qū)分度,且區(qū)分度最好要無限接近真實水平之間的差異值。
但是實際CTR模型預(yù)估時總會和真實的概率值存在一定偏差,所以目前在互聯(lián)網(wǎng)公司搜廣推業(yè)務(wù)里都會有CTR糾偏模塊,專門去對CTR預(yù)估模型給出的Pctr值進(jìn)行再一次糾偏。糾偏技術(shù)的目標(biāo)就是將用戶行為的預(yù)估值盡可能逼近真實概率值。這里讀者可能會疑問,上文介紹單次真實點擊概率是沒法被觀測到,那么我們應(yīng)該以什么為標(biāo)準(zhǔn)來進(jìn)行糾偏了。目前行業(yè)里面統(tǒng)一用大數(shù)統(tǒng)計維度的后驗CTR來作為糾偏標(biāo)準(zhǔn),但是這里的后驗CTR統(tǒng)計是有技巧的,本文第三部分我們展開介紹。
二、CTR差異產(chǎn)生原因
在我們介紹CTR糾偏方法前,我們需要先了解預(yù)估CTR(Pctr)和真實CTR(Actr)之間的差異是怎么產(chǎn)生的。只有弄清楚差異產(chǎn)生原因才能更好地去調(diào)整模型和對結(jié)果進(jìn)行糾偏。CTR差異一般有以下兩個原因:
1. 模型訓(xùn)練中正負(fù)樣本有偏采樣導(dǎo)致的
CTR預(yù)估模型訓(xùn)練時,我們一般以實際的點擊曝光日志來作為訓(xùn)練樣本,曝光且點擊數(shù)據(jù)為正樣本,曝光未點擊數(shù)據(jù)為負(fù)樣本。但實際點擊數(shù)據(jù)會比較稀疏,點擊和未點擊的數(shù)據(jù)比例可能在1:100或1:1000。模型訓(xùn)練時針對點擊數(shù)據(jù),模型需要全量學(xué)習(xí)的。但是因為曝光未點擊數(shù)據(jù)量太大,實際訓(xùn)練時我們會進(jìn)行隨機采樣,控制正負(fù)樣本的比例在1:10左右。因為正負(fù)樣本比例和實際真實數(shù)據(jù)分布存在差異,最終模型對于CTR的預(yù)估會比較接近訓(xùn)練數(shù)據(jù)集中正負(fù)樣本的分布,CTR平均值會在10%左右。
可能有讀者會疑惑,既然有偏采樣會導(dǎo)致CTR的差異,那么能不能不有偏采樣,直接使用全部數(shù)據(jù)來進(jìn)行訓(xùn)練。部分業(yè)務(wù)場景下是可以這么做的。但如果部分業(yè)務(wù)場景下負(fù)樣本數(shù)據(jù)過于龐大,導(dǎo)致模型訓(xùn)練時間很長,算力消耗很大,這時候不得不丟棄一些負(fù)樣本。
2. 模型構(gòu)建本身就不可能完美
除了有偏采樣,模型構(gòu)建本身就不可能完美。無論是特征選擇還是神經(jīng)網(wǎng)絡(luò)搭建,各個部分一定都會存在某些不完美的地方,最終模型預(yù)估出來的Pctr就會和真實點擊概率存在一定偏差。只有不同模型可能偏差大小不一樣,但是一定都會有偏差。
三、CTR糾偏的方法
那么實際工作中如何對CTR進(jìn)行糾偏了?一般我們有以下兩大類方法:基于先驗知識的調(diào)整和后處理方法CTR校準(zhǔn),下面我們分別展開介紹。
1. 基于先驗知識的調(diào)整
針對已知可能導(dǎo)致CTR有偏的因素,在模型構(gòu)建和訓(xùn)練時就提前反向引入特征處理或者對損失函數(shù)進(jìn)行調(diào)整,端到端來優(yōu)化Pctr。這種方法在于我們得提前知道哪些因素可能會導(dǎo)致CTR有偏,不過我們即使做了基于先驗知識的調(diào)整,最終Pctr肯定還會存在偏差,因為模型不可能完美。因此也就引出下面第二種CTR糾偏的方法:后處理方法。
2. 后處理方法CTR校準(zhǔn)
基于后處理方法的CTR校準(zhǔn),首先在系統(tǒng)架構(gòu)上需要單獨加一個校準(zhǔn)模塊,將CTR預(yù)估和CTR校準(zhǔn)完全解耦開。此種方式更加靈活即插即用?;谙闰炛R的端到端的優(yōu)化方式,整體周期太長,無法快速響應(yīng)線上環(huán)境的劇烈變化,尤其是在大促期間線上環(huán)境變化非常頻繁,我們需要更加輕便靈敏的模型校準(zhǔn)能力,此時后處理方法就很適合。
后處理方法都是基于后驗CTR來進(jìn)行校準(zhǔn),前面也提到了單次真實點擊概率不可被觀測,那么我們只能使用后驗CTR來代替真實點擊概率進(jìn)行校準(zhǔn)。這里就衍生出一個新問題,如何去統(tǒng)計后驗CTR。讀者可能覺得這很簡單,直接統(tǒng)計推薦內(nèi)容的點擊曝光次數(shù)然后進(jìn)行計算。這種統(tǒng)計方法會導(dǎo)致單個內(nèi)容的CTR是一個統(tǒng)一的值,原本不同用戶對于該內(nèi)容的興趣度應(yīng)該是不一樣的,但是現(xiàn)在變成了千人一面。我們需要統(tǒng)計后驗CTR,但是后驗CTR的統(tǒng)計卻很有技巧。
如何統(tǒng)計后驗CTR(Actr)
目前行業(yè)里通用的做法一般是以請求PV為基本維度,將各類特征相似的請求PV劃分為一個簇,然后統(tǒng)計該簇的后驗CTR作為所有劃分到該簇里面PV的真實點擊概率。這里我們認(rèn)為特征相似的請求對應(yīng)的用戶行為也會比較類似,CTR上的表現(xiàn)也會比較一致。按照特征相似性我們可以將請求分為K個簇,分別統(tǒng)計每個簇的CTR。K不能太大,否則單個簇里面的數(shù)據(jù)就會很稀疏,我們需要保證單個簇內(nèi)的數(shù)據(jù)量是置信的,當(dāng)數(shù)據(jù)小于某一個閾值時我們就需要進(jìn)行簇之間的合并。
當(dāng)我們統(tǒng)計出Actr后,我們就可以基于Actr進(jìn)行Pctr的糾偏了。下面介紹行業(yè)里比較常見的兩種方法:
方法一:基于負(fù)樣本采樣率調(diào)整CTR
本文Part2里面提到預(yù)估CTR存在偏差一部分原因是因為正負(fù)樣本有偏采樣導(dǎo)致的,所以CTR校準(zhǔn)中一種方法是基于負(fù)樣本采樣率來調(diào)整CTR。Facebook公開的論文《Practical Lessons from Predicting Clicks on Ads at Facebook》里面提到一種基于負(fù)采用率來進(jìn)行CTR糾偏的計算公式,計算公式如下:
同時該論文還提到在Facebook的實際業(yè)務(wù)應(yīng)用中負(fù)采樣率為0.025時效果最好。
方法二:保序回歸
保序回歸法目前是業(yè)界最常用的校準(zhǔn)方法。常見的算法是保序回歸平滑校準(zhǔn)算法(Smoothed Isotonic Regression,SIR)。整體執(zhí)行步驟如下:
Step1—區(qū)間分桶
首先將Pctr值從小到大進(jìn)行排序,然后按照區(qū)間分為K個桶。假設(shè)我們分為100個桶:(0,0.01], (0.01,0.02], (0.02,0.03],…, (0.99,1]。這里我們認(rèn)為精排模型給出的Pctr值是具有參考意義的,同一個區(qū)間里的PV請求具有近似的真實點擊率,每一個區(qū)間可作為一個合理的校準(zhǔn)維度(分簇維度)。然后實際應(yīng)用時,我們再統(tǒng)計每一個桶里的后驗CTR值。比如今天線上一共有1000次預(yù)估的Pctr落在了桶 (0.02,0.03]之間,然后我們統(tǒng)計這1000個預(yù)估的后驗CTR,假設(shè)后驗CTR為0.23%。關(guān)于每個桶里Pctr和Actr平均值的計算公式如下:
Step2—桶間合并
如果說后驗CTR的值超出了對應(yīng)分桶的PCTR取值區(qū)間怎么辦?假如原本分桶在(0.02,0.03]之間結(jié)果的后驗CTR為0.35%,這時已經(jīng)進(jìn)入到了下一個桶里了(0.03,0.04]。如果我們將原本Pctr在(0.02,0.03]桶里面的值往下一個桶里的區(qū)間值進(jìn)行校準(zhǔn),這就破壞了原有桶之間的順序,保序回歸的基本邏輯是不能破壞原有Pctr的順序。此時我們需要把(0.02,0.03]和(0.03,0.04]桶進(jìn)行合并得到新的桶(0.02,0.04],再重新對落入兩個桶里的數(shù)據(jù)進(jìn)行后驗CTR統(tǒng)計,得到新桶里面的 Actr和Pctr平均值。我們以Pctr為x軸,Actr為y軸,最終得到一個如下圖所示單調(diào)遞增的散點圖:
Step3—桶間插值分段校準(zhǔn)
我們需要基于上述散點圖去構(gòu)造一個校準(zhǔn)函數(shù),輸入x值以后就可以輸出校準(zhǔn)后的y值。如果直接擬合一個y = kx + b函數(shù),最終預(yù)估的結(jié)果不夠平滑。目前業(yè)界的標(biāo)準(zhǔn)做法都是構(gòu)造分段校準(zhǔn)函數(shù)。
如上圖所示,我們將兩個桶之間坐標(biāo)點連接起來,然后去構(gòu)造一個分段的y = kx + b校準(zhǔn)函數(shù),假設(shè)Pctr一共分為了100個桶,那么最終就構(gòu)造100個分段校準(zhǔn)函數(shù),這樣既保證單調(diào)性,又保證平滑地校準(zhǔn)。分段的校準(zhǔn)函數(shù)如何得出,這里就是基礎(chǔ)的初中數(shù)學(xué)知識,已知兩點坐標(biāo)計算對應(yīng)的y = kx + b。
保序回歸法的整體思想就是:不改變原有數(shù)據(jù)的Pctr排序,僅在原有Pctr的排序上進(jìn)行糾偏。最終糾偏出來的CTR數(shù)據(jù)分布的單調(diào)性不變,AUC指標(biāo)不變。
本身因為特征選擇和樣本采樣導(dǎo)致的CTR偏差,需要基于先驗知識的特征調(diào)整和基于負(fù)樣本采樣率的方法來對CTR進(jìn)行糾偏。如果精排模型輸出的Pctr和Actr差異很大,這種是無法依靠校準(zhǔn)模塊來進(jìn)行糾偏的。
3. 校準(zhǔn)評價指標(biāo)
當(dāng)我們使用上述的方法對CTR進(jìn)行糾偏以后,我們使用什么指標(biāo)來評估糾偏效果的好壞了?一般我們使用PCOC和Calibration-N兩大指標(biāo)。
PCOC(Predict Click Over Click)
PCOC = Pctr / Actr
PCOC指標(biāo)越接近于1,意味著CTR預(yù)估的越準(zhǔn)確。PCOC > 1,則代表CTR被高估;PCOC < 1,則代表CTR被低估。但PCOC指標(biāo)是統(tǒng)計所有PV的Pctr和Actr效果,這里面可能會存在一定的統(tǒng)計偏差。假設(shè)樣本里有50%PV的CTR被高估了,50%PV的CTR被低估了,最終二者匯總在一起時PCOC可能還是趨近于1。
Calibration-N
為了解決上述PCOC指標(biāo)可能存在的統(tǒng)計偏差,我們使用一個新的指標(biāo)Cal-N。首先將統(tǒng)計樣本分為幾個簇,然后按照簇分別去統(tǒng)計PCOC指標(biāo),再分別計算各個簇PCOC指標(biāo)與標(biāo)準(zhǔn)值1之間的偏差,最后進(jìn)行匯總。這種統(tǒng)計方式就可以避免單獨的PCOC指標(biāo)里可能存在的統(tǒng)計偏差。
如何去將樣本分簇?其實這里的分簇方法和Part2.2里面如何分簇去統(tǒng)計后驗CTR的邏輯是一樣的,二者保持一致即可。
同時在廣告業(yè)務(wù)中,我們可以基于廣告主已經(jīng)幫我們分好的簇進(jìn)行統(tǒng)計。因為廣告業(yè)務(wù)中,整個廣告層級是分為:計劃 (Campaign)-單元(Group)-創(chuàng)意(Creative)。廣告主一般都是在整個計劃或單元維度觀察整個效果,所以我們在進(jìn)行PCOC指標(biāo)統(tǒng)計時,就可以將每個投放單元視為一個簇。
本文由 @King James 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 Unsplash,基于 CC0 協(xié)議
該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)。
- 目前還沒評論,等你發(fā)揮!