题目重点:从 member/job 特征和历史交互构造训练样本,处理未曝光、位置偏差、时间切分及上线评估。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 预测对象是一次真实展示事件 impression,标签是在定义的观察窗内是否点击;未展示职位不能直接作负样本。
- 模型在展示时刻只能使用当时可得的用户、职位及交互特征;点击后才产生的特征不可入模。观察窗、候选召回、职位过期策略题目未明确。
解题路线
- 按 impression_id、member_id、job_id、shown_at 与展示位置写曝光日志,并用稳定事件 ID 关联点击;设例如 24 小时点击窗只是训练示例,真实窗口要按产品反馈时延测量。晚到点击先延迟标签成熟,再生成负样本。
- 用户特征含授权资料与历史搜索/点击摘要,职位特征含标题、技能、地点和文本 embedding;交叉特征可包括技能匹配、距离与双方近期偏好。所有统计按 shown_at 的 as-of snapshot 取,防未来泄漏。
- 双塔/embedding 可先对用户与职位做召回,再以交叉模型预测点击率;如果题目只问展示后的点击,则先做简单 logistic/GBDT baseline,避免无必要地引入全量召回。
- 训练用 BCE 或加权 BCE,负样本只从曝光未点产生;position bias/选择偏差可通过随机桶、逆倾向加权或受控实验估计,不能把观察点击率直接当真实偏好。
- 离线按时间分割并按用户/职位冷启动切片看 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 何时刷新?
