题干与适用场景
信息流每次展示 10 个推荐结果。候选排序模型在历史隐式反馈日志上的 NDCG@10 有所提升。请设计离线评估和在线实验,判断它是否应该上线。回答需要覆盖数据切分、候选集、排序与非准确率指标、曝光偏差、实验设计、护栏指标,以及离线胜出者在线上失败时的排查方法。
这是一道适用于机器学习工程师和数据科学岗位的代表性面试题。它考察的是模型决策,不要求设计整套推荐平台。题目假设反馈来自点击、收藏或观看时长等隐式行为。日志只记录旧系统曾经曝光的内容及其结果;用户没有看到的内容没有反馈,只能视为未知,不能直接认定为负样本。
面试官考察点
普通回答会列出 Precision、Recall 和 NDCG。高质量回答会先定义用户行为目标和推荐场景,因为搜索结果、首页信息流和“相似商品”即使使用同名指标,业务含义也不同。随后要保证基线与候选模型可比:使用相同的时间截点、用户、准入规则、候选集、标签定义和 K 值。
第二个重点是能否识别历史日志的局限。随机切分交互记录可能把后续行为泄漏到训练集;负采样方法可能改变模型的优劣顺序;历史日志偏向旧策略已经选中并曝光的内容,还会把真实偏好、曝光和位置影响混在一起。离线评估可以淘汰薄弱或不安全的模型,却无法单独证明更换策略会给产品带来因果改善。
最后要给出一条可执行的上线路径:稳定的随机分组、曝光日志、一个主指标、系统和用户伤害护栏、统计功效与实验周期、回滚条件、分群检查,以及离线与在线结论冲突时有顺序的诊断方案。
回答前需要澄清的问题
- 希望改善哪一种用户决策? 如果目标是尽快找到至少一个有用结果,MRR 更有意义;如果十个位置都可能贡献价值,NDCG 和累计互动更合适。
- 标签如何定义,多久才成熟? 点击、有效观看、收藏、购买和明确“不喜欢”代表不同效用。延迟购买需要足够长的标签观察窗口。
- 排序模型面对全量内容,还是上游召回给出的候选? 评估必须保留生产中的候选边界。召回没有提供的相关内容,排序模型无法补救。
- 历史上每个时间点有哪些内容具备展示资格? 已删除、不可用或尚未创建的内容不能出现在更早时间的候选集中。
- 产品能否运行随机实验? 如果不能,结论必须更谨慎。已记录的曝光概率可用于反事实估计,但旧策略几乎从未选择的区域没有足够支持,不能据此外推。
- 哪些结果绝对不能退化? 延迟、错误、隐藏或举报、内容集中度、供给方曝光和下游质量都可能约束一个互动上升的模型。
30 秒回答框架
“我不会只凭 NDCG@10 上升就上线。首先固定产品目标、标签、K、按时间切分方式、当时可用的内容、召回边界和对照基线。然后在同一批样本上看 Recall@10 与 NDCG@10,并按业务风险补充覆盖率或多样性,再检查新用户、稀疏用户、新内容和重点市场。未曝光内容要视为未知,负采样方法也要完整记录。候选模型通过离线门槛后,我会按用户稳定随机分组,记录分组与曝光,预先确定一个用户或业务主指标、延迟和伤害护栏、最小可检测效应、周期与回滚阈值。离线胜出只代表有资格进入实验;随机在线结果才决定它是否真正改善产品。”
分步骤深入解答
第一步:先定义决策,再选择指标
先写出一句明确的估计目标:“对于目标人群中符合条件的信息流请求,在整个实验观察期内,把当前排序模型换成候选模型,会让主用户结果变化多少?”这句话固定了人群、干预、结果和时间范围,也能防止事后挑选最有利的指标。
对照至少包含生产排序模型和一个简单的热门或时效基线。简单基线可以发现一条看似复杂、实际连廉价策略都无法超过的流水线。如果当前问题只评估排序模型,就固定准入过滤和召回结果;如果召回也改变了,要拆成独立实验,或明确说明比较的是端到端系统。
第二步:按历史时间点重建离线样本
对时间 t 的每次评估请求,只能使用 t 之前可获得的特征、t 时刻的内容库与准入状态,并把后续行为放进标签窗口。训练、验证和测试按时间先后切分;同一用户或会话的相关事件如果跨集合会透露答案,还要按用户或会话分组。查看候选结果前,先冻结特征定义、过滤与去重规则、标签成熟度。
让基线和候选模型使用完全相同的用户、请求、候选池、标签、截点和 K。同时报告因为特征缺失或标签未成熟而排除的流量,否则模型可能通过悄悄丢弃难例获得“提升”。分群至少应按场景选择新老用户、稀疏与重度用户、新老内容、地区、设备和内容分类。
第三步:让每个指标对应一个产品结论
假设留出的相关内容是 {A, C},前五名排序为 [A, B, D, C, E]。Precision@5 为 2 / 5,Recall@5 为 2 / 2 = 1。NDCG 会给第 1 位的 A 比第 4 位的 C 更高的权重,因此既考察是否命中,也考察顺序。只有第一个相关结果最重要时,MRR 更合适。
这些指标回答的问题不同:
- Recall@K: 已标记相关的内容有多少进入前
K。 - Precision@K: 展示的
K个内容中有多少被标记为相关;隐式反馈中可能存在假阴性。 - NDCG@K: 高收益内容是否更靠前,并对排名位置进行折损。
- MRR@K: 第一个被标记为相关的内容出现得多早。
- 覆盖率、多样性、新颖性或校准度: 策略是否覆盖足够的内容库、避免列表重复、提供发现价值,或让推荐组合贴近用户兴趣。只选择与产品风险直接相关的指标。
还要加入服务指标,包括延迟、错误率、降级率、特征可用率和分数分布。无法满足线上预算的离线模型没有上线条件。不存在适用于所有推荐场景的单一离线指标。
第四步:把历史日志偏差显式化
旧系统决定用户有机会看到什么。一次点击同时包含“被曝光”和“采取正向行为”;没有点击可能是无兴趣、位置太差,也可能根本没有曝光。不能把所有未观察到的内容当成确定负样本。资源允许时,全量内容排序最便于比较。如果必须负采样,所有模型要共享相同的候选池、采样器、样本数和随机种子,完整披露这些设置,也不能把采样指标和全量内容指标直接比较。不同负采样器甚至可能颠倒模型排序。
离线结论仍然受历史策略约束。如果日志记录了随机曝光概率,逆倾向加权、自归一化估计或双重稳健估计可以减轻策略偏差,但旧策略几乎没有曝光的区域不会因此产生证据。需要报告策略重叠范围和权重方差;如果少数极端权重主导结论,就应截断权重或放弃该估计。
第五步:把离线候选转成在线实验
在推荐曝光前按稳定单元随机分组,通常使用用户或账户。当一个人的处理会影响另一个人的结果,例如家庭共用、社交推荐或共享库存时,应按家庭或社交群组等集群随机。记录分组、准入、推荐列表、位置、曝光、行为、模型版本和降级状态。分析按最初分组进行,也就是意向治疗分析,不能把候选组中的错误和降级样本删掉。
选择一个与既定目标一致的用户或业务主指标。预先确定最小可检测效应、显著性水平、统计功效、流量比例、周期和结果观察窗口。护栏可以包含 p95 延迟、错误、隐藏、举报、放弃率、内容集中度和下游质量。解释实验影响前,先检查样本比例异常、分组稳定性、实际曝光率、埋点完整度和两组标签成熟度。
从小流量、可快速回滚的阶段开始,只有护栏正常才扩大。停止和回滚条件需要预先定义。季节性和延迟结果可能要求覆盖完整业务周期或更长窗口;在普通固定周期实验中反复查看并在某天结果有利时停止,会提高假阳性率。
第六步:排查离线胜出、线上失败
按边界顺序检查,不要立即把模型判定为失败:
- 实验完整性: 样本比例异常、分组不稳定、曝光缺失或两组降级率不同。
- 服务一致性: 线上特征、过滤、召回、时效、延迟和模型版本是否与离线回放一致。
- 评估构造: 是否有未来信息泄漏、不真实的随机切分、不同候选池或偏向某模型的负采样。
- 目标错配: NDCG 优化了历史点击,而产品真正看重满意度、留存、购买或多样化发现。
- 策略偏差: 候选模型探索了旧日志没有覆盖的内容与位置,离线标签因此低估或误判其价值。
- 异质性影响: 整体提升掩盖了新用户、某市场、某类内容或高价值人群的损失。
- 动态变化: 新鲜感消退、创作者或供给方调整行为,或新曝光分布改变后续训练数据。
可复用的决策规则分三层:离线证据说明候选模型在已知历史条件下有合理性且风险可控;随机在线实验估计它对真实产品的因果影响;生产监控验证这种影响能否在用户、内容库和反馈循环变化后持续存在。
高质量示范回答
“我会先保证两个排序模型可比。评估截点、可展示内容、召回输出、标签、用户和 K=10 必须完全相同,所有特征都只能来自请求发生时已经存在的信息。我会用时间外测试集,并报告被排除的数据量和标签成熟度。除了生产模型,还会保留热门基线,因为连简单基线都赢不了的复杂模型不具备上线条件。
NDCG@10 能衡量顺序,但不能独自决定上线。我会加入 Recall@10,再按产品风险看内容覆盖率、列表内多样性,以及延迟和降级率。新用户、稀疏用户、新内容和重点市场要单独分群。我还会说明负样本如何产生。历史策略决定了曝光,未曝光内容只能视为未知;如果必须负采样,所有模型要使用同一个采样器,结果也不能和全量内容指标混比。
候选模型通过这些检查后,我会按用户持续稳定地随机分组,在行为发生前记录分组和曝光,并把降级情况保留在原分组中分析。我会预先确定一个主指标、最小可检测效应、统计功效、实验周期、护栏和回滚标准,解释提升前先检查样本比例和埋点是否正常。
如果离线 NDCG 上升但在线主指标下降,我先检查实验完整性和服务一致性,再检查时间泄漏、候选与采样不一致、代理指标失真、曝光偏差和分群差异。离线结果只让候选模型获得实验资格;线上因果结果和护栏都通过,才获得上线资格。”
常见错误
- 只因 NDCG 上升就上线 → 离线排序质量受历史标签约束,无法估计产品因果影响 → 把它作为筛选信号,再要求随机在线结果和护栏通过。
- 随机切分交互记录 → 用户后续行为或内容状态可能泄漏到训练集 → 按时间点切分,并按当时状态构造特征、内容准入和标签。
- 同时修改召回和排序却不说明 → 无法判断提升来自哪里 → 比较排序模型时固定候选生成,或明确标注为端到端处理。
- 把所有未观察内容当负样本 → 很多内容从未曝光 → 区分已曝光未互动与未知内容,并披露评估候选集。
- 每个模型使用不同负样本 → 比较同时改变了模型和测试难度 → 共享候选池、采样器、样本数和种子,或直接做全量排序。
- 只报告一个整体指标 → 全局平均值可能掩盖冷启动或市场损失 → 同时报告预先确定的分群结果、不确定性和整体结果。
- 没有产品目标就优化点击 → 位置偏差或诱导点击可能改善代理指标、损害满意度 → 选择模型前定义主结果和伤害护栏。
- 从候选组中删除降级样本 → 这会隐藏真实服务失败并破坏随机分组 → 采用意向治疗分析,并把降级率作为护栏。
- 反复查看直到实验显著 → 未计划的重复停止会提高假阳性率 → 固定周期和分析计划,或使用有效的序贯实验设计。
- 立即把离线线上差距归因于模型漂移 → 日志、服务一致性或分组故障会产生同样表现 → 先检查实验完整性和服务一致性,再分析模型行为。
追问及应对
追问一:如果无法运行在线实验怎么办?
使用时间外回放、多个历史窗口、强基线、分群测试,以及影子流量或小范围灰度降低运营风险,但要明确因果产品影响仍未得到证明。如果日志记录了随机曝光概率,而且新策略的选择有足够历史支持,可以加入 IPS、自归一化 IPS 或双重稳健估计,并检查重叠和方差。不能把这些方法当成向历史支持范围之外外推的许可。
追问二:如何评估新用户和新内容?
在评估截点建立明确的冷启动人群,禁止后续用户历史或内容互动进入特征。比较降级策略覆盖率、首个会话结果、新内容曝光和首次有效行为耗时。由成熟用户和热门内容主导的整体指标无法回答冷启动问题。
追问三:观看时长上升但多样性下降怎么办?
回到预先确定的目标和约束。如果多样性保护长期满意度、内容生态或用户选择,就应把它作为护栏或受约束的优化目标,不能看到结果后再把无关指标随意平均。按人群查看内容集中度和重复曝光分布,再把重排或多样性约束作为新的实验处理。
追问四:什么时候应该按集群而不是用户随机?
处理效果会跨单元传播时使用集群:家庭账户共享屏幕、社交推荐影响朋友,或平台曝光改变共享库存。逐个用户随机会破坏独立性并污染两组。集群分组会降低有效样本量,所以统计功效计算必须考虑集群内相关性。
追问五:反事实评估能否替代 A/B 测试?
当行为倾向概率已知且策略重叠足够时,它可以筛选策略。IPS 用加权纠正曝光,自归一化 IPS 用少量偏差换取方差控制,双重稳健方法结合结果模型和倾向加权。倾向概率缺失、重叠差、权重极端或结果模型错误都可能使它们失效,因此上线结论仍应尽量通过随机在线实验验证。
追问六:上线后如何发现有害的反馈循环?
按连续人群监控曝光集中度、创作者或供给方触达、内容库覆盖率、重复曝光和结果质量,不能只看即时互动。日志保留模型与策略版本,持续比较训练数据构成,并在条件允许时保留小流量参考或探索策略。集中度或伤害护栏超过预设阈值时,回滚或约束策略。