我有一个人们可以投票或投票的系统,我希望将其结果显示为5星评级。
我一直在尝试使用解释here和here的贝叶斯评分算法,但没有成功。
例如:我的数据库中有三个项目(A,B和C):
A = 500 UP和500票 B = 0 UP和1000次投票 C = 0 UP和1000次投票
如何计算每个项目的贝叶斯平均评分,使其得分为1到5分?
答案 0 :(得分:7)
此博客文章How Not To Sort By Average Rating描述了您的具体情况,以及如何使用Wilson Score confidence interval解决问题。 Reddit used this效果很好。
答案 1 :(得分:3)
简单代数:
AvgVotes =所有投票的总和/所有项目的总和
AvgRating =所有项目的总票数* 5 /所有票数总和
CurVotes =当前项目的投票数
CurRating =当前项目的投票总数* 5 /当前项目的投票数
TotalVotes =所有选票的总和+当前项目的投票总数
((AvgVotes * AvgRating)+(CurVotes * CurRating))* 5 / TotalVotes
所以请插入评估A ...的重量的数字
AvgVotes = 1000
AvgRating = 0(请记住,不要在此计算中包含您正在评估的项目的数字)
CurVotes = 1000
CurRating = 500 * 5/1000 = 2.5
总票数= 2000 + 1000 = 3000
((1000 * 0)+(1000 * 2.5))* 5/3000 = 4.166
我忘记添加,不包括任何计算中的任何项目或上面没有投票的项目,否则它会减轻权重。
编辑 - 简化解决方案:
我应该注意到,可以执行的问题有一个简化的解决方案。我只展示了理解的速记形式。压缩算法如下:
说明:
SET =与投票大于零的当前评估目标无关的任何内容。
TARGET =您当前正在尝试评估的元素
25 *(((SET总票数总和)/(SET项目总和))+(目标总票数))/(TARGET票数和SET票数之和)
再次插入评估'A'的数字以便澄清和证明:
(25 *((0/2)+500))/(1000 + 2000)= 4.166