如何根据“争议”对故事进行排名?

时间:2008-11-16 07:47:50

标签: algorithm

我想根据“争议”商来对我的故事进行排名。例如,reddit.com目前有“有争议的”部分:http://www.reddit.com/controversial/

当一个故事有很多上升和很多下来的投票时,即使总得分为0(例如),也存在争议。我应该如何计算这个商数分数,以便当有很多人投票时,我可以以某种方式捕捉到这一点。

感谢!!!

尼克

4 个答案:

答案 0 :(得分:7)

我建议使用standard deviation票。

100%两极化的有争议的投票将有相同的-1和+1票数,所以平均值为0,stddev约为1.0

相反,一组完全一致的投票(在相反方向没有投票)的平均值为1或-1,stddev为0.0。

不完全一致或完全极化的投票将产生0到约1.0之间的标准偏差数字,其中该值将表明投票中的争议程度。

答案 1 :(得分:0)

最简单的方法是在时间范围内(例如1周,48小时等)计算给定评论的upvote / downvote配对的数量,并且首先显示具有最多parings的评论。任何更复杂的事情都需要在最佳算法上进行反复试验或试验 - 一如既往,它会因网站内容以及您希望加权的方式而异。

总的来说,它与热点算法没什么不同,热点算法通过检测时间范围内的最多投票或视图来工作。

答案 2 :(得分:0)

如何简单地获取某个时间点的两个值中的较小值(向上或向下)?如果它上升很多而且下降一点,或者相反,它没有争议。

例如,如果项目有10个上升和5个下降,则“争议级别”为5,因为有5个人不喜欢喜欢它。另一方面,如果它有10个或10个下降,“争议级别”为0,因为没有人不同意。

所以最后,在这种情况下,两个项目中较小的一个定义了“热度”或“争议性”。这有意义吗?

答案 3 :(得分:0)

// figure out if up or down is winning - doesn't matter which
if (up_votes > down_votes)
{
    win_votes = up_votes;
    lose_votes = down_votes;
}
else
{
    win_votes = down_votes;
    lose_votes = up_votes;
}
// losewin_ratio is always <= 1, near 0 if win_votes >> lose_votes
losewin_ratio = lose_votes / win_votes; 
total_votes = up_votes + down_votes;
controversy_score = total_votes * losewin_ratio; // large means controversial

对于有大量投票和近50/50投票分割的故事,此公式将获得高分,而对于一个选项投票少或票数较多的故事,得分较低。