评分算法:如何将"喜欢"和"不喜欢"的数量和百分比转换为单个得分?

Con*_*ion 9 algorithm scoring voting social-networking

我有一个网站,用户可以"喜欢"和"不喜欢"的项目.

因此,对于每个项目,我都有数据,例如"喜欢"的总数和"赞"的总投票数百分比.

我想计算一个只给用户显示的分数.使用只有%不起作用,因为即使item_A可能有90%的"喜欢",而item_B可能有80%的"喜欢",如果item_B有10,000个总票数,item_B仍应排在item_A前面,而item_A只有总票数为1,000.

同样地,仅使用总"喜欢"是行不通的,因为虽然项目可能具有大量"喜欢",但如果"喜欢"的百分比低,则不应该排名很高.

从上面的数据中创建单个分数的好算法是什么?

理想情况下,分数应该以某种方式"有意义"或"标准化".例如,如果我去IMDB,我看到一部电影得分为8/10,我立即知道这是一部好电影.另一方面,如果我看到得分为1,370,我不一定知道这是好还是坏.

Nic*_*son 9

有Reddit上如何做这类排名的夫妻感情很好的文章在这里,并在这里.简而言之,按照得分的90%置信区间的低端对帖子进行排名.投票数较少的参赛作品的置信区间较大,因此排名较低,而且投票数较多,但平均值相同.


Cyb*_*ent 9

贝叶斯评级非常适合您想要做的事情.它负责更少的投票,但更高的评级问题.

贝叶斯评级使用贝叶斯平均值.这是一个数学术语,根据投票的"可信度"计算项目的评级.基于投票数的确定性越大,贝叶斯评级越接近普通的未加权评级.当投票数很少时,项目的贝叶斯评级将更接近所有项目的平均评级.

使用此等式:

br =((avg_num_votes*avg_rating)+(this_num_votes*this_rating))/(avg_num_votes + this_num_votes)

传说:

avg_num_votes:num_votes> 0
avg_rating 的所有项目的平均投票数:每个项目的平均评分(同样,num_votes> 0的项目)
this_num_votes:此项目的投票数this_rating:此项目
的评级

注意:avg_num_votes用作此公式中的"魔法"权重.该值越高,影响贝叶斯评级值所需的票数就越多.

你可以在这里阅读更多