对于今年的学生会,我是“歌曲”委员会的工作,我们选择了歌曲。不幸的是,舞蹈的孩子们总是最终讨厌一些愚蠢的歌曲选择。我以为我今年可以做出不同。上周四,我创建了一个简单的PHP应用程序,以便孩子们可以将歌曲提交到数据库中,从而提供歌曲名称,艺术家和类型(从下拉菜单中)。我还实施了类似于Reddit的投票功能。单击“电击”按钮,您已经对歌曲进行了投票,并增加了upvote计数。与下降相同。

任何人,在数据库中,我都有三个信息,我认为我可以用来对这些歌曲,投票,下降投票和时间戳进行评分。一段时间以来,排名是通过简单地将“投票”较高的歌曲在顶部计算出来的。也就是说,越来越多的投票,较少的下降投票(upvotes -downvotes)将位于列表的顶部。有一段时间,但到周日列表中大约有75首歌曲,首先提交的歌曲只是名单的顶部。

周日,我将等级算法更改为(upvotes -downvotes) /(CurrentTimestamp -createTimestamp),也就是说,在较少的时间内,投票数越高,歌曲就越高。这是有效的,更好,但仍然不是我想要的。

现在发生的事情是,创建歌曲的瞬间并投入了1个投票数,最终排在列表的顶部。在否定方面有投票数的歌曲不经常观看,因为孩子通常不会滚动到底部。

我想我可以对数据进行排序,以便较低的歌曲出现在顶部,因此人们被迫看到较低的歌曲。老实说,我以前从来不必从事“受欢迎程度”算法,所以,您的想法是什么?

网站在 http://www.songs.taphappysoftware.com - 我不知道我是否应该把它放在这里,可能会在舞蹈中引起一些不必要的歌曲:0

有帮助吗?

解决方案

这是一个很好的问题。这里有一些类似的问题。

本文 可能是一个很好的起点。显然,投资减去投票是一种不好的方法。更好的方法是使用 复杂的数学 为每个分配分数并按下分类。

这是文章中Ruby中的评分函数:

require 'statistics2'

def ci_lower_bound(pos, n, power)
    if n == 0
        return 0
    end
    z = Statistics2.pnormaldist(1-power/2)
    phat = 1.0*pos/n
    (phat + z*z/(2*n) - z * Math.sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n)
end

pos 是正等级的数量, n 是评级的总数,并且 power 指统计能力:选择0.10以使您的下限正确的机会有95%,0.05的机会为97.5%,机会等。

作为可用性,我会按分数对数据进行排序,但我不会向用户显示分数。我只会显示高投票和低价投票的数量。

其他提示

如何通过发布时间或票数(负 +正面)来分类歌曲?如果您的目标是给每首歌平等关注,那么这听起来就足够了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top