在信息爆炸的时代,什么内容值得被看到,不再是“编辑说了算”,而是算法决定。点赞、时间、点击量,这些看似简单的数据,在背后构建出复杂的热度排序逻辑。
今天,我们来扒一扒那些耳熟能详的网站,如 Hacker News、Reddit、IMDB,是如何让“热门”变得可计算的。
一、Hacker News:为什么你的帖子火不起来?
Hacker News 是极客们钟爱的资讯社区。它的排序算法乍一看很简单,只有点赞(没有踩),但是热度排名却非常“滑溜”。
🔢 排名核心公式:
Score = (P - 1) / (t + 2)^1.5
- P 是点赞数
- t 是发帖以来的小时数
这里的「-1」意在剔除“自己给自己投票”的影响,而「+2」是为了避免新帖一开始被严重加权。
🔍 重力因子 G(如1.5)决定了内容“掉榜”的速度。G 越大,内容越快被替代,榜单更新频率更高。
🧠 为什么不适合电商?
新闻讲求“新”,而电商更在意“热”。所以你会看到:
Score = Σ(订单量 × α^t)
- α 是时间衰减因子,0 < α < 1
- t 是订单距离当前的天数
衰减的核心在于:一周前的销量比昨天的权重小得多。这个公式更加关注“持续热销”而非“刚上新”。
二、Reddit:点赞 vs 点踩,一个都不能少
Reddit 允许投反对票,因此其排序考虑了「投票倾向」:
🔢 Reddit 热榜公式:
Score = log10(|ups - downs|) + sign * (发布时间戳 - 常量) / 45000
- 对数部分削弱大票仓的影响
- 时间项强化新帖优先级
⚠️ 时间单位是秒,每过一天,新帖得分会天然 +2。老帖想保榜,必须投票量翻倍。
Reddit 背后的哲学:每个时间段都有自己的“热点”,你很难与昨天的红人贴竞争。
三、评论系统:点赞≠好评
仅凭点赞数来排序评论靠谱吗?来看看这组数据:
- A:550好评,450差评 → 好评率55%
- B:60好评,40差评 → 好评率60%
绝对值和比例对结果判断完全不同。更糟的是:
- C:1好评,0差评 → 100%
- D:9好评,1差评 → 90%
C 真比 D 好?
这时候就得引入统计学的「威尔逊置信区间」:
def wilson_score(ups, downs):
n = ups + downs
p = ups / n
z = 1.6 # 置信度95%
return (p + z*z/(2*n) - z * sqrt((p*(1-p)+z*z/(4*n))/n)) / (1 + z*z/n)
它惩罚样本太小的“虚高好评率”,更公平地反映评论的真实价值。
四、IMDB:电影打分不是算术平均
为什么 IMDB 的 Top250,不是被10人打满分的冷门片,而是大热之作?
因为它用了 贝叶斯平均数:
WR = (v / (v + m)) * R + (m / (v + m)) * C
- v:某部电影的打分人数
- R:该电影的平均得分
- m:最低打分人数门槛(如25000)
- C:全站电影平均分
也就是说:IMDB 假设每部电影初始有 25000 张“中等评分”票,然后再慢慢用真实评分去修正。
这就避免了“冷门作品高分霸榜”,让排名更具代表性。
五、StackOverflow:什么问题值得被顶上去?
开发者问答社区 StackOverflow 的热门排序综合考虑了:
- 浏览量(log10)
- 答案数 × 问题得分
- 所有答案得分
- 时间衰减
核心逻辑是:
热度 = (内容质量 × 参与度) / 时间衰减
但它仍有优化空间,例如:
- 浏览量使用对数,防止“巨鲸”贴垄断
- 答案数放大作用太大,未必合理
- 时间影响需更精细调控
📌 更优做法:只计算有效答案 + 答案分值开方求和,弱化“刷答案”的影响。
六、SegmentFault:国产 Q&A 的“算法本地化”
SegmentFault 参考 StackOverflow,但更明确地区分了日、周、月热门。
通过调整「重力因子 i」来改变热度衰减速度:
- 日榜:i=1.0(快速更新)
- 周榜:i=0.5
- 月榜:i=0.3(相对平稳)
这种“热度+时间”分层策略,更符合内容平台“冷启动”和“长尾价值”的需求。
🔚写在最后
热度排序算法的本质,是对 关注度、时效性、可信度 三者的动态权衡。没有一种算法适用于所有场景。
你想让用户看到什么,决定了你该如何设计排序公式。
👨💻 想看更多数据产品、算法设计、推荐系统的思维拆解?欢迎留言或点个赞支持更新!