平均評価でソートしない方法を読んだので、試してみるべきだと思いました。
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
これは私が望むスコアの種類に近く、数値ハックとしては実行可能だと思いますが、数学的に正当化することはできません
より良い方法、「正しい」方法はありますか?