2012-10-02 57 views
3

已讀How Not To Sort By Average Rating我想我應該試試看。Wilson評分未評級與負評分實體 - 如何處理?

CREATE FUNCTION `mydb`.`LowerBoundWilson95` (pos FLOAT, neg FLOAT) 
RETURNS FLOAT DETERMINISTIC 
RETURN 
IF(
    pos + neg <= 0, 
    0, 
    (
     (pos + 1.9208)/(pos + neg) 
     - 
     1.96 * SQRT(
      (pos * neg)/(pos + neg) + 0.9604 
     ) 
     /(pos + neg) 
    ) 
    /
    (
     1 + 3.8416 
     /(pos + neg) 
    ) 
); 

運行一些測試,我發現,與pos=0neg>0對象有非常小的,但非負的成績,而與pos=neg=0對象有零分,排名較低。

我認爲一個未評級的對象應該列在一個沒有正面評級但有一些否定的列表上面。我推論說:「個人評分都是真實的偏離某些基線的表現,所以我會移動基線,我會給每個對象一個'中立'的初始分數,」所以我想出了這個:

CREATE FUNCTION `mydb`.`AdjustedRating` (pos FLOAT, neg FLOAT) 
RETURNS FLOAT DETERMINISTIC 
RETURN 
(
    SELECT `mydb`.`LowerBoundWilson95` (pos+4, neg+4) 
); 

這裏是AdjustedRating

\ pos 0  1  2 
neg 
0 | 0.215 | 0.188 | 0.168 
1 | 0.266 | 0.235 | 0.212 
2 | 0.312 | 0.280 | 0.235 

這是更接近排序分數我想的和數值劈我想這是可行的一些樣本輸出,但我不能數學上證明它

有沒有更好的方法,「正確」的方式?

+0

這可能部分是浮動/舍入問題嗎?我已經在Python中實現了這個算法,並且來自'pos = 0'和'neg> 0',我得到了'0.0',即未分級和被降級的項目是相等的。仍然不是你想要的,你的抵消似乎運作良好 – Anentropic

回答

2

問題出現了,因爲這種近似(較低的置信界限)確實是用於識別列表中評分最高的項目。如果您對最低排名感興趣,您可以採取較高的置信度限制。

或者,我們使用貝葉斯統計量,這正是您描述的第二種方法的形式化。埃文·米勒竟然出現了followup post這個,他說:

的解決方案,我以前提出的 - 使用下界圍繞均值置信區間的 - 就是計算機程序員調用黑客攻擊。它並不是因爲它是一個普遍最佳的解決方案,而是因爲它大致對應於我們希望在最佳評分列表頂部看到的東西的直觀感覺:給定數據的概率最小的項目。

貝葉斯統計讓我們形式化的直覺......

使用貝葉斯排序方法,具有零數據將回落到之前平均(你是指什麼作爲初始分數)和任意點然後在收集數據時離開它。這也是IMDB用來計算其頂級電影列表的方法。 https://math.stackexchange.com/questions/169032/understanding-the-imdb-weighted-rating-function-for-usage-on-my-own-website

您建議記入每個對象4個upvotes和4個downvotes的具體方法相當於用8票的權重來表示0.5的平均值。鑑於沒有任何其他數據,這是一個合理的開始。拉普拉斯着名地在sunrise problem中爭辯說,事件應該有1次成功和1次失敗。在項目排名問題中,我們有更多的知識,因此將先驗均值設置爲平均排名是有意義的。這個先驗均值的權重(或者作爲數據的函數移動的速度有多快,也被稱爲先驗偏差)可能很難設定。

對於IMDB排名前250的電影,他們使用的平均電影排名爲7。1的票數爲25000票,這相當於將所有電影視爲以25000個「免費」票開始,評級爲7.1

+0

非常感謝,這是非常有趣的,但如果你想要一個最高評分項目的下限和最低評分項目的上限,你如何有一個單一的公式排名*所有*項目?如果所有感興趣子集的評分均爲負值或不敏感會怎麼樣?我希望在所有情況下都能使用相同的公式。 – spraff

+0

貝葉斯排名方法通過使用在數據很少時回落到全球平均值的平均值來取代置信區間的上限和下限。例如,IMDB使用相同的公式來製作他們的熱門電影以及所有時間最糟糕的電影列表。如果沒有可用的排名,則該項目僅獲取全球平均值,因此將排在所有項目的中間。 – bscan