9

我有一个网站,用户可以在其中“喜欢”和“不喜欢”项目。

因此,对于每个项目,我都有数据,例如“喜欢”的总数和“喜欢”的总票数百分比。

我想只计算一个分数以显示给用户。仅使用 % 是行不通的,因为即使 item_A 可能有 90% 的“赞”而 item_B 可能有 80% 的“赞”,如果 item_B 的总票数为 10,000 而 item_A 只有总票数 1,000。

同样地,仅使用总“喜欢”是行不通的,因为虽然一个项目可能有大量“喜欢”,但如果“喜欢”的百分比很低,它不应​​该排名很高。

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

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

4

3 回答 3

10

有几篇关于 Reddit 如何在此处此处进行此类排名的非常好的文章。简而言之,按照分数的 90% 置信区间的下限对帖子进行排名。票数较少的条目具有较大的置信区间,因此往往排名低于票数较多但平均值相同的条目。

于 2010-12-02T02:40:20.803 回答
10

贝叶斯评级非常适合您想做的事情。它解决了票数较少但收视率较高的问题。

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

使用这个等式:

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 在此公式中用作“魔术”权重。该值越高,影响贝叶斯评级值所需的票数就越多。

你可以在这里阅读更多

于 2010-12-02T20:41:34.190 回答
1

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

于 2010-12-02T02:33:57.763 回答