Reddit / Hacker新闻风格流行时间衰减算法,可以处理负面排名

时间:2014-08-22 15:02:22

标签: algorithm sorting rating-system popularity

我有一个排名系统,用户可以在其中上调/下调(+ 1 / -1)个对象,每个对象都有一个累积rating_sum,可以是负数,零或正数。我还记录了rating_count中对象被评级的总次数。因此,我可以通过一些代数获得投票数和投票数。

我想实现一个考虑到对象评分的评分算法,但也意味着旧对象会受到惩罚并得分较低。

到目前为止,我发现了以下内容:

score=rating_sum/(age^gravity)

其中gravity是常量(我一直在使用gravity=2)。

除了具有负值的评级之外,这种方式正常,在这种情况下,对象越旧,其得分越大(负面)。这意味着给定两个具有相同负面评级的对象,比如-2,较旧的对象高于较年轻的对象,并浮动较高。

我可以使用哪种评分算法可以用于负面评级吗?

(由于技术原因(我试图通过使用django ORM进行优化),我想要一个相当简单的算法,我可以放入SQL查询语句,所以只是POW ,LOG最好)

2 个答案:

答案 0 :(得分:0)

您可以使用指数衰减模型。

http://en.wikipedia.org/wiki/Exponential_decay

让你的lambda基于你目前的评级。像(lambda = - rating / constant)

之类的东西

如果lambda为负,则分数将减少到0;

如果lambda为正,则分数将负向负无穷大增加;

然而,这意味着负分数只会更负,正分数永远不会消极。

答案 1 :(得分:0)

这看起来很像" hotness" Reddit使用的排名。它命令(降序)用户评级的LOG10加上年龄。这个SQL是一个粗略的例子:

SELECT *
FROM ratings
ORDER BY 
    LOG10(ABS(rating_sum)) * SIGN(rating_sum)   
    + (UNIX_TIMESTAMP(created_at) / 300000) DESC
LIMIT 50

请注意你的rating_sum = 0,因为记录为零并不酷。

我在其中一个网站Reddit Hotness Algorithm in SQL

上写了一篇更详细的文章