我正在创建一个'决斗'应用程序,我无法计算结果。
每个用户都有一个upvote或downvote。没有1-5或五星评级。
例如:如果我被展示了5次并赢得了3次,那么我将获得3次'upvotes'和2次'downvotes'。
如果我做了直接百分比,那么任何一次显示并且选择1次(100%)的人将永远是顶部,就好像有人是9/10(90%)他们将低于1/1但是在理论将属于最重要的。
任何人对如何做到这一点都有任何想法?
答案 0 :(得分:4)
我也一直在为投票网站寻找合适的算法。
虽然@joshhendo建议看起来似乎是一种对选票进行排名的合理方法,但它没有考虑正面投票的百分比。
例如:
对于第1项:70-30 = 40
对于第2项:400-300 = 100
第2项将出现在第1项上方,因为它有更多正面投票。但是第2项只有25%的正票,而第1项的正票数为57%。第1项显然应该出现在第2项之上,因为即使它没有那么多的总票数,它也有更好的“向上”到“向下”投票比率。
但话又说回来,人们希望避免出现一票(正面)出现在其他一切之上的物品的初始问题。
我建议你阅读:http://www.evanmiller.org/how-not-to-sort-by-average-rating.html
它提出了一个更加数学上合理解决这个问题的方法。这实际上是一个非常有趣的阅读,我将在我自己的网站上实现类似的东西。
[编辑]
这也是一个非常好的读物:http://blog.linkibol.com/2010/05/07/how-to-build-a-popularity-algorithm-you-can-be-proud-of/
[/编辑]
答案 1 :(得分:2)
你可以统一选票,投票数为+1,投票数为-1。
例如,假设有人是9/10(例如,有9个投票和1个投票),那么他们的分数将是9 + -1 = 8
。这高于1/1,有1个投票和0个投票,因此他们的得分为1 + -0 = 1
。所以,那些在你的百分比系统中得到90%的人现在得分为8,这比得分为1的100%的人高。
这是我能想到的最好,最简单的解决方案。可能有更复杂的解决方案可行,但是对于你想要的,我认为应该有效。
答案 2 :(得分:2)
而不是正投票百分比,跟踪贝叶斯平均值,例如:
(positive votes + weighted avg positive votes) / (total votes + arbitrary sample)
答案 3 :(得分:0)
您可以获得加权分数。
跟踪每个用户的积分和排名得分
让p成为你的对手得分(两端都是0到1的范围。)当你进行战斗时,你获胜时获得1-q分,当你输了时你会失去q分。这意味着如果你输了一个总能获胜的人,那就不会伤害到你。如果你输给了几乎总是输了的人,那么你将失去很多分数。
每个(日,小时,等等)重新计算每个人的q,其中#1人获得1的等级(或者1.5或2,无论如何,但是1是最好的),最低的人得到aq为0。