Senior MLE · Tech Phone ML System Design

LinkedIn 职位点击预测:曝光标签、用户职位 Embedding 与数据泄漏

从 member/job 特征和历史交互构造训练样本,处理未曝光、位置偏差、时间切分及上线评估。

题目重点:从 member/job 特征和历史交互构造训练样本,处理未曝光、位置偏差、时间切分及上线评估。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 预测对象是一次真实展示事件 impression,标签是在定义的观察窗内是否点击;未展示职位不能直接作负样本。
  • 模型在展示时刻只能使用当时可得的用户、职位及交互特征;点击后才产生的特征不可入模。观察窗、候选召回、职位过期策略题目未明确。

解题路线

  1. 按 impression_id、member_id、job_id、shown_at 与展示位置写曝光日志,并用稳定事件 ID 关联点击;设例如 24 小时点击窗只是训练示例,真实窗口要按产品反馈时延测量。晚到点击先延迟标签成熟,再生成负样本。
  2. 用户特征含授权资料与历史搜索/点击摘要,职位特征含标题、技能、地点和文本 embedding;交叉特征可包括技能匹配、距离与双方近期偏好。所有统计按 shown_at 的 as-of snapshot 取,防未来泄漏。
  3. 双塔/embedding 可先对用户与职位做召回,再以交叉模型预测点击率;如果题目只问展示后的点击,则先做简单 logistic/GBDT baseline,避免无必要地引入全量召回。
  4. 训练用 BCE 或加权 BCE,负样本只从曝光未点产生;position bias/选择偏差可通过随机桶、逆倾向加权或受控实验估计,不能把观察点击率直接当真实偏好。
  5. 离线按时间分割并按用户/职位冷启动切片看 log loss、calibration、AUC/PR;线上看有效点击、申请、用户负反馈、职位公平曝光与延迟,监控特征新鲜度、概念漂移和反馈回路。

手动走一遍

用户在 10:00 看到职位 J,11:00 点击;训练样本只能使用 10:00 前的交互和当时职位版本。若把 11:00 点击写入用户历史再回填 10:00 样本,模型会看到答案。另一职位从未展示,不能把它标为‘看过但未点’。

规模与取舍

若每天 I 次曝光、特征维度 d,日志与训练样本约 O(I),线性 baseline 训练每轮 O(Id);embedding 索引容量随活跃用户 U、职位 J 与向量维度 d 增长 O((U+J)d)。具体 QPS、维度与保留期需问,题目未明确。

易错点与追问

容易失分的边界

  • 把未曝光职位当负样本。
  • 用点击之后更新的历史构造展示前特征。
  • 随机切分泄漏同一用户/职位的未来状态。
  • 只优化 AUC,不看校准和申请/负反馈。
  • 位置偏差未校正,把排前面的职位误当更相关。

继续深挖

  • 职位发布后无点击,如何冷启动?
  • 点击与申请目标冲突时如何联合优化?
  • 延迟到来的点击如何修正标签?
  • 用户/职位 embedding 何时刷新?
✓已复制微信号!