题目重点:Set A 问特征工程是什么、为什么重要;围绕可预测信息、编码缺失、泄漏与漂移设计验证。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练版用带时间戳的交易分类场景举例;题目未明确原始数据和真实特征。
- 所有特征必须在预测决策发生前可得,且训练/在线转换使用相同规则。
解题路线
- 定义特征工程:把原始字段/事件变成模型可用、可解释且在推理时可获取的输入;包括清洗、聚合、编码、缺失处理与时间窗口。
- 按预测时点画时间线,建立 point-in-time join,防把结案后的结果、未来交易或全量统计写入训练特征。
- 从业务机制选特征,如过去 24 小时交易频率、设备变化或账户年龄;同时检查归一化、类别 OOV、极端值和高基数 ID。
- 在训练折拟合编码器/均值/标准化参数并随模型发布;线上记录特征版本、时间戳与缺失率,回放同一请求核 train-serving skew。
- 做消融实验比较增益与计算/延迟/隐私成本,关注分群质量,避免只是为提高离线分数增加脆弱特征。
手动走一遍
训练例:要在 10:00 判一笔交易是否高风险,‘该账户当天 23:59 交易总数’是未来信息,不能用;‘截至 10:00 前 24 小时交易数’可用,但要定义延迟到达事件如何处理。
规模与取舍
窗口聚合成本随事件量和窗口数增加,可预聚合并缓存,但需权衡新鲜度与在线延迟;题目未给维度和 SLA。
易错点与追问
容易失分的边界
- 只说手工造新列,不解释预测时点。
- 在全数据 fit 编码器/标准化器导致泄漏。
- 线上特征定义与离线 SQL 不一致。
- 高基数标识符记住训练样本却无法泛化。
继续深挖
- 如何做 point-in-time 正确的历史回填?
- 新类别上线如何处理?
- 特征离线提升但线上延迟超标怎么办?
