我真的很抱歉,如果我错了我的问题,但我想要一些想法...我希望有一个排名算法的想法,包括他们提交投票的时间。
答案 0 :(得分:3)
好问题!
好吧,让我们开启吧!
首先,在计算好的评分时,你不能做的一件事是Bayesianaverage
你已经阅读了它,但非常简化,它负责以下事项:
我觉得另一件令人困惑的事情是:为什么投票时间很重要?你不是指投票的时间吗?那么在我们的电影示例中,刚发布的电影更重要吗?
但无论如何!在这两种情况下,通常通过应用对数函数来获得良好的结果。
对于我们的电影示例电影,相关性可以乘以
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
);
然后我们为每个指标计算0到1之间的值。有不同的方法。但是,让我向您展示我们的评级示例(这本身就是我们抓取的几个平台的聚合评级,并且具有不同的权重等等。)
$yearDiff = $data["year"] - date('Y');
//year
if (!$data["year"]){
$values['year'] = 0;
} else if($yearDiff==0) {
$values['year'] = 1;
} else if($yearDiff < 3) {
$values['year'] = 0.8;
} else if($yearDiff < 10) {
$values['year'] = 0.6;
} else {
$values['year'] = 1/sqrt(abs($yearDiff));
}
所以你看到我们硬编码了一些“年龄间隔”,并且仅仅针对较旧的电影依赖于sqrt功能。实际上差异很小所以这里的SQRT例子非常差。 但数学函数通常很有用!
例如,你可以使用像窦曲线等周期函数来计算季节性相关性!例如,你的年份范围从0到1,那么你可以使用窦功能来衡量一年中当前时间的夏季热门/冬季热门/秋季热门歌曲!IMDB pagerank的最后一个例子。它是完全硬编码的,因为只有10个不同的值可能,并且它们不以统计同质的方式分布(pagerank 1或2甚至比没有更糟糕):
if($imdbpr >= 7) {
$values['imdbpr'] = 1;
} else if($imdbpr >= 6) {
$values['imdbpr'] = 0.9;
} else if($imdbpr >= 5) {
$values['imdbpr'] = 0.8;
} else if($imdbpr >= 4) {
$values['imdbpr'] = 0.6;
} else if($imdbpr >= 3) {
$values['imdbpr'] = 0.5;
} else if($imdbpr >= 2) {
$values['imdbpr'] = 0.3;
} else if($imdbpr >= 1) {
$values['imdbpr'] = 0.1;
} else if($imdbpr >= 0) {
$values['imdbpr'] = 0.0;
} else {
$values['imdbpr'] = 0.4; // no pagerank available. probably new
}
然后我们总结如下:
foreach($values as $field=>$value) {
$malus += ($value*$weights[$field]) / array_sum($weights);
}
这可能不是你的问题的确切答案,但更广泛,但我希望我指出你正确的方向,并给你一些你的想法可以拿起的点!
使用您的应用程序获得乐趣并取得成功!
答案 1 :(得分:1)
Reddit的代码是开源的。这里对他们的排名算法进行了很好的讨论,代码为:http://amix.dk/blog/post/19588