我有一个排名系统,用户可以在其中上调/下调(+ 1 / -1)个对象,每个对象都有一个累积rating_sum
,可以是负数,零或正数。我还记录了rating_count
中对象被评级的总次数。因此,我可以通过一些代数获得投票数和投票数。
我想实现一个考虑到对象评分的评分算法,但也意味着旧对象会受到惩罚并得分较低。
到目前为止,我发现了以下内容:
score=rating_sum/(age^gravity)
其中gravity
是常量(我一直在使用gravity=2
)。
除了具有负值的评级之外,这种方式正常,在这种情况下,对象越旧,其得分越大(负面)。这意味着给定两个具有相同负面评级的对象,比如-2,较旧的对象高于较年轻的对象,并浮动较高。
我可以使用哪种评分算法可以用于负面评级吗?
(由于技术原因(我试图通过使用django ORM进行优化),我想要一个相当简单的算法,我可以放入SQL查询语句,所以只是POW ,LOG最好)
答案 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
上写了一篇更详细的文章