一、<Delicious>
算法:按照单位时间内用户的投票数进行排名。得票最多的项目,自然就排在第一位。
eg:"过去60分钟内被收藏的次数",每过60分钟,就统计一次
缺点:①排名变化不平滑、变化大;②缺乏自动淘汰,可能出现长期占据前列。
二、<Hacker News>
算法:P表示帖子的得票数(影响力值),减1是为了忽略发帖人的投票;
T表示距离发帖的时间(单位为小时),加2是为了防止最新的帖子导致分母过小(可能转帖平均需要两个小时);
G表示“重力因子”(gravity power),即将帖子排名往下拉的力量。
参数:
① <u>得票数P</u>:其他条件不变,得票越多,排名越高;
② <u>距离发帖的时间T</u>:其他条件不变,越是新发表的帖子,排名越高(帖子排名随时间不断下降)
③ <u>重力因子</u><u>G</u>:决定了排名随时间下降的速度。
[****参考文献****]
* How Hacker News ranking algorithm works
* How to Build a Popularity Algorithm You can be Proud of
三、<Reddit>
算法:
x:点赞数和被踩数之差(辅助变量)
t:发布时间到现在的时间间隔,单位秒
z:作为x和1的绝对值的最大值
y:x>0取1,x<0取-1,x=0取0
参数:
① <u>提交时间的影响</u>:
发表时间对排名有很大影响,该算法使得新的话题比旧的话题排名靠前
话题的得分并不会随着时间的推移而减小,但是新的话题的得分将会比旧的话题的得分更高。(不适用微博事件热度评估)这一点和 Hacker News算法不同,Hacker News算法中随着时间的推移,话题的得分会减小。
下图展示了踩和顶数目相同的但提交时间不同话题的得分比较:
② <u>对数收缩:</u>
Reddit 的热排序算法使用了对数函数来衡量前面的投票与其他投票的差距。这一般适用于:
- 前十个好评和之后100个好评有着相同的权重,以此类推。
参见下图:
如果没有对投票进行对数收缩分数情况将会如下图:
③ <u>“踩”的影响</u>:
Reddit是少有的有“踩”的网站之一。你可以在代码中看到score被定义为:“顶”的票数-“踩”的票数。
这可以用下图来帮助理解:
“踩”的票数对于得到了很多“顶”和“踩”的话题的得分有着很大的影响。它们的得分比较低仅仅是因为得到了反对票。这可以解释为什么Kittens(和其他非争议性的话题)的排名为何如此之高。:)
④ <u>Reddit</u><u>话题排序算法总结:</u>
提交时间是一个很重要的参数,通常新的话题将会高于老的话题的分数。
前十个投票和后100个投票的作用是相同的,举个例子,一个有10的“顶”话题和一个有50个“顶”的话题他们的排名是相同的。
得到支持票和反对票持平的争议话题和得到票大多为支持的话题相比排名将会较低。
⑤ <u>Reddit</u> <u>评论投票是如何工作的:</u>
Reddit最佳排名算法来自于xkcd的Randall Munroe的想法。他为这个想法写了一篇伟大的博客: Reddit新的评论排序系统
他用一种通俗易懂的方式讲解了这个算法,你应该去读一读。博客大纲如下:
1、评论排名算法使用最热排名算法不是一种好的选择,因为它偏重于早期发表的评论。
2、Edwin B. Wilson在1927年就已经发现了一个解决方案。它被称为“Wilson评分区间”,可以被用于“信心排序”。
3、信心排序将投票数目看作是大家通过表决形成的统计抽样计票(就像民意调查那样)。
4、《如何不按照平均分排序》讲述了信心排序的详细细节,强烈推荐阅读。
四、<wilson 信心排序> / <评论排名算法> ——>可以用来算环境口碑占比/维稳事件占比
算法:
参数:
- p指的是好评数
- n指的是投票总数
- zα/2 是(1-α/ 2)标准正态分布分量
总结一下就是:
- 信心排序将投票看作是大家表决的统计抽样计票
- 信心排序用85%的置信度来确定评论的排名
- 投票越多,85%置信度下的评论的信心分数越接近真实分数
- 威尔逊区间对于小样本或者极端情况也具有良好作用
Randall 在他博客文章《信心排序是如何进行评论排序的》中举了一个很好的例子:
如果一个评论有1票“顶”,0票“踩”,那么它的“顶”就为100%,由于样本数据太少,系统将会将它排在底部。但是如果它有10个“顶”而只有1个“踩”的话,系统就可以有足够的信心判定它应该排在那些有40个“顶”但是也有20个“踩”的评论(如果这个时候它得到了40个“顶”,那么几乎可以肯定它得到的“踩”小于20个)的前面。更好的是如果判断错误(15%的概率),它很快会得到更多的数据,因此,数据少的评论出现在了顶部。
① 提交时间对评论排序没有影响
提交时间对于信心排序算法来说是无关紧要的(这一点和热排序算法还有Hacker 新闻排序算法不同)。 评论排名靠的是信心分数和数据采样——也就是说的到的票数越多,信心分数也就越精确。
② 观察
我们用Randall的例子来观察一下信心排序是如何对评论进行排序的:
从上图你可以看到信心排序根本就不关心一个评论得到了多少票数,它关心的是“顶”的票数和总票数的比值。
③ 其他应用
Evan Miller 列举了3条Wilson评分区间的非排序应用:
- 垃圾邮件检测: 检查用户将邮件标记为垃圾邮件的百分比。
- 创建“最佳”列表: 检查某个条目被标记为最佳的用户的百分比。
- 创建“邮件最多”列表: 检查看到页面后点击Email的用户的百分比。
用Wilson评分区间你只需要:
- 样本总数
- 正确样本总数
考虑到Wilson评分区间是如此强大和易用,许多网站都用它来排序他们网站的内容。包括Amazon.com 这种大公司都把平均比率定义为正确样本比率/总样本比率。