在PingWest看到一篇《豆瓣電影打分規(guī)則竟如此簡(jiǎn)單粗暴…》斟或,作者寫(xiě)這篇文章是因?yàn)槎拱陝?chuàng)始人阿北最近寫(xiě)了一篇博文《豆瓣電影評(píng)分八問(wèn)》集嵌,阿北博文是為了回應(yīng)一些外界對(duì)豆瓣電影評(píng)分的質(zhì)疑萝挤,然后作者看到這篇博文后根欧,覺(jué)得豆瓣電影的評(píng)分算法有點(diǎn)low,就寫(xiě)了這樣一篇吐槽文章凤粗。
那么這個(gè)很low的算法究竟是什么樣子的呢酥泛?此處引用阿北原文嫌拣。
豆瓣的注冊(cè)用戶看完一部電影,心情好的話會(huì)來(lái)打個(gè)一到五星的分(有時(shí)候心情不好也會(huì)來(lái))异逐。比方說(shuō)一部電影有42萬(wàn)用戶打分。我們的程序把這42萬(wàn)個(gè)一到五星換算成零到十分灰瞻,加起來(lái)除以42萬(wàn)燥筷,就得到了豆瓣評(píng)分。這個(gè)評(píng)分會(huì)自動(dòng)出現(xiàn)在豆瓣各處院崇,中間沒(méi)有審核肆氓,平時(shí)也沒(méi)有編輯盯著看底瓣。每過(guò)若干分鐘谢揪,程序會(huì)自動(dòng)重跑一遍捐凭,把最新打分的人的意見(jiàn)包括進(jìn)來(lái)拨扶。
簡(jiǎn)單說(shuō)就是計(jì)算每部電影評(píng)論的算數(shù)平均值茁肠,并按此值來(lái)排名。
對(duì)這個(gè)算法持懷疑態(tài)度垦梆,因?yàn)槿绻凑者@個(gè)算法的話,假設(shè)一部小眾文藝片有10個(gè)用戶給了全五星托猩,和一部經(jīng)典老片比如《十二怒漢》相比,小眾文藝片排名比《十二怒漢》還要高京腥,不過(guò)這在豆瓣電影TOP250里面不太可能赦肃。阿北可能只是為了文章寫(xiě)作方便或是保密起見(jiàn)公浪,把算法故意說(shuō)簡(jiǎn)單了,因?yàn)榧偃缍拱旯剂嗽敿?xì)的算法欠气,那電影發(fā)行方的水軍們十分有可能針對(duì)這個(gè)算法制定出有效的刷分策略的』瘟眨可憐小編還真信了。
下面是阿北當(dāng)年在知乎上的回答卫旱。
順著PingWest這篇文章給的鏈接,我又去阮一峰博客看了他在2012年寫(xiě)的《基于用戶投票的排名算法》系列文章顾翼,以及這些文章里的參考文章投放,發(fā)現(xiàn)排名算法很好玩很有趣适贸,非常有收獲涝桅,推薦閱讀。
- 基于用戶投票的排名算法(一):Delicious和Hacker News 2012.02.24
- 基于用戶投票的排名算法(二):Reddit 2012.03.07
- 基于用戶投票的排名算法(三):Stack Overflow 2012.03.11
- 基于用戶投票的排名算法(四):牛頓冷卻定律 2012.03.16
- 基于用戶投票的排名算法(五):威爾遜區(qū)間 2012.03.20
- 基于用戶投票的排名算法(六):貝葉斯平均 2012.03.28
看完這些文章冯遂,我就想知道知乎的評(píng)論排名算法是怎么樣的谒获,于是去知乎找到他們產(chǎn)品經(jīng)理@黃濤的回答蛤肌,知乎在2014年底更新的算法使用的正是Reddit在2009年引入的評(píng)論排名算法批狱,也就是阮一峰老師在系列文章第5篇中介紹的「威爾遜區(qū)間」算法裸准。在用這個(gè)算法之前赔硫,知乎用的是直接利用好評(píng)減去差評(píng)的結(jié)果來(lái)給評(píng)論排序,這種算法的缺點(diǎn)我就不介紹了爪膊,可以查看參考資料[1]权悟。
「威爾遜區(qū)間」算法的數(shù)學(xué)基礎(chǔ)是數(shù)學(xué)家Edwin B. Wilson在1927年提出的威爾遜區(qū)間修正公式惊完,后來(lái)芝加哥工程師Evan Miller在2009年寫(xiě)了一篇博客,認(rèn)為該修正公式可以用來(lái)做排名小槐。
這個(gè)算法的核心思想是這樣的:
- 計(jì)算每個(gè)評(píng)論的好評(píng)率
- 計(jì)算每個(gè)好評(píng)率的置信區(qū)間(以 95% 的概率)荷辕。
- 根據(jù)置信區(qū)間的下限值凿跳,進(jìn)行排名疮方。這個(gè)值越大控嗜,排名就越高骡显。
所謂「置信區(qū)間」就是說(shuō)在某個(gè)概率下(通常是95%),好評(píng)率p會(huì)落在的那個(gè)區(qū)間惫谤。比如,某個(gè)產(chǎn)品的好評(píng)率是 80%溜歪,但是這個(gè)值不一定可信。根據(jù)統(tǒng)計(jì)學(xué)蝴猪,我們只能說(shuō)调衰,有 95% 的把握可以斷定膊爪,好評(píng)率在 75% 到 85% 之間,即置信區(qū)間是[75%米酬, 85%]。
置信區(qū)間的實(shí)質(zhì)赃额,就是進(jìn)行可信度的修正,彌補(bǔ)樣本量過(guò)小的影響爬早。如果樣本多,就說(shuō)明比較可信筛严,不需要很大的修正,所以置信區(qū)間會(huì)比較窄饶米,下限值會(huì)比較大;如果樣本少檬输,就說(shuō)明不一定可信,必須進(jìn)行較大的修正丧慈,所以置信區(qū)間會(huì)比較寬,下限值會(huì)比較小逃默。
因?yàn)槌R?jiàn)的置信區(qū)間計(jì)算公式「正態(tài)區(qū)間」不能很好的照顧小樣本數(shù)量的準(zhǔn)確性,而威爾遜提出的修正公式能很好地修正小樣本數(shù)量的準(zhǔn)確性問(wèn)題完域,所以大家采用「威爾遜區(qū)間」算法較多,像Reddit吟税、Yelp、Digg肠仪,還有知乎。
不過(guò)這種算法也有缺點(diǎn)藤韵,缺點(diǎn)就是對(duì)于那些得票少的新評(píng)論很難獲得出頭之日,因?yàn)榈闷鄙伲眯艆^(qū)間就會(huì)寬镐依,排名位置就會(huì)低,得到的關(guān)注也就會(huì)更少槐壳。
前面阿北的回答里面提到了IMDB,IMDB是亞馬遜旗下的一個(gè)類似豆瓣的電影排名網(wǎng)站务唐,他們?cè)谔幚鞹OP250電影排名問(wèn)題時(shí)采用了「貝葉斯平均」算法來(lái)解決,這個(gè)算法的核心思想是既然新興產(chǎn)品的評(píng)分?jǐn)?shù)量很少枫笛,那我就為你人工補(bǔ)償一定的投票。關(guān)于這種算法在阮一峰老師系列文章第6篇中有介紹刑巧。
更多參考資料: