评分算法:如何将“喜欢”和“不喜欢”的数量和百分比转换为一个分数?
Posted
技术标签:
【中文标题】评分算法:如何将“喜欢”和“不喜欢”的数量和百分比转换为一个分数?【英文标题】:Scoring algorithms: how to convert the number & % of "Likes" & "Dislikes" into a single score? 【发布时间】:2011-05-18 21:07:19 【问题描述】:我有一个网站,用户可以在其中“喜欢”和“不喜欢”项目。
因此,对于每个项目,我都有数据,例如“喜欢”的总数和“喜欢”的总票数百分比。
我只想计算一个分数以显示给用户。仅使用 % 是行不通的,因为即使 item_A 可能有 90% 的“赞”而 item_B 可能有 80% 的“赞”,如果 item_B 的总票数为 10,000 而 item_A 只有总票数 1,000。
同样,仅使用总“赞”是行不通的,因为虽然一个项目可能有大量“赞”,但如果“赞”的百分比很低,则它的排名不应该很高。
根据上述数据创建单个分数的好算法是什么?
理想情况下,分数应该以某种方式“有意义”或“标准化”。例如,如果我在 IMDB 上看到一部电影的评分为 8/10,我会立即知道这是一部好电影。另一方面,如果我看到 1,370 的分数,我不一定知道这是好还是坏。
【问题讨论】:
您试图描述的算法实现起来并不那么简单:) 在项目的第一阶段,我将简单地实现简单的“百分比算法”并密切关注结果。相应地开发算法相当简单(了解一些编程基础知识)。我确实相信您的问题没有统一的答案(不幸的是) en.wikipedia.org/wiki/Bayesian_average 【参考方案1】:贝叶斯评级非常适合您想做的事情。它处理了票数少但收视率高的问题。
贝叶斯评级使用的是贝叶斯平均值。这是一个数学术语,根据投票的“可信度”计算项目的评级。基于投票数的确定性越大,贝叶斯评级越接近普通的未加权评级。当投票数很少时,一个项目的贝叶斯评分会更接近所有项目的平均评分。
使用这个等式:
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 在此公式中用作“魔术”权重。该值越高,影响贝叶斯评级值所需的票数就越多。
您可以阅读更多here
【讨论】:
【参考方案2】:有几篇关于 Reddit 如何在 here 和 here 上进行此类排名的非常好的文章。简而言之,按照分数的 90% 置信区间的下限对帖子进行排名。投票较少的条目具有较大的置信区间,因此往往排名低于投票较多但平均值相同的条目。
【讨论】:
但接下来的问题是如何计算置信区间。您是使用样本的标准差,还是整组选票的标准差,或者它们的某种加权平均值,还是任意数字?有 10 个“是”票和 0 个“否”票的项目得分的置信区间是多少? @user434507 计算置信区间的公式在文章中。【参考方案3】:也许您可以使用基于百分比的统计数据,然后根据数量对其进行着色?例如红色/橙色/黄色表示兴趣最高,蓝色/绿色/紫色表示兴趣最低,然后允许用户根据百分比或颜色进行排序。
【讨论】:
以上是关于评分算法:如何将“喜欢”和“不喜欢”的数量和百分比转换为一个分数?的主要内容,如果未能解决你的问题,请参考以下文章