reddit评论算法
网站的评论排名主要有两种:绝对好评数(好评减去差评),和好评率(好评/总评)
缺陷:
A:好评550;差评450
B:好评60;差评40
C:好评1;差评0
D:好评9;差评1
绝对好评数比较:A(100) > B(20)
好评率比较:A(55%) < B(60%)
改进:
1、用户投票是独立的
2、每个用户有两个选择:好评,差评
3、投票人数是n,好评是k,好评率k/n
这样好评率的高度来排名,但是如果数据样本少的话,就会不准确;
所以好评率要服从置信区间;
好评率75%~85%,那么置信区间[75%,85%]
置信区间的宽窄和数量有关,
<?php
/**
* @param $ups int 好评数
* @param $downs int 差评数
* @return $data
*/
function reddit($ups,$downs) {
$n = $ups + $downs;
if ($n == 0) {
return 0;
}
$z = 1.96;
$p = floatval($ups) / $n;
return ($p+$z*$z/(2*$n)-$z*sqrt(($p*(1-$p)+$z*$z/(4*$n))/$n))/(1+$z*$z/$n);
}
echo reddit(550,450);
echo "\n";
echo reddit(500,200);
echo "\n";
echo reddit(9,1);