熱度TopN排名算法的設計

熱度TopN排名算法的設計

轉載於

最近開始在簡書上混,今日在首頁上不經意間看到一篇《從豆瓣電影評分算法說起》,感覺有點眼熟,就點了進去。

其實阿北的那篇《豆瓣電影評分八問》,我也是剛看過,這可能也是讓我覺得眼熟的原因。

熱度TopN排名榜

其他的不多說,其實讓我耳目一新的是作者說的用戶投票排名算法。

我之所以說是耳目一新,那是因爲類似這種熱度TopN排名的算法,在一年前接觸過,也設計過排名算法,並且,至今然仍在用,那就是“極客頭條"的最熱排行榜。

而現在,總算是接觸到比較完整的算法描述了,對排名算法也有了一個比較系統的認知,所以甚是感激。

其他的先不說,先把阮一峯老師的基礎六大算法排上,讓大夥兒對用戶投票排名算法有個大概瞭解:

(1) 基於用戶投票的排名算法(一):Delicious和Hacker News 2012.02.24

(2) 基於用戶投票的排名算法(二):Reddit 2012.03.07

(3) 基於用戶投票的排名算法(三):Stack Overflow 2012.03.11

(4) 基於用戶投票的排名算法(四):牛頓冷卻定律 2012.03.16

(5) 基於用戶投票的排名算法(五):威爾遜區間 2012.03.20

(6) 基於用戶投票的排名算法(六):貝葉斯平均 2012.03.28

回到這邊,關於極客頭條的最熱排行榜,當時雖然沒有系統的瞭解到六大算法,但是考慮還算是周全,也不算太low。

我們當時考慮以下幾個排名影響因素,例如,文章的頂、踩、評論、瀏覽數以及發佈時間等。至於公式算法就不方便公開了,整個算法也還算可以。

結合之前的實際操作以及現在的系統瞭解,對於熱度排名算法的設計也有了一些新的理解。

有些時候,差評不一定就是負影響!

從六大算法中我們可以知道,贊成票對結果起着正影響,而反對票則負影響。比如Reddis算法中,贊成票與反對票的差集越大,對結果正影響越大;而在威爾遜區間計算中,核心依據是好評率。

其實,在真實的業務場景中,不一定是這樣的,如果我們單純的是爲優質文章做熱度排序,這種做法毋庸置疑。但是,如果我們是爲類似辯論性,或者觀點性的文章做熱度排序呢?

針對於這種場景,個人認爲頂踩都很重要,兩個點能夠反映這種辯論文章的質量:頂踩數總和很多,頂踩勢均力敵。

頂踩數總和多,說明參與的人多;而頂踩數伯仲相間,說明話題辯論很劇烈,而不會是一邊倒。擁有這兩個特點,說明這個辯論文章就是一個優質文章,能夠引起衝突的熱點。

這麼一分析,我們會發現,六大算法其實是都不太適合的。我們需要實際的分析業務場景,然後定製出符合場景的熱度計算。

掌握時間衰減的度!

關於時間衰減,六大算法中的Hacker News算法首先提到。然後其他幾個基本上也都參考了時間對於熱度的影響。

通常來講,隨着時間遷移,熱度是需要下降的,不然就會出現馬太效應,熱者愈熱,冷者愈冷。

關於時間衰減方式,可以各種各樣,六大算法中也提到了幾種不同的衰減方式。這不是重點。重點是,我們在設計排名算法時,需要掌握好下降的速度,這需要結合實際的業務需求進行調整。

我認爲新文章的冷啓動不是一個問題。

在最後一個算法中,即貝葉斯平均中。作者提到了如何解決一些新文章特徵不夠,導致不公平的問題。

在初期,設計極客頭條的最熱排行榜時,我也考慮過新文章數據少導致排名偏低的問題,但仔細分析之後發現並不是這麼回事。

所謂熱度榜,我們希望排在前頭的就是熱度高的文章,新的文章交互少,那麼說明它就是不熱,這是一個現實。

那麼我們怎麼解決這個問題的呢?分榜,分別使用“最新榜”和“最熱榜”。最熱榜單,我只關注熱點,而最新則唯一依據就是時間。

這樣,我們會發現最新產生的交互數據會給最熱榜單帶來榜單排名的移動,是一種互補的作用。

而關於貝葉斯平均中提到的影片分類的問題,其實在總榜中,那種小衆的分類在總類中本來就屬於不熱數據,所以理應讓他靠後,而不是人爲把他熱度進行提升。還有一個解決方案就是,做分類的熱度分榜。

置信區間確實能夠解決小樣本數據的問題。

威爾遜區間算法中提到了置信區間,簡單來說就是通過樣本數的多寡來調整置信區間,而置信區間下限則參與計算。

說白了就是樣本數小的時候,好評率更不可信,所以要適當的降低好評率影響,樣本數多的時候,數據更能反映真實,則小範圍進行調整。

關於這一點,極客頭條是有改進的空間的。不過其他幾個方面的設計倒是挺完善的了。

多維參考時,權重可以通過線性迴歸計算得到。

很多時候,我們在做熱度排名時,會同時參考多個維度的屬性。最後得到的是一個綜合多個屬性考量的熱度值。

那麼,我們如何來確定每個屬性值對於熱度的影響有多大呢?換句話說就是每個屬性帶來的權重是多少。

我們可以通過人工+統計的方式進行確定。人工進行熱度值定義,然後獲取不同維度的屬性值,那麼剩下來就是已知Y,求X1、X2...的參數的線性迴歸問題了。

最後的建議:我們在設計熱度排名算法時,不必拘泥於這六大排名算法,多考慮一下實際業務場景,最主要的是對當前業務的熱度有一個比較清晰的定位,這樣才能根據實際情況進行算法設計以及相關調整,而不是對着算法照搬照抄。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章