如何实现二元评分系统的贝叶斯平均算法

时间:2010-07-01 14:17:24

标签: algorithm bayesian

我有一个人们可以投票或投票的系统,我希望将其结果显示为5星评级。

我一直在尝试使用解释herehere的贝叶斯评分算法,但没有成功。

例如:我的数据库中有三个项目(A,B和C):

A = 500 UP和500票 B = 0 UP和1000次投票 C = 0 UP和1000次投票

如何计算每个项目的贝叶斯平均评分,使其得分为1到5分?

2 个答案:

答案 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