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

gat*_*ath 9 algorithm bayesian

我有一个系统,人们可以投票或投票一项,我想将其结果显示为5星评级.

我一直在尝试使用此处此处解释的贝叶斯评级算法,但没有成功.

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

A = 500 UP和500下注B = 0 UP和1000下注C = 0 UP和1000下注

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

Nic*_*son 7

此博客文章" 如何不按平均评分排序"详细描述了您的情况,以及如何使用威尔逊分数置信区间来解决它.Reddit 使用这个效果很好.

  • 为了节省其他时间,这不适用于5星评级,仅适用于正/负评级. (4认同)

Pet*_*man 3

简单代数:

平均投票数 = 所有投票数总和 / 所有项目总和

平均评分 = 所有项目的赞成票数总和 * 5 / 所有投票数总和

CurVotes = 当前项目的投票数

CurRating = 当前项目的赞成票数总和 * 5/ 当前项目的投票数

TotalVotes = 所有票数总和 + 当前项目的票数总和

((AvgVotes * AvgRating) + (CurVotes * CurRating)) * 5 / 总投票数

因此,代入评估 A 重量的数字...

平均投票数 = 1000

AvgRating = 0(请记住,在此计算中不要包含您正在评估的项目的数字)

当前投票数 = 1000

当前评级 = 500 * 5 / 1000 = 2.5

总票数 = 2000 + 1000 = 3000

((1000 * 0) + (1000 * 2.5)) * 5 / 3000 = 4.166

我忘了补充一点,不要在上面的任何计算或总和中包含任何没有投票的项目,否则会减轻负担。

编辑 - 简化的解决方案:

我应该指出,可以执行该问题的简化解决方案。我仅演示了手写形式以供理解。压缩算法如下所示:

定义:

SET = 与当前评估目标无关且得票数大于零的任何内容。

TARGET = 您当前尝试评估的元素

25*(((SET 投票总数)/(SET 项目总数)) + (TARGET 投票总数)) / (TARGET 投票总数 + SET 投票总数)

再次插入评估“A”的数字以进行澄清和证明:

(25*((0/2)+500)) / (1000+2000) = 4.166