在推薦算法領(lǐng)域,時常會出現(xiàn)模型離線評測效果好杈女,比如AUC、準(zhǔn)召等指標(biāo)大漲,但上線后業(yè)務(wù)指標(biāo)效果不佳赊琳,甚至下降的情況,比如線上CTR或CVR下跌板丽。
本文嘗試列舉一些常見的原因,為大家排查問題提供一點(diǎn)思路埃碱。
1. 離線酥泞、在線特征不一致
離線砚殿、在線特征不一致通常是模型線上效果不好的主要原因芝囤,然而,造成離在線特征不一致的原因卻千奇百怪羡藐,有些還非常隱蔽。
- 實(shí)現(xiàn)上存在Bug仆嗦。離線先壕、在線特征的ETL過程通常不是由同一份代碼完成的瘩扼,比如垃僚,離線特征的計(jì)算過程一般是使用SQL語言在大數(shù)據(jù)平臺上完成邢隧,而在線特征的加工通常是由C++、Go這樣的語言計(jì)算得到冈在。這樣就存在相同的邏輯需要實(shí)現(xiàn)兩次倒慧,而且可能是不同的人來實(shí)現(xiàn),如果不仔細(xì)測試,出現(xiàn)不一致的可能性還是很高的纫谅。要嚴(yán)格保證線上線下的特征一致性炫贤,最根本的方法就是同一套代碼和數(shù)據(jù)源抽取特征,業(yè)內(nèi)目前通用的方法就是付秕,在線實(shí)時請求打分的時候落地實(shí)時特征兰珍,訓(xùn)練的時候就沒有特征拼接的流程询吴,只需要關(guān)聯(lián)label掠河,生成正負(fù)樣本即可
- 特征更新存在延遲。一些需要實(shí)時計(jì)算得到的特征猛计,如實(shí)時統(tǒng)計(jì)特征唠摹、序列特征等,離線模擬時不存在問題奉瘤,然而勾拉,上線后由于各種原因,如果不能及時更新盗温,那就造成了離線藕赞、在線的特征分布不一致,相當(dāng)于是模型過擬合了卖局。小時級更新斧蜕、天級更新的特征,也有可能出現(xiàn)更新延遲的問題砚偶。
2. 存在數(shù)據(jù)泄露
數(shù)據(jù)泄露(data leakage)惩激,有時也叫做泄露、穿越等蟹演。它說的是用于訓(xùn)練機(jī)器學(xué)習(xí)算法的數(shù)據(jù)集中包含了一些將要預(yù)測的事務(wù)的東西(when the data you are using to train a machine learning algorithm happens to have the information you are trying to predict)风钻,也就是說測試數(shù)據(jù)中的一些信息泄露到了訓(xùn)練集中。這里說的信息是指關(guān)于目標(biāo)標(biāo)簽或者在訓(xùn)練數(shù)據(jù)中可用但在真實(shí)世界中卻不可用酒请、不合法的數(shù)據(jù)骡技。
數(shù)據(jù)泄露的類型介紹
我們可以將數(shù)據(jù)泄露分為兩大類:訓(xùn)練數(shù)據(jù)泄露和特征泄露。訓(xùn)練數(shù)據(jù)泄露通常是測試數(shù)據(jù)或者未來的數(shù)據(jù)混合在了訓(xùn)練數(shù)據(jù)中羞反,特征泄露是指特征中包含了關(guān)于真實(shí)標(biāo)簽的信息布朦。
導(dǎo)致訓(xùn)練數(shù)據(jù)泄露可能有以下幾種情況:
- 在進(jìn)行某種預(yù)處理時是使用整個數(shù)據(jù)集(訓(xùn)練集和測試集)來計(jì)算的,這樣得到的結(jié)果會影響在訓(xùn)練過程中所看到的內(nèi)容昼窗。這可能包括這樣的場景:計(jì)算參數(shù)以進(jìn)行規(guī)范化和縮放是趴,或查找最小和最大特征值以檢測和刪除異常值,以及使用變量在整個數(shù)據(jù)集中的分布來估計(jì)訓(xùn)練集中的缺失值或執(zhí)行特征選擇澄惊。
- 在處理時間序列數(shù)據(jù)時唆途,另一個需要注意的關(guān)鍵問題是富雅,未來事件的記錄意外地用于計(jì)算特定預(yù)測的特性。
導(dǎo)致特征泄露可能有以下幾種情況:
- 使用了一些不合法的特征肛搬,例如一個用來診斷特定疾病的模型没佑,使用了病人是否做過當(dāng)前疾病的手術(shù)這樣的特征;再比如温赔,CTR預(yù)估模型中使用了用戶在商品詳情頁的交互行為特征蛤奢,如是否評論、是否聯(lián)系賣家等陶贼,這些行為在預(yù)測時沒有發(fā)生的啤贩。
檢測數(shù)據(jù)泄露
當(dāng)我們了解了什么是數(shù)據(jù)泄露了之后,下一步來看下如何檢測數(shù)據(jù)泄露拜秧。
在構(gòu)建模型之前痹屹,我們可以先對數(shù)據(jù)進(jìn)行一些探索分析。例如腹纳,尋找與目標(biāo)標(biāo)簽或者值高度相關(guān)的特征痢掠,相關(guān)性非常高的特征可能是泄露特征驱犹。
當(dāng)構(gòu)建模型之后嘲恍,我們可以檢查下模型中權(quán)重極高的特征是否存在泄漏的情況。如果在構(gòu)建模型之后雄驹,發(fā)現(xiàn)模型的效果好到不可思議佃牛,這時候需要考慮下是否發(fā)生了數(shù)據(jù)泄露。
另一個更可靠的檢查泄漏的方法是医舆,對經(jīng)過訓(xùn)練的模型進(jìn)行有限的實(shí)際部署俘侠,看看模型的訓(xùn)練時的性能與真實(shí)環(huán)境的表現(xiàn)之間是否有很大的差別。但是如果差別比較大的話蔬将,也有可能是是過擬合造成的爷速。
3. 數(shù)據(jù)分布不一致
- 數(shù)據(jù)分布隨時間發(fā)在漂移。例如霞怀,營銷平臺的大促活動惫东、季節(jié)的變化、流行元素和審美標(biāo)準(zhǔn)的變化等等毙石。
- 數(shù)據(jù)分布隨地理位置發(fā)生漂移廉沮。同一時間點(diǎn),南方人偏愛的服飾等物品與北方人可能是不同的徐矩,如果訓(xùn)練集中只包含某些地理位置的數(shù)據(jù)滞时,而測試數(shù)據(jù)出現(xiàn)了另外的地理位置,這種情況就會出現(xiàn)滤灯∑夯跨境電商平臺通常需要考慮目標(biāo)市場是南北半球的情況曼玩,而針對性地推薦不同季節(jié)的物品。
- 數(shù)據(jù)分布在不同場景是不同的刽漂。小場景往往因?yàn)閿?shù)據(jù)量不夠演训,會借助其他流量較多的場景的數(shù)據(jù)做模型訓(xùn)練,大場景的base模型可能是一個個性化的推薦系統(tǒng)贝咙,而小場景的base算法是非個性化的熱門推薦样悟,大小兩個場景間的數(shù)據(jù)分布有較大的不同。這個時候訓(xùn)練樣本的分布被大場景占據(jù)主導(dǎo)庭猩,訓(xùn)練出來的模型用在小場景效果可能會不好窟她。做遷移學(xué)習(xí)時需要謹(jǐn)慎!
- 冰山效應(yīng)蔼水。推薦系統(tǒng)里非常常見震糖,并且往往非常的隱蔽的一種數(shù)據(jù)分布不一致的情況被稱之為冰山效應(yīng),也就是說離線訓(xùn)練用的是有偏的冰山上的數(shù)據(jù)趴腋,而在線上預(yù)估的時候吊说,需要預(yù)測的是整個冰山的數(shù)據(jù),包括大量冰面以下的數(shù)據(jù)优炬!我們看下面這張圖颁井。左邊是我們的Baseline,綠色的表示正樣本蠢护,紅色表示負(fù)樣本雅宾,灰色部分表示線上由于推薦系統(tǒng)的“偏見”(預(yù)估分?jǐn)?shù)較低),導(dǎo)致根本沒有展現(xiàn)過的數(shù)據(jù)葵硕。
離線階段眉抬,我們通過各種優(yōu)化,新模型的離線評估表現(xiàn)更好了懈凹,例如圖中第二列蜀变,可以發(fā)現(xiàn)第4個綠色的正樣本和第7個綠色的正樣本排到了第3和第6的位置,離線的auc指標(biāo)漲了介评。
到了真正線上的預(yù)估也就是第三列库北,發(fā)現(xiàn)對于這部分離線見過的樣本,模型的預(yù)估序并未改變威沫。但是新模型給了灰色沒有見過的數(shù)據(jù)更高的預(yù)估分?jǐn)?shù)贤惯,這部分?jǐn)?shù)據(jù)一旦表現(xiàn)不好,很可能造成我們前面說的情況棒掠,離線(第二列)評估指標(biāo)明明漲了不少孵构,在線(第三列)評估指標(biāo)ctr卻下降。
冰山效應(yīng)在實(shí)驗(yàn)?zāi)P团cbaseline的模型相差較大時很容易造成較大的影響烟很,比如實(shí)驗(yàn)?zāi)P褪莻€性化推薦的DNN模型颈墅,而baseline是一個熱門推薦的策略蜡镶,這個時候新模型往往會推薦很多baseline不會展現(xiàn)出來的之前很少曝光的物品,而這些物品是否能夠被高效點(diǎn)擊和轉(zhuǎn)化有一定的不確定性恤筛。新模型一開始相當(dāng)于都是在擬合老模型產(chǎn)生的樣本官还,剛上線效果如果比較差,經(jīng)過一段時間迭代毒坛,影響的樣本分布慢慢趨近于新模型望伦,也能收斂,但效率較低煎殷。
緩解冰山效應(yīng)的兩個思路:
- 對無偏數(shù)據(jù)進(jìn)行上采樣
這里的無偏是相對的屯伞,可以是隨機(jī)/探索流量產(chǎn)生的樣本,也可以是新模型產(chǎn)生的樣本豪直。大概意思劣摇,就是盡可能利用這些對新模型有利的樣本 - 線上線下模型融合
新模型預(yù)估分?jǐn)?shù) 和老模型預(yù)估分?jǐn)?shù) 直接在線上做線性融合,剛上線的時候平滑系數(shù) 選取比較小弓乙,隨著慢慢迭代末融, 慢慢放大。
4. 模型過擬合
假設(shè)離線評測用的測試數(shù)據(jù)是與訓(xùn)練數(shù)據(jù)做了隔離的暇韧,這種情況下仍然有一定的概率發(fā)生模型過擬合勾习。
在Kaggle比賽中經(jīng)常會出現(xiàn)模型在公開榜單(public leaderboard)上排名很高,但在切換到非公開榜單(private leaderboard)時排名很靠后的情況锨咙,這其實(shí)就是模型過擬合到公開榜單上了语卤。如果離線我們訓(xùn)練了很多模型(對應(yīng)不同的超參數(shù))追逮,都是用同一個測試數(shù)據(jù)集來評估和選擇模型酪刀,當(dāng)這個過程重復(fù)很多次之后,最后選出來的模型有可能是過擬合到這個測試數(shù)據(jù)集上的钮孵,上線后效果就不一定好骂倘。
用測試數(shù)據(jù)集來選擇模型的過程其實(shí)就相當(dāng)于用測試數(shù)據(jù)集訓(xùn)練了一個“篩選模型”的模型,這個過程本身也是有可能過擬合的巴席。舉一個極端一點(diǎn)的例子历涝,最終我們可能選擇出一個在測試數(shù)據(jù)集上效果很好的模型,它能記住測試數(shù)據(jù)集中的每個樣本的label漾唉,但不在測試數(shù)據(jù)集中樣本全部預(yù)測錯誤的一無是處的模型荧库。這也就是一些機(jī)器學(xué)習(xí)模型號稱能夠在benchmark數(shù)據(jù)集上識別準(zhǔn)確率能夠打敗人類的原因。
5. 離線赵刑、在線評估指標(biāo)不一致
在模型優(yōu)化過程中分衫,我們曾遇到過離線AUC 很高(或提升很多)但 CTR 效果不理想;或 AUC 提升幅度不大般此,但 CTR 提升幅度很大的情況蚪战,這是為什么呢牵现?想要回答這個問題,我們先來看 AUC 與 CTR 的關(guān)系邀桑。
AUC指標(biāo)反應(yīng)的是模型把全局任意一對正負(fù)樣本中的正樣本排序在負(fù)樣本之前的概率瞎疼。離線計(jì)算AUC指標(biāo)其實(shí)對應(yīng)了模型對多個請求的樣本之間進(jìn)行排序,而點(diǎn)擊率提升需要模型對一個請求內(nèi)部的多個 Item 進(jìn)行排序壁畸。模型的全局排序能力強(qiáng)不一定就表示同一次請求內(nèi)部的item排序能力強(qiáng)贼急。
GAUC(Group AUC)的指標(biāo)可能更加接近線上CTR的點(diǎn)擊偏好。這里的Group表示按照用戶Session來分組評估樣本捏萍。
6. 其他原因
比如說實(shí)驗(yàn)結(jié)果是否置信等竿裂,具體可以參考這篇文章:《推薦效果不佳時的檢查清單》。
還有諸如流量搶奪照弥,鏈路糾纏等原因腻异,典型的比如在營銷場景,你在前面的PUSH这揣,短信悔常,固定入口廣告做優(yōu)化,把好轉(zhuǎn)化的用戶都轉(zhuǎn)化了给赞。那么下游的IVR電銷机打,人工電銷一定就變難了。這時候你離線用歷史數(shù)據(jù)訓(xùn)練的模型可能離線指標(biāo)提升了片迅,線上也不會有太多的效果残邀。這種在一些瀑布流程的場景中更為常見,一定要關(guān)注實(shí)驗(yàn)的上下游變化柑蛇,比較經(jīng)典的方法是做MVP機(jī)制芥挣,一直維持著最優(yōu)流量的AB測。這樣相對提升是可以把握住的耻台。即使小模塊指標(biāo)變得難看了也沒關(guān)系空免,可能大盤整體還是變好的。