迄今為止,這個(gè)系列都在討論,如何給出"某個(gè)時(shí)段"的排名,比如"過(guò)去24小時(shí)最熱門(mén)的文章
但是,很多場(chǎng)合需要的是"所有時(shí)段"的排名,比如"最受用戶好評(píng)的產(chǎn)品"。
這時(shí),時(shí)間因素就不需要考慮了。這個(gè)系列的最后兩篇,就研究不考慮時(shí)間因素的情況下,如何給出排名。
一種常見(jiàn)的錯(cuò)誤算法是:
[得分 = 贊成票 - 反對(duì)票
假定有兩個(gè)項(xiàng)目,項(xiàng)目A是60張贊成票,40張反對(duì)票,項(xiàng)目B是550張贊成票,450張反對(duì)票。請(qǐng)問(wèn),誰(shuí)應(yīng)該排在前面?按照上面的公式,B會(huì)排在前面,因?yàn)樗牡梅郑?50 - 450 = 100)高于A(60 - 40 = 20)。但是實(shí)際上,B的好評(píng)率只有55%(550 / 1000),而A為60%(60 / 100),所以正確的結(jié)果應(yīng)該是A排在前面。
[Urban Dictionary就是這種錯(cuò)誤算法的實(shí)例。
另一種常見(jiàn)的錯(cuò)誤算法是
得分 = 贊成票 / 總票數(shù)
如果"總票數(shù)"很大,這種算法其實(shí)是對(duì)的。問(wèn)題出在如果"總票數(shù)"很少,這時(shí)就會(huì)出錯(cuò)。假定A有2張贊成票、0張反對(duì)票,B有100張贊成票、1張反對(duì)票。這種算法會(huì)使得A排在B前面。這顯然錯(cuò)誤。
Amazon就是這種錯(cuò)誤算法的實(shí)例。
那么,正確的算法是什么呢?
我們先做如下設(shè)定:
(1)每個(gè)用戶的投票都是獨(dú)立事件。
(2)用戶只有兩個(gè)選擇,要么投贊成票,要么投反對(duì)票。
(3)如果投票總?cè)藬?shù)為n,其中贊成票為k,那么贊成票的比例p就等于k/n。
如果你熟悉統(tǒng)計(jì)學(xué),可能已經(jīng)看出來(lái)了,這是一種統(tǒng)計(jì)分布,叫做"二項(xiàng)分布"(binomial distribution)。這很重要,下面馬上要用到。
我們的思路是,p越大,就代表這個(gè)項(xiàng)目的好評(píng)比例越高,越應(yīng)該排在前面。但是,p的可信性,取決于有多少人投票,如果樣本太小,p就不可信。好在我們已經(jīng)知道,p是"二項(xiàng)分布"中某個(gè)事件的發(fā)生概率,因此我們可以計(jì)算出p的置信區(qū)間。所謂"置信區(qū)間",就是說(shuō),以某個(gè)概率而言,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%]。
這樣一來(lái),排名算法就比較清晰了:
第一步,計(jì)算每個(gè)項(xiàng)目的"好評(píng)率"(即贊成票的比例)。
第二步,計(jì)算每個(gè)"好評(píng)率"的置信區(qū)間(以95%的概率)。
第三步,根據(jù)置信區(qū)間的下限值,進(jìn)行排名。這個(gè)值越大,排名就越高。
這樣做的原理是,置信區(qū)間的寬窄與樣本的數(shù)量有關(guān)。比如,A有8張贊成票,2張反對(duì)票;B有80張贊成票,20張反對(duì)票。這兩個(gè)項(xiàng)目的贊成票比例都是80%,但是B的置信區(qū)間(假定[75%, 85%])會(huì)比A的置信區(qū)間(假定[70%, 90%])窄得多,因此B的置信區(qū)間的下限值(75%)會(huì)比A(70%)大,所以B應(yīng)該排在A前面。
置信區(qū)間的實(shí)質(zhì),就是進(jìn)行可信度的修正,彌補(bǔ)樣本量過(guò)小的影響。如果樣本多,就說(shuō)明比較可信,不需要很大的修正,所以置信區(qū)間會(huì)比較窄,下限值會(huì)比較大;如果樣本少,就說(shuō)明不一定可信,必須進(jìn)行較大的修正,所以置信區(qū)間會(huì)比較寬,下限值會(huì)比較小。
二項(xiàng)分布的置信區(qū)間有多種計(jì)算公式,最常見(jiàn)的是"正態(tài)區(qū)間"(Normal approximation interval),教科書(shū)里幾乎都是這種方法。但是,它只適用于樣本較多的情況(np > 5 且 n(1 ? p) > 5),對(duì)于小樣本,它的準(zhǔn)確性很差。
1927年,美國(guó)數(shù)學(xué)家 Edwin Bidwell Wilson提出了一個(gè)修正公式,被稱為"威爾遜區(qū)間",很好地解決了小樣本的準(zhǔn)確性問(wèn)題。
[size=1.6em]在上面的公式中,表示樣本的"贊成票比例",n表示樣本的大小,表示對(duì)應(yīng)某個(gè)置信水平的z統(tǒng)計(jì)量,這是一個(gè)常數(shù),可以通過(guò)查表或統(tǒng)計(jì)軟件包得到。一般情況下,在95%的置信水平下,z統(tǒng)計(jì)量的值為1.96。
威爾遜置信區(qū)間的均值為
它的下限值為
可以看到,當(dāng)n的值足夠大時(shí),這個(gè)下限值會(huì)趨向。如果n非常?。ㄍ镀比撕苌伲?,這個(gè)下限值會(huì)大大小于。實(shí)際上,起到了降低"贊成票比例"的作用,使得該項(xiàng)目的得分變小、排名下降。
Reddit的評(píng)論排名,目前就使用這個(gè)算法。