考虑时间的评分和排名分析

Hacker News

Hacker News 是一个可以发布帖子的网络社区,每个帖子前面有一个向上的三角形,如果用户觉得这个内容好,点击一下即可投票。根据得票数,系统自动统计出热门文章排行榜。

Hacker News 使用分数计算公式如下:

Score = \frac{P - 1}{(T + 2) ^G}

其中, P 表示帖子的得票数,减去 1 表示忽略发帖人的投票;T 表示当前距离发帖的时间(单位为小时),加上 2 是为了防止最新的帖子分母过小;G 为重力因子,即将帖子排名被往下拉的力量,默认值为 1.8
在其他条件不变的情况下,更多的票数可以获得更高的分数,如果不希望“高票数”帖子和“低票数”帖子之间差距过大,可以上面公式的分子中添加小于 1 的指数,例如:(P - 1) ^{0.8}
在其他条件不变的情况下,随着时间不断流逝,帖子的分数会不断降低,经过 24 小时后,几乎所有帖子的分数都将小于 1 。重力因子对于分数的影响如下图所示:

G 值越大,曲线越陡峭,排名下降的速度越快,意味着排行榜的更新速度越快。


Reddit

不同于 Hacker News , Reddit 根据投票结果,计算出最新的热点文章排行榜。



Reddit 网站的计算分数统计代码可以总结如下

from datetime import datetime, timedelta
from math import log

epoch = datetime(1970, 1, 1)

def epoch_seconds(date):
    td = date - epoch
    return td.days * 86400 + td.seconds + (float(td.microseconds) / 1000000)

def score(ups, downs):
    return ups - downs

def hot(ups, downs, date):
    s = score(ups, downs)
    order = log(max(abs(s), 1), 10)
    sign = 1 if s > 0 else -1 if s < 0 else 0
    seconds = epoch_seconds(date) - 1134028003
    return round(order + sign * seconds / 45000, 7)

分数的计算过程大致如下:

1. 计算赞成票和反对票的差值

s = ups - downs

2. 计算中间分数

order = log_{10}max(|s| , 1)

其中,取 |s|1 的最大值是为了避免当 s = 0 时,无法计算 log_{10} |s| 。赞成票与反对票差值越大,得分越高。取以 10 为底的对数,表示当 a=10 时,这部分为 1,只有 s=100 时才为 2,这样设置是为了减缓差值增加对总分的影响程度。

3. 确定分数的方向

Sing = \begin{cases}1\quad \text {if {a > 0}} \\ 0\quad \text{if {a = 0}}\\ -1 \quad\text{if {a < 0}} \end{cases}

4. 计算发贴时间距离 2005 年 12 月 8 日 7:46:43 的秒数

seconds = timestamp(date) - 1134028003

5. 计算最终分数

score = order + sing \times \frac{sconds}{45000}

将时间除以 45000 秒(即 12.5 个小时),也就是说当前天的帖子会比昨天的帖子多约 2 分。如果昨天的帖子想要保持住之前的排名,则 s 值需要增加 100 倍才可以。

Reddit 评分排名算法决定了 Reddit 是一个符合大众口味的社区,而不是一个适合展示激进想法的地方。


Stack Overflow

Stack Overflow 是世界排名第一的程序员问答社区 , 创始人之一的 Jeff Atwood 的评分排名的计算公式如下:

\frac{4 \times log_{10}Quiews+\frac{Qanswers \times Qscore}{5} + \sum(A_{scores})}{((Q_{age} + 1) - ( \frac{Q_{age} - Q_{updated}}{2}))^{1.5}}
其中:

  1. 4 \times log_{10}Quiews 表示问题的浏览次数越多,得分越高,同时利用 log_{10} 减缓了随着浏览量增大导致得分变高的程度。
  2. \frac{Qanswers \times Qscore}{5} 表示问题的得分(赞成票和反对票之差)越高,回答的数量越多,分数越高。采用乘积的形式意味着即使问题本身的分数再高,没有人回答的问题也算不上热门问题。
  3. \sum(A_{scores}) 表示问题回答的总分数。回答总分采用了简单的加和,但实际上一个正确的回答要胜过多个无用的回答,简答的加和无法很好的区分这两种不同的情况。
  4. ((Q_{age} + 1) - ( \frac{Q_{age} - Q_{updated}}{2}))^{1.5} 可以改写为 (\frac{Q_{age}}{2} + \frac{Q_{updated}}{2} + 1) ^{1.5} , Q_{age}Q_{updated} 分别表示问题和最近一次回答的时间(单位为小时),也就是说问题时间越久远,最近一次回答时间约久远,分母就会越大,从而得分就会越小。
    Stack Overflow 的评分排名算法考虑了参与程度(问题浏览次数和回答次数)、质量(问题分数和回答分数)、时间(问题时间和最近一次回答时间)等多个维度。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容

  • 本文为学习阮一峰《基于用户投票的排名算法》的学习笔记。 一、Hacker News(只有赞成票) ① P 表示帖子...
    伪开发阅读 3,065评论 1 5
  • 影评类网站(豆瓣,IMDB),资讯网站(hacker news),问题回答网站(知乎,stackoverflow)...
    Howyi阅读 10,366评论 0 3
  • 最近开始在简书上混,今日在首页上不经意间看到一篇《从豆瓣电影评分算法说起》,感觉有点眼熟,就点了进去。 其实阿北的...
    数据虫巢阅读 33,252评论 6 172
  • 一、<Delicious> 算法:按照单位时间内用户的投票数进行排名。得票最多的项目,自然就排在第一位。 eg:"...
    Rainysong阅读 2,694评论 0 1
  • 热门内容对任何网站都很重要,对社交网站更为重要。如何让用户第一眼就看到感兴趣的内容而留下来,正是各种排名算法的任务...
    兔子David阅读 1,512评论 0 6