Php 如何对选票进行评级或排序

Php 如何对选票进行评级或排序,php,Php,如果我的问题错了,我真的很抱歉,但我想知道一些想法…我想知道排名算法以及他们提交投票的时间。Reddit的代码是开源的。这里有一个很好的关于他们排名算法的讨论,代码是:好问题 好吧,让我们开始吧 首先,在计算好的评级时,你不能做的一件事是 您对其进行了详细阅读,但非常简单,它处理了以下内容: 得票少的条目不是其得票的真实平均值,但在整个数据集中具有平均评级的组成部分。例如,在IMDB上,默认评级为6.4。因此,一部只有两张票的电影,每一张都是10位明星,可能仍然有6到7票。投票越多,他们就越有

如果我的问题错了,我真的很抱歉,但我想知道一些想法…我想知道排名算法以及他们提交投票的时间。

Reddit的代码是开源的。这里有一个很好的关于他们排名算法的讨论,代码是:

好问题

好吧,让我们开始吧

首先,在计算好的评级时,你不能做的一件事是

您对其进行了详细阅读,但非常简单,它处理了以下内容:

  • 得票少的条目不是其得票的真实平均值,但在整个数据集中具有平均评级的组成部分。例如,在IMDB上,默认评级为6.4。因此,一部只有两张票的电影,每一张都是10位明星,可能仍然有6到7票。投票越多,他们就越有可能团结在一起,评级也就从违约中“拉走”。Imdb还为他们的电影在列表中显示提供了最低票数
我感到困惑的另一件事是:为什么投票时间很重要?你不是说投票的时间吗?所以在我们的电影示例中,刚刚发布的电影更重要

但无论如何!在这两种情况下,通常通过应用对数函数来获得良好的结果

对于我们的电影示例,电影相关性可以乘以

1 + 1/SQRT(1 + CURRENT_YEAR - RELEASE_YEAR )
所以1是一个插座评级,每部电影都有。 本年度的一部电影将获得100%的提升(200%的相关性),因为上述内容将回归现实。去年170%,2岁157%和儿子在一起

但是电影与1954年或1963年的区别远没有那么大

所以请记住:

  • 计算中使用的所有内容。它真的是线性的吗?这会扭曲你的评级吗?整个数据集的关系是否正常
如果你想让最近的选票投得更多,你可以用同样的方法,但要权衡你的选票。如果你想让最近投票的东西“热身”,这也是有道理的。。。因为它现在是热门话题,例如在你的社区里

比因说这只是一项艰苦的工作。到处玩耍等

让我给你最后一个主意

在我工作的公司,我们计算电影的相关性

我们有一个配置数组,其中存储了最终相关性中几个因素的“权重”

看起来是这样的:

        $weights = array(
                "year" => 2, // release year
                "rating" =>13, // rating 0-100
                "cover" => 4,  // cover available?
                "shortdescription" => 4, // short descr available?
                "trailer" => 3, // trailer available?
                "imdbpr" => 13, // google pagerank of imdb site
        );
        foreach($values as $field=>$value) {
                $malus += ($value*$weights[$field]) / array_sum($weights);
        }
然后我们为每个度量计算一个介于0和1之间的值。有不同的方法。但让我给你们展示一下我们的评级示例(它本身就是我们所抓取的几个平台的聚合评级,这些平台的权重各不相同)

然后我们总结如下:

        $weights = array(
                "year" => 2, // release year
                "rating" =>13, // rating 0-100
                "cover" => 4,  // cover available?
                "shortdescription" => 4, // short descr available?
                "trailer" => 3, // trailer available?
                "imdbpr" => 13, // google pagerank of imdb site
        );
        foreach($values as $field=>$value) {
                $malus += ($value*$weights[$field]) / array_sum($weights);
        }
这可能不是你问题的确切答案,但有点更广泛,但我希望我为你指出了正确的方向,并给了你一些观点,让你的想法能有所启发


祝您的应用程序充满乐趣并取得成功

(p-1)/(t+2)^1.5在这个公式中,我不明白为什么它是p-1?,为什么时间被加上2,然后乘以1.5的幂?真不错!通常解决得很差或根本没有想到的常见问题。期待讨论和各种方法!对时间很重要,因为在他们提交投票时,时间已经包括在内。