從今天起,寒山叟將給帶領大家進入另一個重要領域,那就是推薦系統。寒山叟將會針對各種推薦系統,從算法原理和工程架構方面給大家一一做介紹,希望對正在學習或工業實踐中的你有所幫助,也歡迎大家留言探討,指正不足。
基於流行度的推薦
1.簡介
什么是基於流行度的推薦?就是推薦模型的建立是圍繞計算內容的流行度展開的,也就是說基於流行度推薦的核心就是計算內容的流行度。通熟講就是什么內容流行度越高,就給用戶推薦什么。本質上就是什么內容對用戶吸引力高,就給用戶推薦什么。那什么是流行度呢?也就是我們通常說的“熱度”。我們在各個互聯網產品中最常見到基於流行度推薦的形式就是某某榜TOP(N)。比如微博的熱搜榜,酷我音樂排行榜,電商網站熱搜榜、某某類商品銷量排行榜等等都四處可見。當然這里我們需要注意,我們不能把基於流行度的推薦說成是TOP(N),TOP(N)是一種產品形式,而流行度推薦指的是一類圍繞流行度計算而產生的推薦模型。
2.影響流行度的因素
在物理上“熱度”受時間和空間的限制,比如燒的炙紅的鐵塊距離你10cm和10m感受到的熱度是不同的,同樣的距離你10分鍾和10小時感受到的熱度也是不同的。言歸正傳,我們看下在推薦中內容的熱度是怎樣受到時間和空間因素影響的。我們做推薦的目標是將相對於用戶最好的內容推薦給用戶,這里我們做一個假設,質量越好的內容,他的流行度就越高,通常我們是這么理解的。然而事實卻不是這樣的,內容質量雖然會很大程度上決定流行度,但是時間和空間才是流行度的幕后推手。
下面我們來說一下時間因素,時間因素我們分兩方面看。首先,用戶訪問一個應用或服務,是有時間偏好的,這種時間偏好導致不同的應用或服務在時間維度有不同的“流量規律”。比如新聞類網站我們一般會集中在早晨和晚上時段查看,任何新聞投放在這一時段都會有比較好的關注度,我們不能說投放在中午的新聞就是質量差。其次,內容熱度隨着時間的推移是會發生衰減的。比如去年熱賣的商品與今年銷售的新品誰的質量高,我們也不能下定論。總結:內容的質量一定程度決定內容的熱度,由於應用在時間維度的流量差異會導致內容流行度差異很大,內容熱度在時間維度上的自然衰減也會導致流行度差異,所以我們考察流行度首先要限制時間因素,即:某一時間段的流行度。
接着我們來說一下空間因素,空間因素我們分兩方面看。首先,用戶訪問一個應用或服務,進入不同位置的用戶多少是有常常都有隱含的差異,這就決定了,訪問應用位置的流量是有差異的。比如新聞類網站我們一般會集中看首頁首航有啥文章,任何文章投放在這一位置都會有比較好的關注度,我們不能說投放在犄角旮旯的文章就是質量差。其次,內容熱度隨着物理空間的遷移是而發生衰減的。比如美國人可能不會關心鹿晗和關曉彤談戀愛,但是中國人會,所以在應用國際版上的某內容的流行度也會發生變化,當然其中也有政策差異的影響。總結:內容的質量一定程度決定內容的熱度,由於應用在空間維度的流量差異會導致內容流行度差異很大,內容熱度在空間維度上的自然衰減也會導致流行度差異,所以我們考察流行度首先要限制空間因素,即:某一位置的流行度。
最后我們總結一下:空間和時間會帶來應用訪問流量差異,間接影響了特定內容的流行度,當我們進行流行度計量的時候,要限定時間和空間維度,否則流行度不能反映內容質量。
3.流行度的度量
上面我們討論了時間和空間因素對流行度計算的影響。所以我們在度量流行度的時候,要排除時間和空間的影響,這里我們就不能用某一指標的絕度數量來表示。我們知道時空因素影響流行度是通過流量密度來施加的,所以我們要用一個相對值(比值)或某種可能性(概率)來度量流行度,用戶激發熱度行為數/用戶數。比如我們常說的點擊率、購買率、閱讀率、觀看率等等,以下我們統稱為點擊率。然而,點擊率本身雖然解決了一部分時間和位置偏差所帶來的影響,但是點擊率的估計所需要的數據依然會受到數據偏差的影響。因此,我們往往希望能夠建立無偏差的數據(這也是一個熱門的研究課題,有興趣你可以了解一下:數據驅動-重疊實驗平台構建,這里就不展開論述了)。這里我介紹一種常見的處理方式可以收集沒有偏差的數據,就是將線上流量進行分桶,一個桶利用現在已有的對物品流行度的估計展示推薦結果內容,一個桶展示隨機內容,這種方法是一種特殊的EE 算法(Exploitation & Exploration),業界稱之為“epsilon 貪心”(epsilon-Greedy)。 之后我們討論的主題都是在無偏置的流量前提下。
4.流行度預估建模計算
下面我說一種簡單的CTR預估問題建模思想。從數學角度講點針對點擊率的建模,其實就是把內容展示后是否被用戶點擊,看作一個“伯努利隨機變量”,點擊率預估就變成了對“伯努利分布參數估計”的問題,比如這時候我們可以用“極大似然估計”的方法,試着找到能最大限度解釋當前數據的參數。我們利用最大似然法就可以求出在某一段時間內的點擊率所代表的伯努利分布的參數估計。這個估計的數值就是某個物品當前的點擊總數除以被顯示的次數。通俗地講,如果我們顯示某個物品 10 次,被點擊了 5 次,那么在最大似然估計的情況下,點擊率的估計值就是 0.5。然而,這樣的估計有一定的局限性。如果我們並沒有顯示當前的物品,那么最大似然估計的分母就是 0。如果當前的物品沒有被點擊過,那么分子就是 0。在這兩種情況下,最大似然估計都無法真正體現出物品的流行度。我們從統計學的角度來講了講,如何利用最大似然估計法來對一個伯努利分布所代表的點擊率的參數進行估計。這里面的第一個問題就是剛才我們提到的分子或者分母為0的情況。顯然,這種情況下並不能很好地反應這些物品的真實屬性。一種解決方案是對分子和分母設置“先驗信息”。也就是說,雖然我們現在沒有顯示這個物品或者這個物品沒有被點擊,但是,我們“主觀”地認為,比如說在顯示 100 次的情況下,會有 60 次的點擊。注意,這些顯示次數和點擊次數都還沒有發生。在這樣的先驗概率的影響下,點擊率的估計,或者說得更加精確一些,點擊率的后驗概率分布的均值,就成為了實際的點擊加上先驗的點擊,除以實際的顯示次數加上先驗的顯示次數。你可以看到,在有先驗分布的情況下,這個比值永遠不可能為0。當然,這也就避免了我們之前所說的用最大似然估計所帶來的問題。利用先驗信息來“平滑”(Smooth)概率的估計,是貝葉斯統計(Bayesian Statistics)中經常使用的方法。如果用更加精准的數學語言來表述這個過程,我們其實是為這個伯努利分布加上了一個 Beta 分布的先驗概率,並且推導出了后驗概率也是一個 Beta 分布。這個 Beta 分布參數的均值,就是我們剛才所說的均值。在實際操作中,並不是所有的分布都能夠找到這樣方便的先驗分布,使得后驗概率有一個解析解的形式。我們在這里就不展開討論了。另外一個可以擴展的地方就是,到目前為止,我們對於流行度的估計都是針對某一個特定的時段。很明顯,每個時段的估計和前面的時間是有一定關聯的。這也就提醒我們是不是可以用之前的點擊信息,來更加准確地估計現在這個時段的點擊率。答案是可以的。當然,這里會有不同的方法。一種最簡單的方法還是利用我們剛才所說的先驗概率的思想。那就是,當前 T 時刻的點擊和顯示的先驗數值是 T-1 時刻的某種變換。什么意思呢?比如早上 9 點到 10 點,某個物品有 40 次點擊,100 次顯示。那么 10 點到 11 點,我們在還沒有顯示的情況下,就可以認為這個物品會有 20 次點擊,50 次顯示。注意,我們把 9 點到 10 點的真實數據乘以 0.5 用於 10 點到 11 點的先驗數據,這種做法是一種主觀的做法。而且是否乘以 0.5 還是其他數值需要取決於測試。但是這種思想,有時候叫作“時間折扣”(Temporal Discount),是一種非常普遍的時序信息處理的手法。
針對CTR預估還有好多思路和經驗!你如果有興趣,期待我們在廣告里可以繼續探討。