Ruby on rails 3 rails应用程序中的排序算法

Ruby on rails 3 rails应用程序中的排序算法,ruby-on-rails-3,Ruby On Rails 3,我们的ralis应用程序中有一个模型,其对象根据积极的用户行为分配一个分数。为了简单起见,我们称之为产品。如果用户喜欢某个产品或购买某个产品或查看某个产品,则分数会以不同的权重递增(一个相似的可能比一个视图更值钱,30秒内的两个视图可能比一小时内的三个视图更值钱,等等) 我们希望使用这些分数来帮助对产品进行排序和排名,比如说流行产品列表,但由于各种原因——使用直接排名会不均衡地偏向较老的产品,因为它们将有更多的时间来积累更高的分数 我的问题是,如何规范新旧产品之间的分数。我曾考虑过用时间单位来划

我们的ralis应用程序中有一个模型,其对象根据积极的用户行为分配一个分数。为了简单起见,我们称之为产品。如果用户喜欢某个产品或购买某个产品或查看某个产品,则分数会以不同的权重递增(一个相似的可能比一个视图更值钱,30秒内的两个视图可能比一小时内的三个视图更值钱,等等)

我们希望使用这些分数来帮助对产品进行排序和排名,比如说流行产品列表,但由于各种原因——使用直接排名会不均衡地偏向较老的产品,因为它们将有更多的时间来积累更高的分数

我的问题是,如何规范新旧产品之间的分数。我曾考虑过用时间单位来划分产品分数,比如说它存在的天数,但我担心这会大大减少旧产品的数量。有什么想法可以让新旧产品之间的分数公平地正常化

我还在考虑另一个问题中发现的贝叶斯评级系统的例子:

rating = ((avg_num_votes * avg_rating) + (product_num_votes * product_rating)) / (avg_num_votes + product_num_votes)

其中,
avg
数字是通过查看所有有多个
投票权的产品的得分来计算的(或者在我们的案例中,是积极的
行动
)。这可能不是最好的方式,因为我们的系统中没有负面评级,而且根本不考虑时间。

你的问题让我想起了

概念如下:两年100美元,一年不到100美元,现在不到100美元

我认为我们可以在这里做一个很好的比较:昨天的产品比前一天的产品更值钱,但比今天的产品值钱

公式很简单:

Vn = V0 * (1-t)^n
使用V0初始值(实际的正面投票数),t贴现率(您必须固定它,比如10%)和n经过的时间(例如n天)。因此,产品每天将损失其价值的10%(但前一天的10%,而不是初始价值的10%)

你也可以看到,这是你的尝试更接近。公式可以是这样的,我想:

Vn = V0 * (1/(1+k*n))
另一种更简单但最粗糙的方法:线性贴现。你可以简单地给分数一个初始值,比如1000,然后每天将所有分数递减1(或其他常数)


有趣。在你的第二个例子中,什么是k?这正是我想要的,顺便说一句。谢谢!k只是一个任意的正常数(t在0和1之间)。但是我对这个公式不是很有信心,你应该研究一下维基百科的解释,它已经非常完整了。
Vn = V0 - k*n