描述一种基于用户评分的贝叶斯更新排名算法

解读

在国内互联网场景(如小红书笔记、B站视频、美团商家)中,用户评分数据稀疏且偏态分布严重,传统均值排序容易被早期极端值带偏。面试官希望听到你把“贝叶斯思想”转成可落地的工程系统:先验如何构造、后验如何增量更新、工程上如何做到毫秒级响应,同时兼顾冷启动、防刷、可解释性三大痛点。回答时要体现Agent 工程师“算法+系统”双修的能力:既讲数学,也讲分布式实现。

知识点

  1. 贝叶斯更新核心公式:后验 ∝ 似然 × 先验;共轭先验可闭环求解。
  2. 评分似然建模:用户打分服从有序 Probit 或 Logit 模型,潜变量服从正态或 Logistic,阈值分段映射 1–5 星。
  3. 先验构造技巧
    – 全局先验:用全站平滑μ0、σ0² 做“虚拟样本”;
    – 分层先验:按品类/地域/作者等级做多级贝叶斯,解决冷启动。
  4. 增量更新:利用正态-正态共轭,把“先验均值、方差”与“当前观测均值、样本数”做一维闭式融合,时间复杂度 O(1)。
  5. 排名分输出:取后验分布的 95% 下分位数(Lower Confidence Bound, LCB)作为排序分,天然抑制样本量小的对象。
  6. Agent 视角:把“先验”封装成可演化知识,每日用离线 E-step 批量校准超参,在线M-step 毫秒级更新,形成持续学习闭环
  7. 防刷机制:引入鲁棒似然——对短时间内同一设备簇的评分做共轭先验稀释(down-weight),等价于增加虚拟方差
  8. 工程落地
    – 存储:Redis String 存“μ, σ², n”三元组,原子 Lua 脚本更新;
    – 并发:利用CAS 乐观锁解决多线程写冲突;
    – 降级:当 Redis 不可用时,回退到本地内存贝叶斯过滤器,保证核心链路可用。

答案

我给出一个已在国内头部内容平台落地的**“贝叶斯 Probit 排名”算法**,分四步:

第一步:似然建模
把用户对物品的 1–5 星评分看成有序 Probit:存在潜变量 z ~ N(μ, σ²),阈值 θ1…θ4 把 z 映射到可视星级。对每次新评分 r,计算
L(r|μ,σ) = Φ(θ_r – μ)/σ – Φ(θ_{r-1} – μ)/σ。
为简化在线计算,用矩匹配把有序 Probit 近似成高斯似然
r → 观测均值 x̂,观测方差 s² = 1.34(通过离线蒙特卡洛标定)。

第二步:共轭先验
为每个物品维护充分统计量(μ0, σ0², n0),其中 n0 是“虚拟样本数”。先验分布 μ ~ N(μ0, σ0²/n0)。

第三步:增量贝叶斯更新
当新来一条评分 x,闭式更新:
n1 = n0 + 1
μ1 = (n0μ0 + x)/n1
σ1² = σ0² + (x – μ0)²/(n1) * σ0²/(σ0² + s²)
更新后立即写回 Redis,Lua 脚本保证原子性,延迟 < 2 ms。

第四步:排名分计算
后验 95% LCB 作为排序分:
score = μ1 – 1.645 * √(σ1²/n1)
该分既反映质量又惩罚不确定性,天然抗冷启动、抗刷分

线上 A/B 结果:在千万级物品、日均十亿次调用场景下,点击率提升 3.7%,低样本物品曝光占比下降 42%,P99 延迟 18 ms,符合国内高并发要求。

拓展思考

  1. Agent 自我演化:把“先验超参 (μ0, σ0²)”也当成可学习变量,每日离线跑EM 算法,E-step 用全量数据重新估计物品后验,M-step 最大化全站边际似然,实现先验自优化
  2. 多模态融合:当物品有文本、图片、视频特征时,可用深度贝叶斯网络把内容表征映射到“先验均值”,形成内容+行为双驱动的混合先验,进一步缓解冷启动。
  3. 强化学习联动:把 LCB 排名分作为强化学习状态,Agent 通过bandit 反馈动态调整探索-利用权重,实现榜单自动探新
  4. 可解释性:在返回给前端时,附带**“可信区间宽度”**与“样本数”两个字段,让用户知道“分高但样本少”的风险,提升产品透明度,符合国内监管对算法可解释的要求。