工业界推荐系统实用分析技巧
作者 |?納米醬
鏈接?|?https://zhuanlan.zhihu.com/p/188228577
編輯?| 機器學習與推薦算法
這篇文章主要討論推薦系統的分析技巧,杜絕無腦調參,探討如何靠簡單無腦而且 low到爆的辦法,快速搞一把,做到指標增長。
本來我想取一個高大上的題目:推薦系統0-1高速增長打法,這種互聯網style強烈的題目,讓我感覺我的格局大,ego也很大,所以算了,寫一份實用分析手冊,讓我格局很小,ego也很小,比較符合我當前這種水平。
下面以問答形式解答一線的常見問題和技巧手段。
問:指標上不去,rank加特征能夠提升嗎?
答:這是一個常見的疑惑,大家指標卡在瓶頸的時候,很容易迷信大力出奇跡的方案。其實,rank并不是提升指標的工具,你加多少特征,本質只是方便 rank 更好地還原系統分布的工具,策略才是提供增長,帶動系統往良性(黃賭毒方向)發展的利器。要分析系統的指標瓶頸是不是卡在rank缺特征上,就需要從各種角度去分析,常見的分析方案是考察帶條件的copc。
分析辦法:把rank分數分成若干區間,每個區間統計真實的ctr,更近一步,可以拆分成多個桶,比如按照某個特征拆分成 A,B兩組,單獨統計每組的真實ctr。
無非出現如下幾種情況:
rank分數單調遞增,ctr沒有單調遞增:這個原因多半是你線上線下分布不一致導致的,道理很簡單,如果你的rank真的擬合好了分布,沒理由高分數區間段的ctr會低于低分數區間。這個不一致,有可能是你特征沒做好線上線下的統一,也有可能是你模型沒擬合好線上的分布。總之這種情況,你先別急著加特征,先把線上線下特征梳理一下,看看分布是否一致,或者模型訓練是不是有問題。
rank 分數單調遞增,ctr 單調遞增,但是增長非常慢:比如說0.9-1.0區間的ctr 僅僅比0.3-0.4區間的 ctr 高一丁點。這個原因才是你模型缺特征,尤其是缺乏活躍用戶的特征,通常活躍用戶,系統 rank 為了指標,會使用很重的行為畫像作為特征,很容易放大歷史點擊記錄,更加傾向于把他們排上去,如果你高估了該用戶的點擊傾向,就會導致分數給的很高,但是現實用戶不怎么點的現象
這個也會觸發新的問題,也就是常說的離線AUC很高,但是線上沒效果,道理都一樣,你模型僅僅是把正負樣本的間隔拉開了,并沒有真正改善用戶看到的內容和布局,才導致高分段ctr不見增長。
rank分數單調遞增,ctr也單調遞增,但是 A,B兩組的ctr比值差異過大:比如 A,B表示上午和下午,如果這兩個時間段,同一個分數區間的ctr差異過大,說明模型對時間這個維度的建模不足,需要進一步改善。
數學很好證明:假設模型分布是q(y|A), q(y|B),真實的線上分布是 p(y|A),p(y|B),A,B處于同一個分數段,數學上等價于:q(y|A) = q(y|B),由于你假設你模型正確擬合了真實分布,也就是 q(y|A) = p(y|A), q(y|B) = p(y|B),但是現實上 A,B的ctr并不相等,P(y|A) != p(y|B),故此,你模型正確擬合A,B兩個條件分布的假設不成立。
這種分組copc的技巧,是一種前期快速判斷rank的不足之處,精準化打擊系統,對于不見兔子不撒鷹的主,有理由推動對方更快地推進業務迭代
rank分數單調遞增,ctr單調遞增,各種維度分組下的ctr比值也接近平穩:恭喜你,到達這一步,表示你 rank 幾乎沒事情可做了,你剩下要做就是優化召回,在策略上引導你rank往新的產品思路上走,在更加高的層面帶動系統往良性地方發展(黃賭毒方向)。
問:PV增大,但是CTR跌的很厲害
答:數學上,PV增加CTR就會跌,但一般都會是常數,如果PV增加CTR跌太厲害,你就需要警惕你的投放人群了。
投入過多曝光,會導致點擊增長變緩
數學上來說,假設你有 A,B兩個人群,A人群活躍喜歡點擊,ctr高,B人群不太活躍,不怎么點擊,ctr比較低。如果是隨機投放,CTR一般來說都是比較平穩的。但是現實rank如果做的不好,都喜歡向A這種活躍人群投放大量同類內容,甚至高熱內容,這些用戶短時間內接受到大量同質的內容沖擊后,A人群興趣飽和,貢獻的點擊就會下降。然后,系統隨后的收益都是B人群零零星星提供的,導致PV一直增加,但是點擊數不見增長。
另外一種可能的情況是,你投放的用戶注意力發生轉移,比如同一個時間內,旁邊還有活動位置啥的干擾用戶,也會導致PV上去,點擊不見增長。
如果老板要你不擇手段保CTR,可以參考廣告pacing思路,在短時間內,某個 item觸達的優質用戶達到一定峰值,就需要退場冷卻一下,防止一直被rank推到高位,消費大量注意力和曝光坑位。但是這個辦法指標不治本,畢竟為了粘性,人們喜歡點的還是要多推。
問:如何尋找快速提升指標的策略
答:有一些野路子可以提供,說其是野路子,著實是沒法有通用的解法,每個人都有自己的一套特殊的秘方。其次,生產線大部分策略都是被動產生,比如修各種 bad case,或者緊急針對某個單一業務指標做提升,或者產品拍了腦袋找你改進樣式啥的。主動尋找增量策略本身是一個比較老中醫的方案。
一種做法是復制上下文環境:這種技巧需要花錢買教訓收集一定的反饋。打個比方,你要提升用戶點擊視頻的概率,前期你并不知道那些用戶愛看視頻,所以在不同時間點,人群和位置上,隨機試投了一陣,收益當然不佳。然后你認為這些隨機當中,還是有一些樣本誤打誤撞到最佳的策略上的,于是你把用戶分成A,B兩組,A組用戶特愛點視頻(你認為他們愛點,是因為恰好蒙對了策略環境),B組用戶不怎么點。
復制上下文環境就是說,給B人群營造A人群的環境。數學上來說,就是統計一下A組的環境s都是啥(比如說視頻都在啥位置,一次性投放視頻的數目,視頻熱度等),然后想辦法把這些上下文遷移到B組人群身上。
遷移需要一定技巧去離線預估效益,以決定要不要上線該策略,比如說A用戶上下文環境分布為p(s|A),B用戶上下文環境分布為p(s|B),強行遷移A的環境分布到B上,得到的B組的預期收益為:
?
?
其中min里面是帶截斷的IPS分數,如果離線評測湊合。上線以后就靠argmax p(s|A) 生成你的策略環境。
這種辦法缺點在于,A,B兩組很可能天生就是兩批用戶,以至于你給B人群營造A人群的環境,對方一樣不鳥你。
第二種是增強關聯:這種技巧抽象來說,就是溯源,找到影響某個指標,最有可能的特征A,然后強化該指標和該特征的關系,需要和rank配合著打。
問:如何統計曝光次數少的 item 的熱度
答:一般來說,很多item的曝光次數可能只有數十次,高熱度的item曝光可能是上萬,甚至百萬次,曝光過低的item,只要產生少數幾次點擊,其ctr就有可能非常高,甚至吊打高熱item的點擊率,統計學上針對這種問題,一般是采取 wilson ctr糾正,但是現實來說,wilson ctr非常不靠譜,曝光低的item,大概率是你精準投放人群導致的,并不滿足wilson ctr隨機投放的基本假設。確切來說,我們要分人群去統計相對的ctr,消除投放人群的bias。
方法:假設item A被投放給N個人,曝光200次,產生10次點擊,同時,這N個人當中,高熱item B給他們曝光了100000次,產生 900 次點擊。所以,A和B 在同一批人群當中的 ctr 分別是:(10 / 200, 900 / 100000),一般我們認為高熱的 item 都是無關個性化的,比如熱點新聞,促銷商品,黃色暴力內容,大家都愛點,高熱item的點擊率和投放人群的關系不是很大,幾乎人人都會點,可以作為CTR本底。扣除這種ctr表示,相比大眾貨,用戶更喜歡點那些item,用這種相對的ctr作為item熱度的衡量。
總結
以上是生活随笔為你收集整理的工业界推荐系统实用分析技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 会员中心 收藏动态消息创作SELECT
- 下一篇: java信息管理系统总结_java实现科