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,我不一定知道这是好还是坏.
贝叶斯评级非常适合您想要做的事情.它负责更少的投票,但更高的评级问题.
贝叶斯评级使用贝叶斯平均值.这是一个数学术语,根据投票的"可信度"计算项目的评级.基于投票数的确定性越大,贝叶斯评级越接近普通的未加权评级.当投票数很少时,项目的贝叶斯评级将更接近所有项目的平均评级.
使用此等式:
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用作此公式中的"魔法"权重.该值越高,影响贝叶斯评级值所需的票数就越多.
你可以在这里阅读更多