这道题其实是在问,怎么用一个数字把内容的热度量化出来,同时还要平衡时效性和泛化能力。如果只盯着一个指标,很容易出问题。
先说基础指标,无非是点击、互动、转化这几类。但单独用它们都不够,比如纯看点击量,老内容永远占优,新内容上不来。所以核心是加时间衰减。我通常会用一个指数衰减模型:H(t) = Σ(w_i × behavior_i) × e^(-λ·Δt)。λ是关键参数,新闻类λ要设大,几个小时就冷下来;UGC内容像博客、视频,λ小一点,热度能持续几天。这个模型简单,但有个问题,如果内容刚发布时互动很少,衰减后一下子就到底了,所以我会加一个基础热度兜底。
具体落地时,场景不同策略差别很大。比如实时热榜,像微博热搜,用[[滑动窗口]]加增量更新,窗口设5分钟或1小时,避免全量重算。稳定排序像知乎日报,用多日加权平均,平滑波动。这里有个边界:实时榜单适合短生命周期内容,稳定排序适合长尾内容。真正做排序系统时,我通常两个都算,然后根据内容类型动态融合。
再一个,全局热门和圈层热门得分开。比如一个二次元视频在B站全局热度不高,但在二次元圈子里很火。所以我会结合用户画像,用[[Embedding]]做分层热度,或者简单点,先算全局分,再乘以一个圈层相关性系数。
落地时最大的风险是刷量。常见失败场景是上线后热门榜被机器人刷爆,比如一个低质量帖子因为刷了点赞冲上首页。我的做法是:对每个行为加置信度权重,比如新用户的行为权重低,同IP下的操作降权。同时做异常检测,用滑动窗口统计行为分布,偏离均值太多就临时降权。前提是日志系统要能实时拿到行为流,否则检测滞后就没意义了。
还有一个点值得细想:当内容既有高时效性又有高互动时,比如一个突发新闻,衰减模型可能反应慢了半拍。这时候我会考虑用牛顿冷却定律的变体,写成H_now = H_prev × e^(-α·Δt) + ΔH_new,这样新互动能立刻拉升热度,同时旧热度自然冷却。这个模型在实时流式更新时特别好用,但需要精确控制α,否则热点容易过冲。
总的来说,我更倾向于把热门度看作排序的一个特征,而不是唯一决定因素。最终线上我会跟相关性、个性化分数做加权融合,并且持续监控冷启动内容的曝光占比,防止马太效应。