【问题标题】: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 的分数,我不一定知道这是好还是坏。

【问题讨论】:

  • 您试图描述的算法实现起来并不那么简单:) 在项目的第一阶段,我将简单地实现简单的“百分比算法”并密切关注结果。相应地开发算法相当简单(了解一些编程基础知识)。我确实相信您的问题没有统一的答案(不幸的是)

标签: algorithm social-networking voting scoring


【解决方案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】:

    也许您可以使用基于百分比的统计数据,然后根据数量对其进行着色?例如红色/橙色/黄色表示兴趣最高,蓝色/绿色/紫色表示兴趣最低,然后允许用户根据百分比或颜色进行排序。

    【讨论】:

      猜你喜欢
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      相关资源
      最近更新 更多