迄今為止符欠,這個系列都在討論嫡霞,如何給出"某個時段"的排名,比如"過去24小時最熱門的文章
但是希柿,很多場合需要的是"所有時段"的排名诊沪,比如"最受用戶好評的產(chǎn)品"。
這時曾撤,時間因素就不需要考慮了端姚。這個系列的最后兩篇,就研究不考慮時間因素的情況下挤悉,如何給出排名渐裸。
一種常見的錯誤算法是:
[得分 = 贊成票 - 反對票
假定有兩個項目,項目A是60張贊成票装悲,40張反對票昏鹃,項目B是550張贊成票,450張反對票诀诊。請問洞渤,誰應(yīng)該排在前面?按照上面的公式属瓣,B會排在前面载迄,因為它的得分(550 - 450 = 100)高于A(60 - 40 = 20)。但是實際上抡蛙,B的好評率只有55%(550 / 1000)护昧,而A為60%(60 / 100),所以正確的結(jié)果應(yīng)該是A排在前面粗截。
[Urban Dictionary就是這種錯誤算法的實例惋耙。
另一種常見的錯誤算法是
得分 = 贊成票 / 總票數(shù)
如果"總票數(shù)"很大,這種算法其實是對的。問題出在如果"總票數(shù)"很少绽榛,這時就會出錯遥金。假定A有2張贊成票、0張反對票蒜田,B有100張贊成票、1張反對票选泻。這種算法會使得A排在B前面冲粤。這顯然錯誤。
Amazon就是這種錯誤算法的實例页眯。
那么梯捕,正確的算法是什么呢?
我們先做如下設(shè)定:
(1)每個用戶的投票都是獨立事件窝撵。
(2)用戶只有兩個選擇傀顾,要么投贊成票,要么投反對票碌奉。
(3)如果投票總?cè)藬?shù)為n短曾,其中贊成票為k,那么贊成票的比例p就等于k/n赐劣。
如果你熟悉統(tǒng)計學(xué)嫉拐,可能已經(jīng)看出來了,這是一種統(tǒng)計分布魁兼,叫做"二項分布"(binomial distribution)婉徘。這很重要,下面馬上要用到咐汞。
我們的思路是盖呼,p越大,就代表這個項目的好評比例越高化撕,越應(yīng)該排在前面几晤。但是,p的可信性侯谁,取決于有多少人投票锌仅,如果樣本太小,p就不可信墙贱。好在我們已經(jīng)知道热芹,p是"二項分布"中某個事件的發(fā)生概率,因此我們可以計算出p的置信區(qū)間惨撇。所謂"置信區(qū)間"伊脓,就是說,以某個概率而言,p會落在的那個區(qū)間报腔。比如株搔,某個產(chǎn)品的好評率是80%,但是這個值不一定可信纯蛾。根據(jù)統(tǒng)計學(xué)纤房,我們只能說,有95%的把握可以斷定翻诉,好評率在75%到85%之間炮姨,即置信區(qū)間是[75%, 85%]。
這樣一來碰煌,排名算法就比較清晰了:
第一步舒岸,計算每個項目的"好評率"(即贊成票的比例)。
第二步芦圾,計算每個"好評率"的置信區(qū)間(以95%的概率)蛾派。
第三步,根據(jù)置信區(qū)間的下限值个少,進(jìn)行排名洪乍。這個值越大,排名就越高夜焦。
這樣做的原理是典尾,置信區(qū)間的寬窄與樣本的數(shù)量有關(guān)。比如糊探,A有8張贊成票钾埂,2張反對票;B有80張贊成票科平,20張反對票褥紫。這兩個項目的贊成票比例都是80%,但是B的置信區(qū)間(假定[75%, 85%])會比A的置信區(qū)間(假定[70%, 90%])窄得多瞪慧,因此B的置信區(qū)間的下限值(75%)會比A(70%)大髓考,所以B應(yīng)該排在A前面。
置信區(qū)間的實質(zhì)弃酌,就是進(jìn)行可信度的修正氨菇,彌補(bǔ)樣本量過小的影響。如果樣本多妓湘,就說明比較可信查蓉,不需要很大的修正,所以置信區(qū)間會比較窄榜贴,下限值會比較大豌研;如果樣本少,就說明不一定可信,必須進(jìn)行較大的修正鹃共,所以置信區(qū)間會比較寬鬼佣,下限值會比較小。
二項分布的置信區(qū)間有多種計算公式霜浴,最常見的是"正態(tài)區(qū)間"(Normal approximation interval)晶衷,教科書里幾乎都是這種方法。但是阴孟,它只適用于樣本較多的情況(np > 5 且 n(1 ? p) > 5)房铭,對于小樣本,它的準(zhǔn)確性很差温眉。
1927年,美國數(shù)學(xué)家 Edwin Bidwell Wilson提出了一個修正公式翁狐,被稱為"威爾遜區(qū)間"类溢,很好地解決了小樣本的準(zhǔn)確性問題。
[size=1.6em]在上面的公式中露懒,表示樣本的"贊成票比例"闯冷,n表示樣本的大小,表示對應(yīng)某個置信水平的z統(tǒng)計量懈词,這是一個常數(shù)蛇耀,可以通過查表或統(tǒng)計軟件包得到。一般情況下坎弯,在95%的置信水平下纺涤,z統(tǒng)計量的值為1.96。
威爾遜置信區(qū)間的均值為
它的下限值為
可以看到抠忘,當(dāng)n的值足夠大時撩炊,這個下限值會趨向。如果n非常衅槁觥(投票人很少)拧咳,這個下限值會大大小于。實際上囚灼,起到了降低"贊成票比例"的作用骆膝,使得該項目的得分變小、排名下降灶体。
Reddit的評論排名阅签,目前就使用這個算法。