已讀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=0
和neg>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
這是更接近排序分數我想的和數值劈我想這是可行的一些樣本輸出,但我不能數學上證明它
有沒有更好的方法,「正確」的方式?
這可能部分是浮動/舍入問題嗎?我已經在Python中實現了這個算法,並且來自'pos = 0'和'neg> 0',我得到了'0.0',即未分級和被降級的項目是相等的。仍然不是你想要的,你的抵消似乎運作良好 – Anentropic