你在做一个内容推荐模型,特征里有一条『用户近 7 天在该品类的点击率』,它是在离线用全量日志按 (user_id, category) 聚合算出来的。加上这条特征后,离线训练 AUC 从 0.78 涨到 0.92,但上线后线上 AUC 只有 0.63。请说明:这条特征为什么能在离线把 AUC 抬得这么高?你会怎么改?
面试官在考什么
判断候选人是否真正理解特征与标签的时间对齐(特征穿越 / 未来信息泄漏),以及能不能给出可落地的修法。
回答框架 · 前两步
- 这条特征的统计窗口覆盖了样本发生之后的点击行为,标签信息被编码进特征,离线相当于『看答案』,所以 AUC 虚高;
- 泄漏不只发生在数据集切分环节,更发生在特征计算环节:聚合必须 point-in-time,只用到样本曝光时刻之前产生的数据;
还有 3 条答案要点、 3 层追问、 4 个常见坑, 以及针对你简历的追问路径,在定制报告里。
同一能力域的其他题
- 冷启动问题你会怎么处理?新用户和新物品的策略一样吗?请分别说。
- 离线 AUC 涨了但线上 CTR 没涨,你会按什么顺序排查?请给出具体清单。
- CTR 模型里为什么要用 GAUC 而不只看 AUC?GAUC 是怎么算的、它解决了什么问题?
- 特征工程里你会怎么做特征穿越(label leakage)的检查?请举一个推荐场景里常见的穿越例子。
- 你做过线上 A/B 实验,请说明分流、样本量、显著性判断的要点。如果一个实验 p 值不显著,你怎么处理?
- 你在做一个首页信息流的 CTR 模型,要加一维特征「用户过去 7 天在该一级类目下的点击率」。训练样本取自 8 月 1 日–8 月 7 日的曝光日志(每天约 2 亿条),你打算 1–6 日做训练、7 日做验证。请说明:这个特征的统计窗口在离线训练和线上 serving 分别应该怎么算?为什么不能直接对整份日志算一个「过去 7 天」的统计再 join 回每条样本?