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

Algorithm Reddit/Hacker新闻风格的流行时间衰减算法,可处理负面排名,algorithm,sorting,rating-system,popularity,Algorithm,Sorting,Rating System,Popularity,我有一个排名系统,用户可以向上/向下投票(+1/-1)个对象,每个对象都有一个累积的评分总和,它可以是负的、零的或正的。我还记录对象在rating\u count中被评级的总次数。因此,我可以通过一点代数计算出赞成票和反对票的数量 我想实现一个计分算法,该算法考虑了对象的评级,但也意味着较旧的对象会受到惩罚,并且分数较低 到目前为止,我发现了以下几点: score=rating_sum/(age^gravity) 其中,gravity是一个常数(我一直在使用gravity=2) 这是正常的,除

我有一个排名系统,用户可以向上/向下投票(+1/-1)个对象,每个对象都有一个累积的
评分总和
,它可以是负的、零的或正的。我还记录对象在
rating\u count
中被评级的总次数。因此,我可以通过一点代数计算出赞成票和反对票的数量

我想实现一个计分算法,该算法考虑了对象的评级,但也意味着较旧的对象会受到惩罚,并且分数较低

到目前为止,我发现了以下几点:

score=rating_sum/(age^gravity)
其中,
gravity
是一个常数(我一直在使用
gravity=2

这是正常的,除了带有负值的评级,在这种情况下,对象越老,其得分越高(负值越小)。这意味着,给定两个具有相同负面评级的对象,例如-2,较大的对象得分高于较小的对象,并且浮动更高

是否有一个评分算法,我可以使用,将工作的负面评价呢


(出于技术原因(我正试图使用django ORM进行优化),我想要一个相当简单的算法,并且我可以将其放入SQL查询语句中,因此最好是POW、LOG)

您可以使用指数衰减模型

让您的lambda基于您当前的评级。类似(lambda=-rating/常量)

如果lambda为负值,则分数将朝0递减

如果lambda为正,分数将朝负无穷大方向负增长

然而,这意味着负面分数只会更负面,而正面分数永远不会变为负面。

这看起来很像Reddit使用的“热门度”排名。它对用户评级的LOG10加上年龄进行排序(降序)。此SQL是一个粗略的示例:

SELECT *
FROM ratings
ORDER BY 
    LOG10(ABS(rating_sum)) * SIGN(rating_sum)   
    + (UNIX_TIMESTAMP(created_at) / 300000) DESC
LIMIT 50
当心你的评分_sum=0,因为记录为零并不酷


我在我的一个网站上写了一篇文章更详细地描述了它

为什么不
score=rating_sum-age^gravity
?把
rating_sum
看作是“流行”,把
-1*age^gravity
看作是“新鲜”。然后
score=受欢迎程度+新鲜度