跳到主要内容
公开的 ranking 公式,只解释得了 HN 首页的八成

公开的 ranking 公式,只解释得了 HN 首页的八成

毒角兽
毒角兽

· 阅读约 6 分钟

先说结论:那份公开的 frontpage-rank 公式是真的,但它只解释得了八成的排名。剩下两成,被一套从没公开的惩罚系统按在下面。

Ken Shirriff 那篇老文,2013 年 11 月发的,我前几天翻出来重看了一遍。方法很土:每分钟抓一次 /news 和 /news2,Beautiful Soup 解 HTML,Python 洗数据,matplotlib 出图,再拿公开公式反推每篇的原始分数,然后看谁对不上。

土办法,但能照妖。

先把公开的那部分说清楚。Arc 源码里常量都摆着:gravity 1.8,timebase 120 分钟,nourl-factor 0.4,lightweight-factor 0.17,gag-factor 0.1,标 bury 的乘 0.001 基本等于消失。

按这套算,票数项被 gravity 死死压住,任何文章的分数早晚衰减到零,没人能钉在首页上。

这条没毛病。问题全出在「对不上」的那批。

官方说:公式就这么写的,乘数都列出来了,自己算。

实测:他 11 月 11 日一整天画前 60 名的原始分数曲线,最高分经常不是第一名。有的文章分数明明够,位置就是低一截,顺着这个错位能直接定位惩罚发生的时刻。

再拿 11 月 9 日 8:46 的前十名举例,其中三篇的排位低于分数应有位置,反推出来的惩罚系数大概落在 0.47–0.85、0.87–0.93、0.60–0.82 三个区间。

这三组数字,代码里一个都没有。

关键词黑名单是第一个被逮住的。标题里带 NSA 的,自动乘约 0.4。作者后来补了一句:HN 后来把这惩罚取消了。他顺手验了 awesome、bitcoin、bubble 三个词,干净,没触发。

域名降权更狠。arstechnica、businessinsider、github、imgur、medium、quora、reddit、theguardian、theverge、youtube 全在名单上,系数 0.25 到 0.8 之间,他自己说这份名单肯定不止这些。

评论里有个叫 eterm 的读者给了个解释,我觉得站得住:热门站点的稿子常被多人并行提交,票数天然虚高,降权是拿来抵消这个的。

能解释,不等于公开过。

惩罚系数到底多致命,他算过账。0.4 意味着每张票只按 0.3 票算,或者排名下滑速度比正常快 66%;0.1 的话,每票只算 0.05 票,下滑速度是正常的 3.6 倍。

这不是调权重的量级。这是直接判死刑。

争议惩罚那条更值得说。公开的 Arc 代码写着:评论数超过 20、且多于票数时触发,按票数与评论数比值的平方缩放。

实测:门槛实际是评论多于票数且至少 40 条,而且他怀疑指数是 3 不是 2。这条他自己也承认没证明,我这边先不当结论用。

但触发瞬间的掉法有实例。一篇讨论 Chromebook 评论者的文章,从第 5 名直接掉到第 22;另一篇 Show HN,从第 17 名跌出前 60。

评论数刚够 40 的那一秒,人就没了。

一天统计下来,约 20% 的首页文章带着惩罚。第二页呢,约 38%。

首页比例反而低于第二页。作者的解释我觉得是对的:受罚文章本身更难留在首页,这张表已经被幸存者偏差削过一道。换句话说,38% 那个数比 20% 更接近真相。

最能说明问题的是作者自己那篇。登上首页几分钟后吃了个 0.2 的重罚,直接被挤出首页。他估过,没这一下,这篇本可以到第 5 名。后来有人告诉他,是投票环检测误触发。

他没组织投票环。

评论里另一个读者也抱怨自己的帖子老被投票环检测锤,推测是给他投票的好友太多。作者回:我也没组织投票环,照样中。

一个专门研究惩罚机制的人,被惩罚机制误伤。这个闭环我打满分。

有一说一,他的核心验证是过关的。绝大多数文章确实按分数排名,偏离的那批持续偏低——这个模式和公开的 gravity 指数能对上。他还专门反证过:如果 gravity 指数不是 1.8,文章位置应该随票数和时间的漂移而变,但他没观察到。

我一开始预期会看到一篇「公式全是假的」那种爽文,结果不是,公式大体成立。这次算往好的方向被打脸。

所以真正的结论不是「公式造假」,是公式之外另起了一套。两套并行,一套给你看,一套不给你看。

受罚文章的话题跨度也值得看一眼。11 月 11 日首页上那一长串,MongoDB、Apple Maps、Snapchat、比特币、Docker 什么都有。具体案例:Snapchat 那篇上午 8:22 遭重罚后彻底跌出前 60;一篇劝人别用 MongoDB 的文章,本可以全天第一,结果长期在第 7 名附近徘徊;一篇宣布与 NSA 断绝关系的稿子,起先吃了 NSA 惩罚,靠热度硬登上第一,随后被施了更重的惩罚压下去。

一天的惩罚曲线里,能看出大概 0.2 和 0.4 两个明显档位,外加一大堆 0.8–0.9 的轻微惩罚,不少集中在上午 9 点左右出现。

至于这些惩罚是管理员手工操作,还是被 flag 文章的自动处理,作者说他也不确定。他停在这。

但为什么难测,他列得很清楚。相邻文章可能同样受罚;招聘帖计分方式还不一样;排名根本不实时更新——只有文章拿到新票才重算位置,其他文章原地不动;还有每 30 秒从前 50 名随机挑一篇重排的机制,加上 90 秒的页面缓存。

你抓到的那个排名,本身就是个滞后快照。拿它当实时状态做结论,从第一步就歪了。

锐评评分卡:这篇 2013 年的老文,方法不花哨,结论也没给出完整名单,但它是少数几篇拿数据把「公开代码≠实际规则」这句话钉死的文章。价值不在那几个系数,在方法——先假设公式成立,再把所有对不上的案例捞出来当证据,一条条照。

缺点也有:他停在「我不知道这是人干的还是机器干的」就收手了,没往下挖。放今天,这个位置该有第二篇文章。

值不值得翻出来看?值。你手上任何一个平台的热榜、排名、推荐,只要它公开过代码,就该拿这套法子照一遍。

毒角兽
毒角兽

拿到新工具先上手拆一遍,官方通稿信一半留一半,实测说话。

查看主页 →