CVR預(yù)估解決選擇偏差與數(shù)據(jù)稀疏)
做推薦系統(tǒng)的同學(xué)對“CVR預(yù)估”這個詞肯定不陌生。但你如果翻過近幾年的工業(yè)界論文會發(fā)現(xiàn)大家反復(fù)在聊一個痛點CVR模型往往只在點擊樣本上訓(xùn)練上線后卻要在曝光樣本上做預(yù)測中間隔著一條巨大的“選擇偏差”鴻溝。ESM2也就是 Elaborated Entire Space Supervised Multi-task Model正是阿里針對這條鴻溝給出的一個相當(dāng)完整的解法。我第一次讀這篇論文時第一反應(yīng)是“這不就是ESMM換個皮嗎”——但真把結(jié)構(gòu)圖和損失函數(shù)逐行看下來才發(fā)現(xiàn)它把“轉(zhuǎn)化”這件事重新拆解了一遍把用戶從曝光、點擊、加購到最終購買的全路徑信號都揉進了一個多任務(wù)模型。這篇論文適合推薦算法工程師、做廣告投放策略的同學(xué)以及所有被“CVR樣本稀疏”“點擊率低導(dǎo)致正樣本太少”折磨過的人去讀。這篇文章我會從問題動機開始把ESM2的結(jié)構(gòu)拆開講清楚再給出訓(xùn)練和線上推斷時的實操經(jīng)驗。不鋪墊太多理論重點放在“為什么要這么設(shè)計”和“真落地時有哪些坑”上。1. 先看懂ESM2要解決的三個老大難1.1 CVR預(yù)估的兩座大山選擇偏差與數(shù)據(jù)稀疏任何做電商、廣告、內(nèi)容推薦的算法最終都要回答一個問題一個用戶看到這個商品/廣告后會不會買這個概率就是CVR轉(zhuǎn)化率。很多團隊最初的方案很直接用“點擊過且購買過”的樣本訓(xùn)練一個二分類模型特征用用戶、商品、上下文。這個方案在實驗評估里看起來還行一旦上線就露餡。為什么因為訓(xùn)練數(shù)據(jù)只在點擊樣本里選而推理時面對的是曝光樣本。能點進來的用戶本來就是有購買意向的偏置人群模型在這種人群上擬合出來的概率分布和全體曝光人群的概率分布完全不是一回事。這就是行業(yè)常說的“樣本選擇偏差”Sample Selection Bias。打個比方你只根據(jù)進店的顧客做銷售預(yù)測卻忽略了更多路過但沒進來的人預(yù)測結(jié)果當(dāng)然失真。另一座山是“數(shù)據(jù)稀疏”。在一個典型的電商場景里如果點擊率是2%那么點擊樣本只有曝光樣本的五十分之一。在這2%的點擊樣本里能走到成交的又是少數(shù)可能只有百分之幾。最后你手里真正的“點擊且購買”正樣本往往只剩整個曝光日志的千分之幾。這么少的樣本喂給深層神經(jīng)網(wǎng)絡(luò)特征交叉根本學(xué)不充分模型很容易過擬合或者直接學(xué)成一個“只會輸出低概率”的保守鬼。1.2 ESM2的思路與其硬啃不如把轉(zhuǎn)化路徑拆開ESM2的聰明之處在于它不直接去預(yù)測“點擊后是否購買”這個二分類而是把“轉(zhuǎn)化”重新定義成一個多階段事件。用戶在電商場景里的行為漏斗大致是曝光 → 點擊 → 加購或收藏、進店 → 購買或加購后購買。中間存在一個常見的中間環(huán)節(jié)加購Add-to-Cart。于是“最終買不買”這個事件可以拆成兩類點擊后直接下單支付點擊后先加購之后通過購物車路徑完成支付。從行為依賴上看第二類是個條件概率鏈要先加購再加購后購買。這樣一來原來那個極度稀疏的“點擊→購買”目標(biāo)就被拆成了三個密度高得多的子目標(biāo)點擊→直接購買、點擊→加購、加購→購買。每個子目標(biāo)的正樣本數(shù)量都遠大于最終成交的正樣本信號密度一下子就上來了。這正是“Elaborated”精細化這個詞的核心含義——不滿足于粗顆粒的最終轉(zhuǎn)化而是把轉(zhuǎn)化過程精細建模出來。1.3 全空間監(jiān)督的本質(zhì)讓模型在曝光空間上計算目標(biāo)ESM2名字里還有另一半“Entire Space Supervised”。這意味著模型的目標(biāo)函數(shù)是在全體曝光樣本空間上定義并優(yōu)化的而不是只在點擊樣本上。要做到這一點關(guān)鍵不是簡單地“把所有曝光樣本塞進去訓(xùn)練”而是要構(gòu)造出一個在數(shù)學(xué)上成立的目標(biāo)關(guān)系讓曝光樣本上也能出現(xiàn)監(jiān)督信號。ESM2借用了ESMM的經(jīng)典套路用乘法關(guān)系把整個漏斗串起來pCTCVR pCTR × pCVR只要點擊概率和轉(zhuǎn)化概率都能從同一條樣本鏈路里拆出來那么“曝光→成交”的聯(lián)合概率就有定義。而曝光→成交這個事件在全曝光樣本里是可以觀測到的用戶確實買了就能打正標(biāo)簽。這就在理論上繞開了選擇偏差——模型不再只看點擊人群而是在全部曝光人群上做有監(jiān)督學(xué)習(xí)。2. 模型結(jié)構(gòu)拆解一個網(wǎng)絡(luò)怎么裝下多個轉(zhuǎn)化階段2.1 共享Embedding與雙塔/多塔設(shè)計ESM2在結(jié)構(gòu)上延續(xù)了多任務(wù)學(xué)習(xí)的常見做法底層是共享的Embedding層把所有稀疏特征映射成稠密向量往上分支出不同的任務(wù)塔每個塔負(fù)責(zé)預(yù)測一個子概率。你把它畫出來大概是這樣的感覺輸入層用戶特征、商品特征、上下文特征、交叉統(tǒng)計特征全部過Embedding。共享層多層全連接MLP把原始Embedding融合成通用表征。任務(wù)塔CTR塔預(yù)測點擊概率 pCTR、直接購買塔預(yù)測點擊后直接轉(zhuǎn)化概率 pCVR_action、加購塔預(yù)測點擊后加購概率 pCVR_cart、加購后購買塔預(yù)測加購后購買概率 pCVR_cart_to_purchase。每個塔之間不共享上層參數(shù)但底層Embedding是共享的。共享Embedding的好處很實際加購和購買共有的用戶偏好、商品屬性可以在訓(xùn)練中被所有子任務(wù)共同強化即便是某個商品“直接購買”樣本很少但它可能有較多“加購”樣本Embedding照樣能學(xué)到該商品的表征這在很大程度上緩解了長尾商品的稀疏問題。如果你之前實現(xiàn)過ESMM會發(fā)現(xiàn)這套結(jié)構(gòu)和ESMM幾乎同源。ESM2真正的變化是塔的數(shù)量和任務(wù)定義——ESMM只有CTR塔和CVR塔兩個頭ESM2把CVR塔拆成了多個指向不同行為路徑的頭然后通過概率公式把它們組合起來。2.2 疊加除法多個頭的概率如何合成ESM2最核心的公式其實不長。它定義pCTCVR pCTR × (pCVR_action pCVR_cart × pCVR_cart_to_purchase)逐個拆pCTR曝光后點擊的概率pCVR_action點擊后直接購買的概率pCVR_cart點擊后加購的概率pCVR_cart_to_purchase加購后最終購買的概率。括號里的內(nèi)容本質(zhì)上是“點擊后最終購買”這一事件的全概率分解。用戶點擊后想買一共有兩條互斥路徑一條是不加購物車直接買另一條是加購物車后買。兩條路徑概率相加就是點擊后購買的總概率。你再乘上pCTR就把“曝光→購買”整條鏈路打通了。這里有一個很多人第一次看會疑惑的點為什么不是直接用 pCTCVR 除以 pCTR 得到 CVR再用傳統(tǒng)交叉熵 loss這個疑問很關(guān)鍵。因為如果把“除法”直接作為模型輸出的組合方式比如pCVR pCTCVR / pCTR那么數(shù)值穩(wěn)定性會很差當(dāng)pCTR很小或者預(yù)測不準(zhǔn)時除法結(jié)果可能爆炸。ESM2的處理是每個子概率都分別由神經(jīng)網(wǎng)絡(luò)輸出再通過乘法/加法組合成最終的pCTCVR而不是先預(yù)測pCTCVR再除。這樣所有子任務(wù)都在參與優(yōu)化而不是讓一個“商”承擔(dān)所有誤差。2.3 損失函數(shù)在哪些樣本上算——全空間日志與分空間監(jiān)督多任務(wù)模型的損失函數(shù)通常寫成多個交叉熵的加權(quán)和。ESM2的損失由四部分組成CTR預(yù)測的損失、點擊后直接購買預(yù)測的損失、點擊后加購預(yù)測的損失、加購后購買預(yù)測的損失。關(guān)鍵在于這四個損失作用在不同的樣本子集上CTR損失全部曝光樣本。因為每個樣本都有“是否點擊”的標(biāo)簽。直接購買損失僅在“點擊樣本”上計算。因為只有點了才有“是否直接購買”的標(biāo)簽。加購損失同樣僅在“點擊樣本”上計算。加購后購買損失僅在“點擊且加購”的樣本上計算。用一句更直白的話說每個子任務(wù)都在它對應(yīng)的行為空間上有監(jiān)督信號但整個模型的總損失依然是在全曝光樣本上匯總的。ESM2把“全空間監(jiān)督”和“分空間子任務(wù)監(jiān)督”統(tǒng)一起來了這也是它名字中間那個“Elaborated”的又一個體現(xiàn)。3. 從損失函數(shù)到線上推斷ESM2的訓(xùn)練策略怎么落地3.1 訓(xùn)練樣本怎么攢曝光日志聯(lián)合行為序列落地ESM2的第一件事不是寫模型結(jié)構(gòu)而是把訓(xùn)練樣本準(zhǔn)備好。你需要一個包含完整行為序列的訓(xùn)練集每條樣本至少要有曝光時間、曝光位置、上下文信息是否點擊、點擊時間是否加購、加購時間是否成交、成交時間。實操里最常見的問題是標(biāo)簽口徑不一致。比如“購買”到底定義為下單成功、支付成功還是確認(rèn)收貨我建議以“支付成功”為最終口徑因為下單可能被取消確認(rèn)收貨又太慢支付成功是電商業(yè)務(wù)中最穩(wěn)定、最接近實時收入的信號。另外要注意時間窗口用戶點擊后30天內(nèi)購買都算轉(zhuǎn)化還是15天窗口太短會漏掉計劃性購物窗口太長會讓模型訓(xùn)練樣本過期太久。我的經(jīng)驗是先按業(yè)務(wù)平均轉(zhuǎn)化周期取中位數(shù)比如7天或15天曝光日志保留3到4個窗口的歷史后面再按實驗效果調(diào)整。“直接購買”和“加購后購買”的切分也很關(guān)鍵。嚴(yán)格來說如果用戶點擊后先進了購物車再立刻支付這算哪一類我建議以“是否發(fā)生過加購行為”來切只要加購過就算加購路徑不管中間間隔多久。這樣做的好處是路徑互斥滿足概率加法公式的使用前提。3.2 損失權(quán)重讓每個頭“均衡發(fā)展”多任務(wù)模型一個容易踩的坑是某個任務(wù)Loss占比過大導(dǎo)致模型只顧那個頭其他頭變成了擺設(shè)。ESM2的四個子任務(wù)樣本量差異巨大CTR有全網(wǎng)曝光日志直接購買可能只有CTR樣本的1%不到加購后購買更是稀少。所以實踐中要給不同的頭設(shè)置不同的損失權(quán)重。我的默認(rèn)做法是把每個頭的Loss做“樣本量歸一化”即每個樣本貢獻的Loss先除以該子任務(wù)的樣本總量再乘以一個全局權(quán)重。這樣各頭Loss的尺度大致一致初始全局權(quán)重全設(shè)1.0也能均衡訓(xùn)練。如果發(fā)現(xiàn)某個頭比如加購后購買依然學(xué)不動就把那一路權(quán)重提高但我最高不超過3.0再高就容易把共享Embedding帶偏。還有個容易忽略的點梯度回傳。由于最終目標(biāo)pCTCVR是由多個head通過乘法和加法組合的CTR head和CVR各個head之間存在梯度路徑上的耦合。你會發(fā)現(xiàn)CTR和CVR的梯度天然會互相影響這是ESM2自帶的“多任務(wù)相互作用”。不要人為地把某個head的梯度完全切斷否則就失去了聯(lián)合訓(xùn)練的意義。正確的做法是給不同任務(wù)設(shè)置梯度縮放系數(shù)Gradient Scaling控制在0.5到1.5之間微調(diào)而不是粗暴地“停止梯度”。3.3 線上推斷排序用哪個概率訓(xùn)練完成后線上該用哪個輸出做排序這是每次講ESM2時都被問到的問題。答案是看業(yè)務(wù)目標(biāo)。如果你的目標(biāo)是優(yōu)化GMV或交易筆數(shù)應(yīng)該用 pCTCVR 排序因為它綜合了點擊概率和購買概率對應(yīng)“曝光后的成交期望”。如果你的目標(biāo)是在“已點擊”的流量內(nèi)做轉(zhuǎn)化優(yōu)化比如某些場景的二次營銷可以用 pCVR_action pCVR_cart × pCVR_cart_to_purchase這就是點擊后購買條件概率本身。如果你的產(chǎn)品是購物車催付那應(yīng)該用 pCVR_cart_to_purchase 單獨排名把“加購后最可能買”的用戶找出來發(fā)提醒。我見過不少團隊在這里踩坑明明場景是首頁推薦卻拿單獨的pCVR去排結(jié)果CTR權(quán)重完全消失推薦結(jié)果偏向“點進來就買的高轉(zhuǎn)化但低興趣”的商品整體流量效率反而下降。線上排序前務(wù)必再確認(rèn)一次你要優(yōu)化的目標(biāo)指標(biāo)而不是盲目套一個腦內(nèi)默認(rèn)值。在工程實現(xiàn)上ESM2也不復(fù)雜。推理時就是一次前向計算四個輸出頭分別算一遍然后用公式組合。要注意的是如果希望得到穩(wěn)定的浮點數(shù)可以提前把pCTCVR的計算放到模型最后一層作為自定義輸出節(jié)點而不是在業(yè)務(wù)代碼里做除法——避免pCTR極小時產(chǎn)生數(shù)值噪聲。4. 和ESMM相比ESM2到底“精”在哪里4.1 一張表看懂ESMM與ESM2的區(qū)別把兩篇論文放在一起對比會發(fā)現(xiàn)ESM2不是推翻ESMM而是把ESMM中“籠統(tǒng)的CVR”精細化成了行為路徑上的多個概率。維度ESMMESM2模型結(jié)構(gòu)共享Embedding CTR塔 CVR塔共享Embedding CTR塔 多個CVR子塔轉(zhuǎn)化定義點擊→購買單一轉(zhuǎn)化事件點擊→直接購買 / 點擊→加購→加購后購買中間行為不顯式建模顯式建模加購還可擴展到收藏、進店等損失監(jiān)督空間全曝光空間聯(lián)合監(jiān)督全曝光空間損失匯總 分行為子空間監(jiān)督適用場景轉(zhuǎn)化漏斗較短、中間行為不突出電商等中間行為加購/收藏明顯的場景ESMM的價值是“把CVR的全空間監(jiān)督問題引入了業(yè)界”ESM2的價值則是在此之上把“單點轉(zhuǎn)化”豐富成“過程轉(zhuǎn)化”。如果你的場景沒有明顯的中間行為比如一個落地頁直接填寫表單就完成線索收集那ESM2的收益不會太明顯ESMM已經(jīng)足夠。但凡是電商、外賣、旅游這種有明顯“先加購/收藏后支付”習(xí)慣的場景ESM2就值得認(rèn)真試。4.2 為什么“加購”這個中間行為這么關(guān)鍵你可能會問中間行為為什么偏偏選“加購”因為在所有用戶行為里加購是最接近購買意圖的信號。收藏可能只是隨便點了個心進店也可能只是對比價格唯獨“加入購物車”是實際行動而且平臺大多提供了購物車入口后鏈路可以繼續(xù)追蹤。從數(shù)據(jù)角度看“點擊→加購→購買”這一路徑覆蓋了大量真實成交。很多場景下直接下單的GMV占比其實低于加購后成交。如果把加購路徑忽略了就等于只建模了漏斗的一半。ESM2通過剝離一個中間行為把原本混雜的成交信號分離成了“沖動型成交”和“計劃型成交”。這兩種成交背后用戶對價格敏感度、決策周期、復(fù)購傾向完全不同分開建模后特征表達會更有區(qū)分度。更進一步的精細化還可以繼續(xù)在加購后用戶可能還會經(jīng)歷“訪問購物車”“修改數(shù)量”“填寫地址”等動作。ESM2論文中把這個框架表達成一種可擴展的模式理論上每一層中間行為都可以繼續(xù)分化。不過實操上不建議無限細化因為分支越多樣本在每個分支上又會被切薄而且線上維護成本直線上升。一般拆到“加購”這一層性價比是最高的。5. 實操避坑樣本、標(biāo)簽、調(diào)參的常見問題5.1 常見問題速查表這里把我見過的ESM2落地問題整理成表每一條都是踩過的坑問題現(xiàn)象可能原因解決辦法線上pCTCVR排序效果不如pCTR業(yè)務(wù)目標(biāo)其實是點擊或互動而非成交重新確認(rèn)業(yè)務(wù)指標(biāo)選擇正確的輸出頭聯(lián)合訓(xùn)練后CTR AUC下降很多多任務(wù)梯度沖突共享底層被CVR任務(wù)帶偏調(diào)低CVR各頭損失權(quán)重或?qū)TR塔單獨加淺層加購后購買分支基本不變正樣本太少或該路徑業(yè)務(wù)占比本來就低檢查加購后成交占比如果低于10%可先忽略該分支pCTCVR數(shù)值整體偏高/偏低訓(xùn)練數(shù)據(jù)時序穿越或標(biāo)簽口徑漂移檢查特征是否用了未來信息標(biāo)簽時間窗口是否統(tǒng)一模型在冷啟動商品上預(yù)測很差共享Embedding沒有冷啟機制增加統(tǒng)計特征、圖片/文本向量作為冷啟補充訓(xùn)練耗時暴增全曝光樣本量是點擊樣本的50到100倍對曝光負(fù)樣本降采樣保持CTR正樣本全量其中“曝光負(fù)樣本降采樣”是小技巧里最實用的一條。CTR任務(wù)用全曝光樣本訓(xùn)練確實嚴(yán)格但工業(yè)場景曝光日志體量大沒必要把所有曝光數(shù)據(jù)都端進去。我建議對“未點擊”樣本做隨機降采樣采樣比按計算資源和數(shù)據(jù)量取1:10到1:20同時把CTR損失權(quán)重乘上一個“采樣補償系數(shù)”也就是負(fù)樣本的真實占比除以采樣后占比。這樣算出的CTR概率依然接近真實點擊率而訓(xùn)練速度可以快一個量級。5.2 幾條我個人的經(jīng)驗心得第一不要把ESM2當(dāng)成一個“模型”而要當(dāng)成一個“建模范式”。ETL、標(biāo)簽、訓(xùn)練、上線每個環(huán)節(jié)都要圍繞“全空間多路徑”重新設(shè)計。很多團隊直接把ESMM的代碼改幾個輸出頭樣本還是只取點擊后的數(shù)據(jù)那ESM2的好處完全發(fā)揮不出來。第二特征工程的重點要放在“區(qū)分兩條購買路徑”。比如“用戶歷史加購次數(shù)”“平均加購到支付間隔”“加購后是否頻繁訪問購物車”等特征對直接購買分支和加購后購買分支有截然不同的含義。這類行為序列特征往往比單純的價格、品類特征提升更明顯。第三線上服務(wù)階段模型文件一定要包含所有輸出頭不要為了減小體積把CVR子塔剪掉。我遇到過有同學(xué)為了省推理時間只保留CTR頭和CVR總括頭結(jié)果后續(xù)想切換pCVR_cart_to_purchase做購物車催收時還得重新部署一個新模型。ESM2的推理開銷并沒有比ESMM大多少一次前向計算四個頭耗時通常增長不到10%完全劃得來。我在實際落地ESM2時最喜歡的一點是它的“路徑可解釋性”。過去調(diào)CVR模型遇到預(yù)測值異常只能模糊地歸因到“特征分布變了”現(xiàn)在可以直接看是點擊概率掉了、加購概率掉了還是加購后轉(zhuǎn)化掉了。這種透明度讓算法和業(yè)務(wù)方的溝通順暢了很多——業(yè)務(wù)說你最近推薦效果變差你可以直接把漏斗環(huán)節(jié)的數(shù)據(jù)拉出來對照問題出在哪一目了然。如果你正在電商、生活服務(wù)或者任何“中間行為存在感強”的場景里做轉(zhuǎn)化建模ESM2是一個非常值得投入的基準(zhǔn)模型。至少先實現(xiàn)一版和ESMM做對比你會很快看見精細化漏斗建模帶來的增量。