1

我正在运行一个网站,让用户通过上传特定主题的文件来做出贡献。现在我的评分系统是最差的(文件的下载次数)。这不仅在质量控制方面非常不准确,而且还会阻止新内容很快被列在首位。这就是为什么我想更改我的评分系统,以便用户可以对每个项目进行投票/否决。然而,这不应该是显示此类项目受欢迎程度的唯一因素。我想让较旧的内容随着时间的推移而降低评级。也许我什至可以考虑下载量,但比例很低。

所以,我的问题是:

  1. 假设每天有 1 次新上传,您会建议哪个公式?
  2. 您将如何在 php/mysql 环境中实现这一点?

我的问题是,现在我只是按downloads数据库中的行对我的东西进行排序。如何按外部计算的因子(在 php 中)对查询进行排序,或者每次有人在浏览器中调用站点时,我是否必须使用评级因子更新表中的新行?

(请原谅任何错误,我不是母语人士)

4

2 回答 2

2

我对php或mysql不是很流利,但是对于评分系统,如果您想及时进行阻尼,您是否考虑过衰减指数?在我的脑海中,我可能会做类似的事情

$rating = $downloads * exp(-1*$elapsedTime)

你可以在这里阅读 http://en.wikipedia.org/wiki/Exponential_decay。在你开始抑制结果之前,可能会在一周或一个月内构建,或者延迟一些时间,或者人们会立即降低他们的上传速度。

于 2012-07-27T18:06:10.690 回答
1

首先,无论如何,您都需要在表格中添加至少一列。最好的办法是有一个单独的表,其中包含id, upvotes, downvotes,datetime

如果您想考虑帖子(或上传或评论或......)的新鲜度,我认为最好的实际方法是带有重力参数的威尔逊分数

要在 PHP 中使用 Wilson 分数实现一个良好的开端,请查看.

然后您将需要阅读本文以了解其他解决方案的优缺点并直接使用 SQL。
备注:重力在 SQL 代码中没有明确详细说明,但多亏了 PHP,您应该能够使其工作。

请注意,如果您想要更简单但仍然不蹩脚的东西,您可以使用Bayesian Average进行检查。IMDB使用贝叶斯估计来计算其Top 250

实施您自己的统计模型只会导致您最初没有想到的缺点(离平均值太远,反对票比赞成票更重要,衰减太快等......)

Finally you are talking about rating uploads directly, not the user who uploads the files. If you would like to do the same with the user, the simpler would be to use a Bayesian estimate with the results from your uploads ratings.

You have a lot to read, just in StackOverflow, to dry the subject.

Your journey starts here...

于 2012-07-27T19:16:40.870 回答