6

我在网站上实现了一个简单的上/下投票系统,我跟踪个人投票以及投票时间和唯一用户 ID(散列 IP)。

我的问题不是如何计算选票的百分比或总和 - 而是更多,根据选票确定好分数的好算法是什么?

我发现按纯投票百分比排序是不可接受的,以及简单地统计赞成票。

考虑这个例子:

  • 图片 A:4 票赞成,1 票反对
  • 图片 B:5 票赞成,4 票反对
  • 图片 C:1 票赞成,0 票反对

理想的系统会将 A 放在首位,然后可能是 B,然后是 C。

在纯百分比场景中,顺序为 C > A > B。(错误)在纯计票场景中,顺序为 B > A > C。(错误)

我有一个基于系统对分数的信心的某种“混合”算法的想法,可能类似于:

// (if totalvotes > 0, else score = 0)
score = 1 - ((downvotes+1 / totalvotes+1) * sqrt(1 / totalvotes))

但是,我希望在从现在到日落之前坐下来调整我的算法之前,询问社区是否已经存在任何我根本不知道的定义明确的算法。

我也有每次投票的日期数据——但是,网站的内容对时间不是很敏感,所以我根本不在乎按“热门内容”排序。

4

2 回答 2

2

按平均票数排序不是很好。

相反,通过平衡正面评分的比例与本文中解释的少量观察的不确定性,您可以获得更好的分数表示。

下面的文章解释了如何不犯许多流行网站所犯的错误。(亚马逊、城市词典等)

http://evanmiller.org/how-not-to-sort-by-average-rating.html

希望这可以帮助!

于 2012-04-22T18:14:47.527 回答
0

我知道这不能回答你的问题,但我只是花了 3 分钟的时间来寻找一些公式,然后……检查一下:) A 列是赞成票,B 是反对票 :)

=(LN((A1+1)/(A1+B1+1))+1)*LN(A1)

5   3       0.956866995
4   1       1.133543015
5   4       0.787295787
1   0       0
6   4       0.981910844
2   8       -0.207447157
6   5       0.826007385
3   3       0.483811507
4   0       1.386294361
5   0       1.609437912
6   1       1.552503332
5   2       1.146431478
100 100     -3.020151034
10  10      0.813671022
于 2012-04-22T17:58:01.510 回答