從豆瓣電影評分演算法說起,聊聊排名演算法
15 人贊了文章
在PingWest看到一篇《豆瓣電影打分規則竟如此簡單粗暴…》,作者寫這篇文章是因為豆瓣創始人阿北最近寫了一篇博文《豆瓣電影評分八問》,阿北博文是為了回應一些外界對豆瓣電影評分的質疑,然後作者看到這篇博文後,覺得豆瓣電影的評分演算法有點low,就寫了這樣一篇吐槽文章。
那麼這個很low的演算法究竟是什麼樣子的呢?此處引用阿北原文。
豆瓣的註冊用戶看完一部電影,心情好的話會來打個一到五星的分(有時候心情不好也會來)。比方說一部電影有42萬用戶打分。我們的程序把這42萬個一到五星換算成零到十分,加起來除以42萬,就得到了豆瓣評分。這個評分會自動出現在豆瓣各處,中間沒有審核,平時也沒有編輯盯著看。每過若干分鐘,程序會自動重跑一遍,把最新打分的人的意見包括進來。
簡單說就是計算每部電影評論的算數平均值,並按此值來排名。
對這個演算法持懷疑態度,因為如果按照這個演算法的話,假設一部小眾文藝片有10個用戶給了全五星,和一部經典老片比如《十二怒漢》相比,小眾文藝片排名比《十二怒漢》還要高,不過這在豆瓣電影TOP250裡面不太可能。阿北可能只是為了文章寫作方便或是保密起見,把演算法故意說簡單了,因為假如豆瓣公布了詳細的演算法,那電影發行方的水軍們十分有可能針對這個演算法制定出有效的刷分策略的。可憐小編還真信了。
下面是阿北當年在知乎上的回答。
順著PingWest這篇文章給的鏈接,我又去阮一峰博客看了他在2012年寫的《基於用戶投票的排名演算法》系列文章,以及這些文章里的參考文章,發現排名演算法很好玩很有趣,非常有收穫,推薦閱讀。
- 基於用戶投票的排名演算法(一):Delicious和Hacker News 2012.02.24
- 基於用戶投票的排名演算法(二):Reddit 2012.03.07
- 基於用戶投票的排名演算法(三):Stack Overflow 2012.03.11
- 基於用戶投票的排名演算法(四):牛頓冷卻定律 2012.03.16
- 基於用戶投票的排名演算法(五):威爾遜區間 2012.03.20
- 基於用戶投票的排名演算法(六):貝葉斯平均 2012.03.28
看完這些文章,我就想知道知乎的評論排名演算法是怎麼樣的,於是去知乎找到他們產品經理@黃濤的回答,知乎在2014年底更新的演算法使用的正是Reddit在2009年引入的評論排名演算法,也就是阮一峰老師在系列文章第5篇中介紹的「威爾遜區間」演算法。在用這個演算法之前,知乎用的是直接利用好評減去差評的結果來給評論排序,這種演算法的缺點我就不介紹了,可以查看參考資料[1]。
「威爾遜區間」演算法的數學基礎是數學家Edwin B. Wilson在1927年提出的威爾遜區間修正公式,後來芝加哥工程師Evan Miller在2009年寫了一篇博客,認為該修正公式可以用來做排名。
這個演算法的核心思想是這樣的:
計算每個評論的好評率計算每個好評率的置信區間(以 95% 的概率)。根據置信區間的下限值,進行排名。這個值越大,排名就越高。
所謂「置信區間」就是說在某個概率下(通常是95%),好評率p會落在的那個區間。比如,某個產品的好評率是 80%,但是這個值不一定可信。根據統計學,我們只能說,有 95% 的把握可以斷定,好評率在 75% 到 85% 之間,即置信區間是[75%, 85%]。
置信區間的實質,就是進行可信度的修正,彌補樣本量過小的影響。如果樣本多,就說明比較可信,不需要很大的修正,所以置信區間會比較窄,下限值會比較大;如果樣本少,就說明不一定可信,必須進行較大的修正,所以置信區間會比較寬,下限值會比較小。
因為常見的置信區間計算公式「正態區間」不能很好的照顧小樣本數量的準確性,而威爾遜提出的修正公式能很好地修正小樣本數量的準確性問題,所以大家採用「威爾遜區間」演算法較多,像Reddit、Yelp、Digg,還有知乎。
不過這種演算法也有缺點,缺點就是對於那些得票少的新評論很難獲得出頭之日,因為得票少,置信區間就會寬,排名位置就會低,得到的關注也就會更少。
前面阿北的回答裡面提到了IMDB,IMDB是亞馬遜旗下的一個類似豆瓣的電影排名網站,他們在處理TOP250電影排名問題時採用了「貝葉斯平均」演算法來解決,這個演算法的核心思想是既然新興產品的評分數量很少,那我就為你人工補償一定的投票。關於這種演算法在阮一峰老師系列文章第6篇中有介紹。
更多參考資料:
- How Not To Sort By Average Rating
- How Reddit ranking algorithms work
- 基於用戶評價的評分模型
- 基於用戶投票的打分演算法
- Reddit評論排名演算法
- Reddit的排名演算法
- 數學之美:IMDB.COM排名演算法
- Hacker News的熱門排名演算法
推薦閱讀:
※我在業內處於什麼位置?我和頂尖PM的差距是什麼?
※產品經理可以被培訓出來嗎
※【從零開始學產品】的專欄成立啦
※人性7宗罪和馬斯洛需求的區別是這個
※身為產品經理,你真的入門了么?