AI 第一章 机器学习基础场景(AI-01 ~ AI-12)
AI-01. 风控模型上线后把欺诈全放过了(类别不平衡)
【考察内容】类别不平衡是机器学习场景题第一高频
【题目】风控团队要做欺诈识别:100 万条历史样本里只有 1000 条是欺诈(0.1%)。直接训练的分类模型“看起来准确率 99.9%”,上线后却把欺诈几乎全放过了。为什么?数据/算法/评估三个层面分别怎么解决?
【参考答案】
直接训练的后果:模型倾向预测多数类(准确率虚高但抓不住少数类),欺诈基本漏检;
解决手段(分层使用):
- 数据层面:欠采样多数类(随机欠采样/近邻清理)、过采样少数类(随机复制/SMOTE 合成)、SMOTE(在少数类样本的 K 近邻间插值生成新样本);
- 算法层面:类别权重(class_weight/scale_pos_weight,XGBoost 参数)、损失函数改进(Focal Loss 关注难分样本);
- 评价层面:不能用准确率,用 F1、PR-AUC、ROC-AUC、Recall@阈值——评估少数类捕获能力;
- 异常检测思路:极端不平衡(<1%)时可转为异常检测(孤立森林/自编码器);
工程注意:只在训练集上做重采样(验证集保持真实分布,否则评估失真);过采样易过拟合(结合交叉验证);线上预测阈值单独调(按业务容忍度选召回/精度平衡点);
优先级建议:先调类别权重+换指标(成本最低),效果不足再 SMOTE。
关键公式: Precision=TP/(TP+FP),Recall=TP/(TP+FN),F1=2PR/(P+R);PR-AUC 为 Precision-Recall 曲线下面积,随机基线≈正样本率。Accuracy=(TP+TN)/N 在极度不平衡下失效。XGBoost
scale_pos_weight≈N_neg/N_pos。线上-离线差异: 离线验证集保持真实分布时指标才可迁移;线上阈值、名单容量、人工复核带宽会进一步压低有效 Recall。上线后看“坏账/欺诈命中率”与“误杀率”,不是只看离线 F1。
【原理溯源】
- 为什么不平衡时模型会“躺平”预测多数类? 交叉熵对每个样本等权累加。正样本只占 0.1% 时,模型只要把所有样本判为负,就能把损失压到极低——梯度被 99.9% 的负样本主导,正样本的错误几乎推不动参数。准确率同步虚高,形成“指标好、业务废”的假象。
- SMOTE 为什么有效、什么时候失效? SMOTE 在少数类近邻之间线性插值,相当于在特征空间里“扩大正类决策区域”,补偿了样本量差距。失效场景:① 少数类本身是离群点/噪声,插值会生成更离谱的假样本;② 高维稀疏特征(One-Hot ID)里“近邻”没有语义意义,插值点落在空区域;③ 与决策边界重叠时生成混淆样本(Borderline-SMOTE 只在边界附近合成,缓解此问题)。
- 为什么评估必须换指标? 准确率 = 正确数/总数,多数类占 99.9% 时全猜负也有 99.9%。F1 强制同时看 Precision 和 Recall(少数类视角);PR-AUC 只关注正类排序质量,比 ROC-AUC 在极端不平衡下更敏感(ROC 的 FPR 分母是海量负样本,稀释了差异)。
- 为什么“只在训练集重采样”? 重采样改变了类分布。若验证集也被重采样,评估分布不再等于线上真实分布,Precision/Recall 都会失真——训练可以“造假数据”,评估必须“看真世界”。
【选型判断树】
面对类别不平衡:
1. 不平衡程度
├─ 轻度(正类 10%–30%)→ 换 F1/AUC 即可,通常不必重采样
├─ 中度(1%–10%)→ 类别权重 + 评估换指标;不够再 SMOTE
└─ 极端(<1%)→ 先考虑异常检测(孤立森林/AE);若仍做分类,加权+难例挖掘
2. 业务代价
├─ 漏报代价远大于误报(风控/疾病)→ 压低阈值提 Recall,用 PR 曲线选点
└─ 误报代价大(营销打扰)→ 偏 Precision,阈值抬高
3. 评估
└─ 一律不用 Accuracy;主看 F1 / PR-AUC / Recall@业务阈值【口述骨架】(5 分钟)
| 时间 | 任务 | 内容 |
|---|---|---|
| 0:00–0:30 | 定性 | “这是类别不平衡:梯度被多数类主导,准确率失真” |
| 0:30–2:00 | 数据层 | 重采样(过/欠/SMOTE)、只在训练集做 |
| 2:00–3:30 | 算法+评估 | class_weight / Focal Loss;换 F1/PR-AUC;极端转异常检测 |
| 3:30–4:30 | 工程细节 | 验证集保真分布;阈值按业务代价单独调 |
| 4:30–5:00 | 收尾 | “先加权+换指标,再 SMOTE;评估永远看真分布” |
【关键数字】
| 参数 | 经验值 | 说明 |
|---|---|---|
| 欺诈/疾病正样本率 | 常见 0.1%–1% | 与判断树同档:<1% 就同步评估异常检测(孤立森林/AE);若监管要求可解释、不允许转异常检测,则走「类别权重+换指标(PR-AUC/召回@精确率/成本矩阵)」 |
| 负正样本权重比 | scale_pos_weight≈负/正(如 100–1000) | XGBoost 常用起点 |
| SMOTE k 近邻 | k=5 | 小类样本更少时调小 |
| PR-AUC 基线 | 随机≈正样本率 | 0.1% 时随机 PR-AUC≈0.001 |
| AUC 在不平衡场景的分档 | >0.95 警惕、>0.98 默认先查泄漏 | 阈值随任务不同,与 AI-21【AUC 可疑分档】同一口径(见 AI-11) |
【追问链】(三层)
L1|“SMOTE 和简单复制正样本有什么区别?” → 复制不增加信息,模型更易记住那几条正样本(过拟合)。SMOTE 在近邻间插值,生成新的、略有差异的正样本,决策边界更平滑。但高维稀疏时插值无意义。
L2|“验证集要不要也过采样?” → 不能。过采样改变了类分布,Precision 会虚高。验证集必须保持线上真实分布,否则你选出的模型在线上是另一副模样。
L3|“极端 0.01% 时你还做分类吗?” → 先评估异常检测路线:孤立森林 / AutoEncoder 学“正常长什么样”,偏离即异常。缺陷是可解释性弱、阈值难调。若监管要求可解释,仍做分类但强加权 + 人工复核队列。
【评分标准】
| 档位 | 答案特征 |
|---|---|
| 60 分 | 知道过采样/欠采样/SMOTE 和换指标 |
| 80 分 | 分数据/算法/评估三层;强调只在训练集重采样;会用 F1/PR-AUC |
| 95 分 | 讲清梯度被多数类主导的机制;知道 PR-AUC 为何比 ROC 敏感;极端不平衡转异常检测;阈值与代价敏感决策 |
【关联题】
- 同一知识簇: AI-17(样本加权)、AI-21(评估指标)、AI-27(多分类 Macro-F1)
- 工程衔接: AI-05(线上效果差)、AI-26(阈值选择)
- 陷阱关联: AI-11(数据泄漏导致指标虚高)
【自测】
- 为什么 0.1% 欺诈率下 99.9% 准确率无意义? 参考答案: 全判负就有 99.9%,指标被多数类淹没,完全不反映抓欺诈能力。
- SMOTE 在什么特征空间失效? 参考答案: 高维稀疏(如 One-Hot ID)——近邻无语义,插值点落在空区。
- 为什么验证集不能重采样? 参考答案: 要保持线上真实类分布,否则 Precision/Recall 失真,选出的模型线上不可用。
AI-02. 训练集 99%、测试集 70%,模型“背题”了(过拟合)
【考察内容】过拟合是 ML 基础必考题
【题目】你们训练的分类模型:训练集准确率 99%,测试集只有 70%,差距巨大。这说明模型记住了训练数据的“细节和噪声”而不是规律。怎么判断确认是过拟合?从数据、正则、模型复杂度、集成几个方向怎么解决?
【参考答案】
判断:训练/测试差距大=过拟合(模型记住了训练集噪声/细节,泛化差);
解决手段(从数据到模型):
- 数据:增加数据量(收集/数据增强)、降低数据噪声(清洗异常样本);
- 正则化:L1/L2 正则(约束参数复杂度)、Dropout(随机失活神经元)、Early Stopping(验证集不再提升即停);
- 简化模型:降低模型复杂度(减少层数/特征数/树的深度,限制叶子节点);
- 集成:Bagging(随机森林)降低方差;
- 交叉验证:正确评估泛化(K 折),避免在测试集上调参(测试集污染);
特征层面:特征选择(去掉噪声特征)、特征降维(PCA);
排查顺序(先分清「泄漏能解释什么」,否则第一刀会砍错):训练 99/测试 70 这种 train-test 差,首要嫌疑是容量过大、正则不足或训练分布问题——若泄漏特征在测试集同样可算,训练和测试会一起虚高,解释不了这 29pp 差;只有「train-only 泄漏」(目标编码/统计量在切分前用全量算过、重复样本或时间穿越落在训练侧)才会只抬高训练集。所以顺序:① 画学习曲线+与噪声地板比(先判过拟合还是欠拟合)→ ② 查是否存在 train-only 泄漏 → ③ 降容量/加强正则 → ④ 交叉验证稳定后才跑最终测试集一次。
关键公式与机制: 偏差-方差分解:E[误差]=Bias²+Variance+Noise。L2:L=L0+λ||w||²;L1 促稀疏。Dropout 可视为集成近似。
排查步骤: ① 学习曲线(训练/验证随样本量)② 泄漏检查——重点查「只抬高训练集」的那类:切分前算的目标编码、训练/测试重复样本、特征时间戳穿越;训练与测试一起高、线上更差时才是查泄漏 ③ 降容量/加强正则 ④ 交叉验证稳定后再报测试集。线上-离线:离线还可能因采样策略、特征穿越导致差距。
【原理溯源】
- 过拟合的本质是“记忆噪声”还是“学到了规律”? 模型容量足够大时,可以把训练集中随机噪声也拟合进去——训练损失继续下降,但学到的是“这条样本长什么样”而非“这类样本有什么规律”。测试集来自同一分布但样本不同,噪声模式不复现,于是准确率骤降。统计语言:偏差低、方差高。
- L2 正则为什么能防过拟合? L2 在损失里加入 λ‖w‖²,参数变大会直接抬高损失。模型若想靠某个特征的极端权重去拟合个别噪声样本,会付出全局代价,于是权重分布更平滑、决策边界更简单——用一点偏差换大幅方差下降。L1 更狠,会把不重要特征的权重压到 0,顺带做了特征选择。
- Early Stopping 为什么有效? 训练前期模型学的是共性规律(训练/验证同步提升);后期开始记噪声(训练继续升、验证开始降)。在验证集峰值处停住,等于隐式限制了有效模型容量。
- Bagging 为何降方差? 多个模型在自助采样子集上独立训练,噪声被不同子集“稀释”,平均/投票后互相抵消——对高方差、低偏差的模型(如深树)最有效。
【选型判断树】
训练 99% / 测试 70%:
1. 先看曲线再查数据
├─ 训练/测试一起虚高、线上更差 → 查泄漏并先修(AI-11)
├─ 训练 99、测试 70(train-only)→ 先减容量/加正则,并查切分前算的统计特征
└─ 标签噪声大不大?→ 清洗异常样本
2. 再看容量与正则
├─ 模型很深/特征很多 → 砍深度、砍特征、加强 L2/Dropout
└─ 训练轮数过多 → Early Stopping
3. 数据是否太少
├─ 是 → 增数据 / 数据增强 / 降容量
└─ 否 → 交叉验证确认稳定性,考虑 Bagging 集成【口述骨架】(5 分钟)
| 时间 | 任务 | 内容 |
|---|---|---|
| 0:00–0:30 | 定性 | “训练高测试低 = 方差大 = 过拟合;先看曲线,泄漏只算 train-only 那一类” |
| 0:30–2:00 | 数据与正则 | 加数据/清洗;L1L2、Dropout、Early Stopping |
| 2:00–3:30 | 模型与集成 | 降复杂度;Bagging 降方差;特征选择 |
| 3:30–4:30 | 评估纪律 | K 折交叉验证;绝不在测试集上调参 |
| 4:30–5:00 | 收尾 | “先数据后模型,正则与减容量是主线,Bagging 兜底” |
【关键数字】
| 参数 | 经验值 | 说明 |
|---|---|---|
| 训练/测试差距 | 先与测试集噪声比:n_test=1000 时 σ(差值)≈1.9pp,>5pp 即超噪声可判过拟合;15–20pp 是「重度」而非判定门槛 | 结合任务难度与样本量看 |
| L2 λ | 1e-4 ~ 1e-2 | 网格搜索 |
| Dropout | 0.2–0.5 | 太高直接欠拟合 |
| Early Stopping patience | 5–10 个 epoch | 看验证曲线 |
| K 折 | 5 或 10 | 小数据用 10 |
【追问链】(三层)
L1|“正则化为什么能防过拟合?” → 惩罚大参数,降低模型对个别特征的敏感度,决策面更平滑。用一点偏差换方差下降。
L2|“过拟合和欠拟合怎么一眼区分?” → 训练差 = 欠拟合(偏差高);训练好、测试差 = 过拟合(方差高)。两者解法方向相反:欠拟合要加容量/加特征,过拟合要减容量/加正则/加数据。
L3|“你在测试集上调了超参,发现测试分从 70% 涨到 75%,能汇报吗?” → 不能。测试集已被污染,75% 是过拟合测试集的虚高值。正确做法:训练集内做交叉验证调参,测试集只在最终模型上跑一次。
【评分标准】
| 档位 | 答案特征 |
|---|---|
| 60 分 | 知道 Dropout、加数据、降复杂度 |
| 80 分 | 能分数据/正则/模型/集成四条线;会提 Early Stopping 与交叉验证 |
| 95 分 | 讲清偏差-方差机制;能区分两类泄漏(train-only 会拉大 train-test 差;两侧同算的泄漏让两边一起虚高);明确“测试集不可调参”;Bagging 降方差的原理 |
【关联题】
- 同一知识簇: AI-03(欠拟合)、AI-04(小样本)
- 陷阱关联: AI-11(数据泄漏)、AI-10(时序泄漏)
- 工程衔接: AI-22(A/B 显著性)
【自测】
- 训练 99% 测试 70%,第一件事做什么? 参考答案: 先画学习曲线判是过拟合还是欠拟合;再查只抬高训练集的那类泄漏(切分前算的目标编码、重复样本、时间穿越)。若训练与测试一起虚高、只有线上差,才是查泄漏的主场景。
- Early Stopping 隐式限制了什么? 参考答案: 有效训练容量/迭代次数,阻止后期记忆噪声。
- 为什么不能在测试集上选超参? 参考答案: 会过拟合测试集,最终指标虚高,失去“未见数据”的评估意义。
AI-03. 训练集都只有 70%,模型“没学会”(欠拟合)
【考察内容】偏差-方差权衡
【题目】新模型训练完,连训练集准确率都只有 70%——不是过拟合,是“没学会”。可能是什么原因(模型容量不够、特征没信息、训练不充分、正则过强)?分别怎么解决?
【参考答案】
判断:训练集本身就不达标=欠拟合(模型容量不足/特征不足/训练不充分);
解决手段:
- 增加模型容量:换更强的模型(LR→GBDT→深度模型)、增加层数/参数/树的数量与深度;
- 特征工程:增加有效特征(交叉特征、统计特征)、特征组合挖掘;
- 训练更充分:增加训练轮数、调整学习率(可能学习率过低收敛慢)、换优化器;
- 减少正则:正则化过强会欠拟合(降低 L2 权重/关闭过强 Dropout);
- 数据问题:样本量太少/标签噪声大(清洗数据);
排查顺序(与本题判断树、口述骨架、评分标准同一口径:先确认「训得动」,再谈特征):① Loss 还在降吗 → 是=训练不充分(加轮数/调大学习率/换优化器;此时改特征是白工);② 正则是否过强(λ 过大、Dropout 过高);③ 特征是否含有效信息(重要性/EDA);④ 都排除了再换更强模型;
与过拟合对比:欠拟合=偏差高(换强模型/加特征),过拟合=方差高(正则/减复杂度/加数据)——方向相反。
关键公式: 同偏差-方差框架:欠拟合=Bias 高、Variance 低。训练误差本身高说明假设空间/特征/优化未到位。
排查步骤: 看特征重要性/EDA → 简单基线(规则/线性)→ 提高容量 → 调学习率与 epoch → 检查标签质量。线上-离线:欠拟合模型离线差线上通常也差,优先修离线。
【原理溯源】
- 为什么“训练集都上不去”一定是欠拟合? 训练集是模型直接优化的目标。若训练损失居高不下,说明模型还没能力拟合这些数据——要么假设空间太小(容量不够),要么输入里根本没有可学的信号(特征无信息),要么优化没跑到位(学习率/轮数/正则)。
- 为什么正则过强会导致欠拟合? L2/Dropout/强 Early Stopping 都在限制有效容量。λ 过大时,模型宁可欠拟合也不许参数变大——损失函数里“拟合数据”的项被“保持简单”的项压过。
- 为什么加特征有时比换模型更有效? 线性模型学不了“城市×品类”这种组合效应,除非你显式提供交叉特征。特征是“把问题变简单”的手段;模型是“在给定特征上学映射”。特征没信息时,堆参数只是在拟合噪声。
- 学习率过低为什么“看起来像欠拟合”? 优化器还在半山腰,参数远未到极小点,训练损失高。此时不是容量问题,而是优化未完成——先看 loss 曲线是否还在下降。
【选型判断树】
训练集只有 70%:
1. Loss 曲线还在降吗?
├─ 是 → 训练不充分:加轮数 / 调大学习率 / 换优化器
└─ 否 → 进入下一步
2. 正则是否过强?
├─ λ 很大 / Dropout 很高 → 降低正则
└─ 否 → 下一步
3. 特征有没有信息?
├─ 重要性全很低 → 加特征/交叉/换数据源(模型再强也白搭)
└─ 特征还行 → 换更强模型(LR→GBDT→DNN)【口述骨架】(5 分钟)
| 时间 | 任务 | 内容 |
|---|---|---|
| 0:00–0:30 | 定性 | “训练集上不去 = 高偏差 = 欠拟合,和过拟合解法相反” |
| 0:30–2:00 | 排查顺序 | 先看 loss 是否还在降 → 正则是否过强 → 特征是否有效 |
| 2:00–3:30 | 解法 | 加容量、加特征交叉、调训练、降正则 |
| 3:30–4:30 | 对比 | 欠拟合加容量;过拟合减容量——方向相反 |
| 4:30–5:00 | 收尾 | “先确认优化到位,再谈特征,最后换模型” |
【关键数字】
| 参数 | 经验值 | 说明 |
|---|---|---|
| 学习率 | 常见 1e-3(Adam)/ 0.01–0.1(GBDT) | 过低收敛慢像欠拟合 |
| Dropout | 欠拟合时降到 0–0.1 | 0.5+ 可能过强 |
| L2 λ | 从 1e-4 往下调 | 过强时数量级下调 |
| 树深度 | GBDT 欠拟合时加深(8→15) | 同时注意过拟合风险 |
| 训练 epoch | 先跑到验证曲线平台 | 不要过早停 |
【追问链】(三层)
L1|“欠拟合和过拟合的解法是不是完全相反?” → 大体相反。欠拟合:加容量、加特征、降正则、加训练。过拟合:减容量、加正则、加数据、Bagging。核心都是调偏差-方差平衡。
L2|“学习率太低会怎样?” → 收敛极慢,看起来像欠拟合;太高会震荡甚至发散。看 loss 曲线:平缓下降=可能偏低;剧烈震荡=偏高。
L3|“换了更复杂的模型,训练分上去了,测试分反而更低,怎么解释?” → 容量已经过剩,从欠拟合穿过“刚好”进入过拟合。需要往回收:加正则、早停、或回到容量适中的模型。交叉验证找最佳容量点。
【评分标准】
| 档位 | 答案特征 |
|---|---|
| 60 分 | 知道换强模型、加特征、多训练几轮 |
| 80 分 | 有排查顺序(优化→正则→特征→容量);知道正则过强会欠拟合 |
| 95 分 | 讲清偏差机制;特征无信息时堆模型无用;能对比过拟合解法;会看 loss 曲线判断“优化未完成” |
【关联题】
- 同一知识簇: AI-02(过拟合)、AI-06(特征选择)、AI-15(特征交叉)
- 工程衔接: AI-07(模型选型容量阶梯)
【自测】
- 训练 loss 还在缓慢下降,训练准确率 70%,你先做什么? 参考答案: 还在优化中,加 epoch / 调学习率,而不是急着换模型。
- 为什么特征无信息时换大模型没用? 参考答案: 输入里没有可学信号,大模型只会拟合噪声,偏差降不下来。
- 正则过强的典型表现? 参考答案: 训练与验证都差,且训练差距不大——有效容量被压太狠。
AI-04. 业务刚起步只有几千条标注数据,模型怎么训(小样本)
【考察内容】小样本是业务落地高频场景题
【题目】新业务冷启动,只有 5000 条标注数据,直接训练深度模型肯定过拟合。有什么办法训练出可用的模型(预训练微调、数据增强、迁移、伪标签半监督)?各自的适用条件和风险是什么?
【参考答案】
预训练+微调:用预训练模型(BERT/图像预训练)微调——小数据下远优于从零训练;
数据增强:文本(同义词替换/回译/EDA)、图像(旋转/翻转/裁剪/颜色扰动)、表格(SMOTE);
迁移学习/少样本学习:相似任务预训练后迁移;few-shot(Prompt 学习/原型网络);
半监督/伪标签:用模型打未标注数据的伪标签(置信度阈值筛选)迭代训练;
简化模型:小数据用小模型/线性模型(LR/GBDT),深度模型容易过拟合;加正则;
交叉验证:K 折充分评估(小数据不能单次划分,方差大);
集成/简单基线:先跑强基线(如 TF-IDF+LR)保底,再逐步复杂;
外部知识:预训练 embedding、外部语料。
关键公式/原则: 经验风险最小化在小样本下方差大;VC 维/模型容量应与样本量匹配。迁移:预训练特征提取可用。
排查与方案步骤: ① 用简单模型+强特征打基线 ② 交叉验证防自欺 ③ 数据增强/预训练/主动学习 ④ 半监督/弱监督 ⑤ 上线后持续收集反馈做迭代。线上-离线:小样本离线指标方差大,AB 实验样本量要够。
【原理溯源】
- 为什么预训练+微调在小数据下碾压从零训练? 预训练已经在海量通用数据上学到了语言/视觉的底层结构(语法、边缘、语义相似)。小数据微调只是“在已会的表征上做任务对齐”,要学的新自由度很少。从零训练则要在 5000 条样本上同时学底层特征和任务映射,容量严重过剩 → 过拟合。
- 数据增强的因果链是什么? 增强注入了“标签不变的扰动不变性”——旋转后的猫还是猫。模型学到的是“对这类扰动鲁棒的特征”,而不是“这张图的像素排列”。等效扩大了训练分布的支撑集。
- 伪标签为什么可能越训越差(确认偏差)? 模型给自己打的错标签会被当成真标签学进去,错误被放大。必须用置信度阈值(只取高置信)、迭代中混入真标签、定期人工抽检。
- 为什么小数据必须 K 折? 单次 train/test 划分的方差很大——换一个随机种子,AUC 通常波动 1–2 个百分点(实测 5000 条、测试集 1000:σ(AUC)≈1.3–1.5pp,40 个种子极差 5–6pp);少数类的 F1 才会波动 5–10 个点(实测 σ≈4.9pp)。两者别混说。K 折平均能给出更稳定的泛化估计,避免“碰巧运气好”。
【选型判断树】
只有几千条标注:
1. 有无预训练模型可用?
├─ 有(文本/图像)→ 预训练 + 微调(首选)
└─ 表格/专有模态 → GBDT 或小模型 + 强特征
2. 能否做增强?
├─ 文本/图像 → EDA / 几何扰动
└─ 表格 → SMOTE / 业务规则生成
3. 未标注数据多吗?
├─ 多 → 伪标签半监督(高置信阈值)
└─ 少 → 死磕标注质量与增强
4. 评估
└─ 一律 5/10 折交叉验证,不单次划分【口述骨架】(5 分钟)
| 时间 | 任务 | 内容 |
|---|---|---|
| 0:00–0:30 | 定性 | “小数据核心矛盾是容量过剩,路线是借外部知识+保底基线” |
| 0:30–2:00 | 首选 | 预训练微调;先跑 TF-IDF+LR / GBDT 基线 |
| 2:00–3:30 | 扩数据 | 增强、伪标签半监督、迁移 |
| 3:30–4:30 | 评估与风险 | K 折;伪标签确认偏差;小模型防过拟合 |
| 4:30–5:00 | 收尾 | “先基线保底,再预训练微调,伪标签要高置信” |
【关键数字】
| 参数 | 经验值 | 说明 |
|---|---|---|
| 标注量 | <1k 谨慎上深度;1k–1w 微调可行 | 任务难度影响大 |
| K 折 | 5 或 10 | 小数据必做 |
| 伪标签置信度阈值 | 0.9+ | 宁缺毋滥 |
| 微调学习率 | 2e-5 ~ 5e-5(BERT 系) | 太大灾难性遗忘 |
| 增强倍数 | 2–5 倍 | 过多引入噪声 |
【追问链】(三层)
L1|“为什么小数据不该直接上大模型从零训练?” → 容量远超数据信息量,必然记住噪声。预训练提供先验,微调自由度小,泛化好。
L2|“伪标签有什么风险?” → 错误标签放大(确认偏差)。对策:高置信阈值、混真标签、定期人工抽检、用强教师模型打标。
L3|“只有 500 条,你选什么?” → 优先:① 业务规则/强特征+LR 基线;② LLM few-shot 分类;③ 花预算补标到 2k+ 再微调。不硬上从零训练。
【评分标准】
| 档位 | 答案特征 |
|---|---|
| 60 分 | 知道数据增强、迁移学习 |
| 80 分 | 预训练微调为首选;提到简化模型与 K 折评估 |
| 95 分 | 讲清“借先验降自由度”机制;伪标签确认偏差与阈值;先基线后复杂的工程纪律;能按标注量给路线 |
【关联题】
- 同一知识簇: AI-02(过拟合)、AI-38(工业小样本质检)、AI-43(LoRA 微调)
- NLP/CV 衔接: AI-35(文本分类)、AI-38(迁移+异常检测)
【自测】
- 5000 条文本分类,第一步跑什么? 参考答案: TF-IDF+LR 或 BERT 微调基线,用 5 折评估,而不是复杂端到端。
- 伪标签的核心风险与对策? 参考答案: 确认偏差;用高置信阈值+人工抽检+混真标签。
- 为什么小数据要 K 折? 参考答案: 单次划分方差大,指标不稳;K 折平均更可靠。
AI-05. 离线 AUC 0.85,上线后效果崩了(线上效果差排查)
【考察内容】线上效果差是算法岗最高频场景题
【题目】模型离线评测 AUC 0.85,看着很好,上线 A/B 后线上效果反而差。可能的原因有哪些(样本分布漂移、训练服务不一致、数据泄漏导致离线虚高、评估口径问题)?怎么一步步定位?
【参考答案】按“数据-特征-模型-环境”排查:
数据分布不一致(最常考):
- 训练/线上特征分布漂移(用户群体、时间分布变化)——对比离线与在线特征分布(PSI 指标);
- 样本选择偏差(离线用历史数据,线上是新流量);
训练-服务不一致(Training-Serving Skew):
- 特征口径不一致(离线用当日标签,线上特征缺失用默认值);
- 特征实时性(离线用全量历史,线上只取到当前);
- 代码不一致(离线特征工程 Python 版 vs 在线 Java/C++ 版实现差异);
模型本身:离线评估有数据泄漏(标签泄漏/时间泄漏)导致离线虚高;
业务环境:线上有干预(运营强插、规则覆盖)、用户行为反馈循环(推荐导致曝光偏差);
定位方法:线上特征日志回放(把线上请求的特征用离线模型重算对比)、A/B 验证(同流量比新旧)、特征监控(缺失率/分布/均值漂移)、分时段/分人群评估定位差异群体;
解决:特征统一(特征平台:离线在线同一计算逻辑)、实时特征补齐、修正泄漏、定期重训。
关键公式/指标: 离线 AUC 衡量排序;线上常看 CTR/GMV/成功率。AUC 不变阈值业务指标仍可能崩。
排查步骤(线上效果差): ① 特征一致性(离线/在线计算是否同逻辑,skew)② 样本空间与负采样是否一致 ③ 服务超时/降级导致没打到模型 ④ 标签延迟与口径 ⑤ 用户群/流量结构变化 ⑥ 代码版本是否一致 ⑦ 随机流量对照组。先打分日志回放离线,再查在线路径。
线上-离线差异: 最常见是特征穿越与特征 skew、训练服务不一致、流量分布变化、系统降级兜底策略。
【原理溯源】
- 为什么离线好线上差是“系统性”而非玄学? 离线评估假设“训练分布 = 线上分布”且“特征计算一致”。任一假设破裂,模型就在解另一道题。三类根因:分布漂移(数据变了)、Skew(特征算法不一致)、泄漏(离线指标本身是假的)。
- 特征回放为什么能根治 Skew? 传统思路是“让在线模仿离线”,两边两套代码必然漂移。回放是“用线上当时的真实特征值训练”——训练和推理吃的是同一份数字,Skew 在物理上消失。
- 泄漏为什么会让离线虚高? 模型在离线“作弊”看到了线上不存在的信息(未来、目标衍生特征)。离线是在开卷考试,上线变成闭卷,分数当然暴跌。
- 曝光偏差如何制造线上恶化? 推荐模型只在已曝光物品上有标签。历史策略偏向热门,模型学到“推热门”,新策略若也只在这个分布上评估,会系统性低估探索内容——这是反馈循环,不是静态误差。
【选型判断树】
离线 AUC 0.85 / 线上差:
1. 特征回放对比
├─ 同一请求、离线重算特征 ≠ 线上特征 → Skew(走特征平台/回放)
└─ 特征一致 → 下一步
2. 检查泄漏
├─ 有未来/目标衍生特征 → 删掉重评,离线 AUC 会掉到真实水平
└─ 无泄漏 → 下一步
3. 分布漂移
├─ PSI>0.2 / 线上人群不同 → 重训/采样对齐/域适应
└─ 分布稳定 → 查业务干预与评估口径
4. 最终裁判
└─ 线上 A/B + 分人群/分时段切片【口述骨架】(5 分钟)
| 时间 | 任务 | 内容 |
|---|---|---|
| 0:00–0:30 | 定性 | “三大根因:漂移、Skew、泄漏——先做特征回放二分” |
| 0:30–2:00 | 定位 | 特征回放对比 → 泄漏审查 → PSI 分布 |
| 2:00–3:30 | 根治 | 特征平台统一口径、线上特征训练、按时间切分防泄漏 |
| 3:30–4:30 | 业务侧 | 运营干预、曝光偏差、分人群评估 |
| 4:30–5:00 | 收尾 | “离线是筛选器,线上是裁判;回放是 Skew 的根治法” |
【关键数字】
| 参数 | 经验值 | 说明 |
|---|---|---|
| PSI | >0.1 轻度漂移,>0.2 需处理 | 特征/分数分布 |
| 离线-线上 AUC 差 | >0.05 值得深查 | 视任务而定 |
| 回放样本覆盖 | 至少覆盖主流量场景 | 含边缘 case |
| A/B 流量 | 5%–10% 对照 | 见 AI-22 |
| 重训周期 | 天/周 + 漂移触发 | 见 AI-24 |
【追问链】(三层)
L1|“PSI 是什么?” → 群体稳定性指标,分箱后比较两分布各箱占比:Σ(占比差)×ln(占比比)。>0.2 通常需要干预。
L2|“如何最快定位是 Skew 还是漂移?” → 抽一批线上请求,把线上日志里记录的特征值喂给离线模型重算分数。特征固定后若两边分数一致,说明模型与推理实现等价,线上/离线差异更可能来自两侧算出的特征值本身不同 → 判为 Skew;但这一步只排掉了模型/推理实现,排不掉分布漂移与人群差异,仍要按 PSI 与线上人群对比继续查(见下面判断树的漂移分支);若特征固定后分数仍不一致 → 才查模型版本/推理实现。更快的第一刀是直接比特征值本身(见判断树:同一请求、离线重算特征 ≠ 线上特征 → Skew)。
L3|“怎么防泄漏?” → 特征只用 t 时刻前信息;标签用 t 之后;预处理 fit 只在训练集;按时间切分验证集;同一用户样本不跨集合。
【评分标准】
| 档位 | 答案特征 |
|---|---|
| 60 分 | 知道数据分布变了、特征不一致 |
| 80 分 | 分清漂移/Skew/泄漏三类;会用特征回放定位 |
| 95 分 | 讲清回放根治 Skew 的因果;PSI 阈值;曝光偏差反馈循环;特征平台统一口径 |
【关联题】
- 同一知识簇: AI-18(特征 Skew)、AI-11(数据泄漏)、AI-24(模型监控)
- 评估衔接: AI-22(A/B)、AI-25(离线评估)
【自测】
- 什么是 Training-Serving Skew? 参考答案: 训练与在线推理的特征计算逻辑/数据不一致,模型学到的是离线分布。
- 特征回放为什么能根治 Skew? 参考答案: 直接用线上当时特征训练,两边数字同源,不一致从物理上消失。
- 离线 AUC 虚高最常见的原因? 参考答案: 数据泄漏(时间/目标/预处理),其次是评估分布≠线上分布。
AI-06. 几百个特征堆上去,模型又慢又飘(特征选择)
【考察内容】特征工程基础
【题目】工程师把能拿到的几百个特征全堆给模型,结果训练慢、效果不稳、可解释性差。怎么系统性地筛选特征(过滤式/包裹式/嵌入式三类方法)?特征重要性、覆盖率、稳定性分别怎么看?
【参考答案】
过滤式(Filter):不依赖模型——方差(低方差无用)、相关系数(与标签相关度,Pearson/互信息)、卡方检验;快但忽略特征组合;
包裹式(Wrapper):用模型效果评估特征子集(RFE 递归消除、前向/后向选择)——准但计算贵;
嵌入式(Embedded):训练时自动选择——L1 正则(系数稀疏化)、树模型特征重要性(GBDT 的 gain/frequency)、线性模型系数;
业务层面:覆盖率(缺失太多不靠谱)、稳定性(分布漂移)、与目标的相关性逻辑(可解释);
实践流程:EDA(缺失/分布/相关性)→ 过滤式粗筛 → 模型重要性精筛 → 交叉验证验证;
注意:特征重要性与相关性不等于因果(业务判断兜底);删除特征前做 A/B 验证。
关键公式: 互信息/方差阈值;树模型 feature importance;L1 稀疏。PCA:最大化投影方差。
排查步骤: 先去常量/高缺失/高共线(|corr|>0.95)→ 过滤式选择 → 嵌入式(L1/树)→ 包裹式慎用(贵)。线上-离线:离线保留的高频计算特征可能超线上时延预算,要评估特征计算 RT。
【原理溯源】
- 为什么特征多了会“又慢又飘”? 慢:维度线性增加训练与推理计算。飘:噪声特征与标签的伪相关被模型记住,训练集指标虚高、线上不复现(方差上升);共线性还会让线性模型系数不稳。
- L1 为什么能做特征选择? L1 的菱形约束在坐标轴上不可导,优化会把不重要方向的系数“挤”到 0,得到稀疏解。L2 只会均匀缩小系数,不会精确置零。
- 树模型 gain 重要性有什么坑? 高基数特征(如 ID)天然有更多切分机会,gain 被高估——这条只在精确切分/无限分箱下成立(实测同为纯噪声特征:4 值时 gain 占比 0.4%、4000 值时 45.9%);直方图分箱(max_bin≈255)下被明显削弱(实测 12.5%,与连续噪声持平);共线特征会分摊重要性。所以不能只看 gain,要结合置换重要性(permutation)与业务合理性。
- 为什么“重要≠因果”? “冰淇淋销量↑ 与溺水↑”相关,因为都是夏天的混杂变量。删除“看起来不重要”的特征前,最好做离线消融或小流量 A/B——防止删掉的是业务关键但样本稀疏的信号。
【选型判断树】
几百个特征:
1. 快速粗筛(Filter)
├─ 方差≈0 / 缺失>80% / 与标签相关≈0 → 直接删
└─ 通过 → 下一步
2. 模型精筛(Embedded)
├─ 树模型 → 看 gain + 置换重要性,保留 Top N
└─ 线性 → L1 稀疏化
3. 业务校验
├─ 覆盖率、稳定性(PSI)、可解释性
└─ 高相关特征二选一(防共线)
4. 验证
└─ 消融对比 + 必要时 A/B【口述骨架】(5 分钟)
| 时间 | 任务 | 内容 |
|---|---|---|
| 0:00–0:30 | 定性 | “特征多≠效果好,噪声特征抬方差、拖慢推理” |
| 0:30–2:00 | 三类方法 | Filter 快、Wrapper 准、Embedded 折中 |
| 2:00–3:30 | 工程维度 | 覆盖率、稳定性、可解释、共线处理 |
| 3:30–4:30 | 流程 | EDA → 粗筛 → 精筛 → 交叉验证/A/B |
| 4:30–5:00 | 收尾 | “重要≠因果,删特征要有消融证据” |
【关键数字】
| 参数 | 经验值 | 说明 |
|---|---|---|
| 低方差阈值 | 方差<0.01 或几乎常数 | 业务先验优先 |
| 缺失率红线 | >70%–80% 考虑删除 | 看是否有缺失信号 |
| 相关系数 | |r|<0.05 弱相关 | 线性相关;非线性用互信息 |
| 保留特征数 | 树模型常用 Top 50–200 | 视特征维度 |
| 相关共线 | |r|>0.8 二选一 | 线性模型尤其 |
【追问链】(三层)
L1|“L1 为什么能做特征选择?” → L1 在零点不可导,优化时把不重要的系数压到 0,得到稀疏解,相当于自动选特征。
L2|“高相关特征怎么办?” → 保留一个或做融合。共线性使线性模型系数方差大、解释不稳;树模型受影响小但会分摊重要性。
L3|“树模型的 gain 很高的 ID 类特征,你信吗?” → 要警惕。高基数特征切分点多、gain 虚高,且线上新 ID 无法泛化。应做频次/目标编码或 embedding,并用置换重要性交叉验证。
【评分标准】
| 档位 | 答案特征 |
|---|---|
| 60 分 | 知道过滤/包裹/嵌入式三类名称 |
| 80 分 | 能举例机制(L1 稀疏、树 gain);会提覆盖率与稳定性 |
| 95 分 | 讲清噪声抬方差、gain 的高基数偏差、重要≠因果、删特征前消融/A/B |
【关联题】
- 同一知识簇: AI-13(高基数)、AI-15(特征交叉)、AI-08(特征缩放)
- 模型衔接: AI-07(选型)、AI-12(集成)
【自测】
- 过滤式和嵌入式的核心区别? 参考答案: 过滤不依赖模型、快但忽略特征组合;嵌入在训练中自动选择,更贴模型。
- 为什么删特征前建议消融? 参考答案: 防止删掉业务关键但统计不显著的信号;用指标/A/B 证明无损。
- 树模型重要性怎么防高基数偏差? 参考答案: 结合置换重要性、限制切分、或先做编码/聚合。
AI-07. 流失预测任务,LR/GBDT/深度学习选哪个(模型选型)
【考察内容】模型选型是算法岗必考题
【题目】业务方给了流失预测任务:表格特征、50 万样本、要可解释(运营要按特征解释原因)、要能上线推理。LR、GBDT、深度学习怎么选?各在什么条件下更好?推荐路线是什么?
【参考答案】
按“数据量×特征类型×解释性×资源”选:
- LR/线性模型:数据量小、特征线性关系强、强解释性要求(风控/合规)、在线推理快——基线首选;
- 树模型(GBDT/XGBoost/LightGBM):表格数据主流——自动处理非线性与特征交互、对缺失值/量纲不敏感、特征重要性可解释;中小数据量效果好,表格数据首选;
- 深度学习:海量数据(百万+)、非结构化数据(文本/图像/序列)、需要 embedding 表达——成本高,数据少时不如树模型;
- 大模型:NLP/多模态生成类任务;
实践路径:先强基线(LR 或简单规则)→ 表格用 LightGBM/XGBoost(调参收益大)→ 数据充分且结构复杂再上深度模型(Wide&Deep/DCN);
对比要点:训练成本、推理延迟、可解释性、对数据量的需求、对特征工程的依赖(深度模型自动学交互,树模型要人工构造部分交互);
验证:同数据同指标对比(AUC/F1),选性价比最高的。
关键公式: 逻辑回归:p=σ(w·x+b),可解释系数。树模型非线性+特征交叉;深度模型适合高维稀疏+大规模样本。
选型排查: 样本量、特征类型、可解释性需求(金融监管)、时延预算、维护成本。线上-离线:复杂模型离线涨点但线上工程成本高时,用蒸馏/特征裁剪。
【原理溯源】
- 为什么表格数据树模型是默认 SOTA? 表格特征异构(数值+类别)、存在大量阈值型交互(“年龄>30 且 月消费>500”)。树的分裂天然匹配这种分段规则,且对量纲、缺失、单调变换不敏感。DNN 需要海量数据才能学出同等交互,小样本下反而不如树。
- LR 为何在“强解释+稀疏特征”场景仍不可替代? 系数直接对应“特征每变化一单位,log-odds 变化多少”,可对运营/监管讲清楚。推荐场景海量离散 ID 特征经哈希/编码后,线性模型训练推理都极快,仍是重要基线。
- 深度模型什么时候赢? ① 非结构化输入(文本/图像/序列)——需要表征学习;② 海量数据(百万+)——容量吃得下;③ 需要端到端自动高阶交叉(DCN/Wide&Deep)。否则增加的是成本和过拟合风险,不是效果。
- 为什么要“先基线后复杂”? 复杂模型的收益必须相对基线证明。没有 LR/GBDT 基线,你无法判断深度模型的 +0.02 AUC 是模型强还是数据泄露/评估问题。基线也是故障时的降级方案。
【选型判断树】
流失预测(表格/50万样本/要解释):
1. 是否必须强可解释?
├─ 是(风控/合规/运营驱动)→ LR 或 GBDT+SHAP;LR 作主模型更稳
└─ 否 → 下一步
2. 特征形态
├─ 纯表格、中小样本 → LightGBM/XGBoost(首选)
└─ 含文本/序列/图像 → 编码器 + 树,或端到端 DNN
3. 数据量
├─ <10万 → 树/线性
└─ >百万 且交互复杂 → Wide&Deep / DCN
4. 工程约束
└─ 延迟紧 → 小树/线性;可接受 50ms+ → 复杂树/蒸馏后的小 GBDT(表格任务上蒸出小 DNN 常不比 LightGBM 强)【口述骨架】(5 分钟)
| 时间 | 任务 | 内容 |
|---|---|---|
| 0:00–0:30 | 定性 | “表格+50万+要解释,我会推 LightGBM,LR 做可解释基线” |
| 0:30–2:00 | 三维选型 | 数据量 × 特征类型 × 解释性/资源 |
| 2:00–3:30 | 演进路径 | LR 基线 → GBDT → 数据足够再 DNN |
| 3:30–4:30 | 对比维度 | 训练成本、延迟、解释、数据需求 |
| 4:30–5:00 | 收尾 | “同数据同指标对比,选性价比最高的” |
【关键数字】
| 参数 | 经验值 | 说明 |
|---|---|---|
| 表格数据样本 | <10万树/线性优先;>百万再考虑 DNN | 不绝对 |
| GBDT 树数 | 100–1000,深度 6–12 | 调参收益大 |
| 精排延迟预算 | 10–50ms | 看业务 |
| LR 推理 | <1ms | 超高 QPS 友好 |
| 解释方案 | LR 系数 / GBDT+SHAP | 运营要“原因” |
【追问链】(三层)
L1|“LR 和 GBDT 什么时候 LR 更好?” → 特征稀疏/海量离散特征、强解释与快速迭代、需要线性可解释系数时。推荐早期和风控常用 LR 系。
L2|“表格数据直接上深度模型会怎样?” → 数据不够时不如树模型:更慢、更难调、更易过拟合,收益不明显。深度模型的价值在非结构化和海量数据。
L3|“运营要解释原因,你上 LightGBM 怎么给?” → 用 SHAP/LIME 给单样本归因,输出 top 特征贡献;同时看全局特征重要性。注意 SHAP 是相关解释不是因果。
【评分标准】
| 档位 | 答案特征 |
|---|---|
| 60 分 | 知道 LR 可解释、树模型强、深度要大数据 |
| 80 分 | 按数据量/特征类型/解释性三维选;知道表格首选 GBDT |
| 95 分 | 讲清树模型匹配表格交互的机制;先基线后复杂的纪律;SHAP 解释边界;延迟约束下的降级选型 |
【关联题】
- 同一知识簇: AI-12(RF vs GBDT)、AI-06(特征选择)、AI-32(CTR 模型演进)
- 工程衔接: AI-28(训练服务差异)、AI-23(灰度)
【自测】
- 表格 50 万样本默认首选? 参考答案: LightGBM/XGBoost,LR 做基线。
- 为什么小样本不首选 DNN? 参考答案: 容量过剩易过拟合,且自动交叉在小数据上学不稳,不如树。
- 强可解释场景怎么选? 参考答案: LR 主模型,或 GBDT+SHAP;风控常要系数级解释用 LR。
AI-08. 特征量纲差 1000 倍,KNN/SVM 距离全被带偏(特征缩放)
【考察内容】特征缩放是 ML 高频基础题
【题目】特征里“年龄(0-100)”和“收入(0-10 万)”量纲差太多,KNN/聚类算距离时收入完全主导。需要特征缩放。归一化和标准化有什么区别?KNN/SVM/神经网络、树模型分别需要哪种处理?为什么?
【参考答案】
标准化(Z-score):
(x-μ)/σ——数据映射为均值 0、方差 1,不依赖数据上下界;相比 Min-Max,Z-score 不会把其余样本压缩到极小范围,但同样受离群点影响(μ、σ 本身不稳健);需严格抗离群点时用 RobustScaler(中位数/IQR);归一化(Min-Max):
(x-min)/(max-min)——映射到 [0,1],受离群点影响大(max/min 被离群点拉偏),适合有明确上下界的特征(年龄、价格)或需要固定范围(图像像素 0~255→0~1);选择依据:
- 距离类模型(KNN、SVM、K-Means、PCA):必须缩放(否则量纲大的特征主导距离);
- 梯度类模型(LR、神经网络):必须缩放(加速收敛,避免梯度震荡);
- 树模型(决策树/GBDT):不需要缩放(按特征值切分,单调变换不影响);
- 数据分布未知:用 Z-score 标准化(不依赖上下界);有离群点:优先 RobustScaler(中位数/IQR),Z-score 次之,Min-Max 最差;
工程注意:用训练集统计量(μ/σ/min/max)变换验证与测试集(不能用全量统计,否则泄漏);线上与离线同一套缩放参数。
关键公式: 标准化 z=(x-μ)/σ;归一化 x'=(x-min)/(max-min)。距离:欧氏 d=√Σ(xi-yi)² 对量纲敏感。
排查步骤: 树模型通常不需缩放;LR/KNN/SVM/NN 需要。缩放参数只在训练集估计再应用到验证/线上(防泄漏)。线上-离线:在线必须用与训练相同的 μ/σ 版本,版本漂移会造成 skew。
【原理溯源】
- 为什么量纲会毁掉距离类模型? 欧氏距离里,收入差 1 万元与年龄差 1 岁是 1e4 倍的单位差(平方后进距离就是 1e8 倍);若按两组取值的极差比(收入约 1e5 / 年龄约 1e2)算,就是题干说的约 1000 倍——两种口径都说明距离会被大尺度特征垄断,KNN 的邻居、K-Means 的簇、SVM 的间隔都失去意义。
- 为什么梯度类模型也必须缩放? 各特征尺度差大时,等高面被拉成细长椭圆,梯度方向来回震荡,收敛极慢。缩放后等高面接近圆形,一步到位。
- 树模型为什么免疫? 分裂只看特征值排序(“是否 ≤ t”),任意单调变换(含缩放)不改变样本顺序,切分点与增益不变。
- 为什么缩放统计量只能来自训练集? 用全量算 μ/σ,等于让验证集信息(它的分布)渗入训练预处理——这是预处理泄漏,离线指标虚高。
【选型判断树】
要不要缩放?
1. 模型类型
├─ 距离/聚类/PCA/SVM → 必须缩放
├─ LR/神经网络 → 必须缩放(加速收敛)
└─ 树/GBDT → 不需要
2. 用哪种缩放?
├─ 有明确上下界(年龄0-100、像素0-255)→ Min-Max
├─ 有离群点 → RobustScaler
└─ 分布未知(默认)→ Z-score
3. 工程
└─ fit 只在训练集;线上复用同一套 μ/σ【口述骨架】(5 分钟)
| 时间 | 任务 | 内容 |
|---|---|---|
| 0:00–0:30 | 定性 | “距离和梯度模型必须缩放,树模型不需要” |
| 0:30–2:00 | 两种方法 | Z-score vs Min-Max,公式与离群点敏感性 |
| 2:00–3:30 | 按模型选 | 距离/梯度必须;树免疫的原因 |
| 3:30–4:30 | 工程红线 | 训练集统计量防泄漏;离线在线一致 |
| 4:30–5:00 | 收尾 | “默认 Z-score;有离群上 Robust;树模型别浪费这步” |
【关键数字】
| 参数 | 经验值 | 说明 |
|---|---|---|
| Z-score | (x-μ)/σ | 默认首选 |
| Min-Max | [0,1] | 有界特征/图像 |
| RobustScaler | 中位数/IQR | 离群点多 |
| 离群点 | 3σ 外或 IQR 外 | 可先截断再缩放 |
| 神经网络输入 | 常标准化到 0 均值单位方差 | 也可 -1~1 |
【追问链】(三层)
L1|“为什么要归一化?” → 消除量纲影响(距离类),加速梯度收敛(梯度类)。对树模型无意义。
L2|“有离群点时 Z-score 也不稳,怎么办?” → 用 RobustScaler(中位数/IQR),或先对离群点截断/winsorize,再标准化。
L3|“线上请求来了一个超出训练 min-max 的值,怎么办?” → 按训练集的 min/max 做 clip,不要用线上新值重算范围——否则训练服务不一致(Skew)。
【评分标准】
| 档位 | 答案特征 |
|---|---|
| 60 分 | 知道归一化/标准化大致区别 |
| 80 分 | 按模型类型选择;知道树模型不需要;训练集统计量 |
| 95 分 | 讲清距离被大尺度主导、梯度椭圆震荡;Robust 抗离群;线上 clip 与防泄漏 |
【关联题】
- 同一知识簇: AI-09(缺失值)、AI-06(特征选择)
- 泄漏关联: AI-11(预处理泄漏)、AI-18(Skew)
【自测】
- 树模型为什么不需要缩放? 参考答案: 分裂看排序,单调变换不改变切分。
- 缩放统计量为什么不能用全量? 参考答案: 验证集信息进入预处理,造成泄漏、指标虚高。
- 有离群点选什么? 参考答案: RobustScaler 或先截断再标准化。
AI-09. 30% 的字段是空的,直接训练会怎样(缺失值处理)
【考察内容】缺失值处理是数据处理必考题
【题目】清洗数据时发现 30% 的样本有字段缺失(比如“收入”字段)。直接丢掉太浪费、填 0 又怕失真。怎么分析缺失模式?删除、填充(均值/中位数/模型预测)、缺失标记几种方案分别怎么用?树模型和线性模型处理上有何不同?
【参考答案】
先分析缺失模式(标准三分):MCAR(完全随机缺失,缺失与任何变量无关)、MAR(随机缺失,缺失可由其他特征解释,可用模型填充)、MNAR(非随机缺失,缺失与取值本身相关,需把缺失当信号)——如“收入缺失”可能代表无收入(MNAR),可把缺失做成单独取值;
处理方法:
- 删除:缺失比例极高(>80%)且无信息量的列/行——直接删;
- 填充:统计值:均值/中位数(数值,中位数抗离群)、众数(类别);业务值:业务默认值(0、-1、空字符串);模型填充:用其他特征预测缺失值(KNN/回归);
- 缺失标记:单独一列 is_missing(树模型能利用缺失模式);
- 算法原生处理:XGBoost/LightGBM 自动学习缺失值方向(默认不填充也可);
选型:树模型(填充简单值或留缺失即可);线性/距离/神经网络(需填充,均值/中位数起步);
注意:填充要在训练集上计算统计量(防泄漏);验证集同样处理;类别特征缺失用“Unknown”类。
关键公式/原则: 缺失指示变量;均值/中位数填充;树模型可原生处理缺失(XGBoost 学缺失方向)。
排查步骤: 统计缺失率与缺失机制(MCAR/MAR/MNAR)→ 训练集拟合填充器 → 线上同一套填充 → 监控缺失率突变(常是上游故障信号)。线上-离线:线上缺失模式变化会直接导致分数漂移。
【原理溯源】
- 为什么“填 0”经常有害? 0 可能是合法业务值(收入 0 与“未填”语义不同)。把缺失填成 0,等于把“未知”和“零收入”混成一类,模型学到错误边界。更糟的是均值填充会人为压低方差、扭曲特征与标签的关系。
- 缺失本身为什么可能是信号(MNAR)? “不愿填收入”往往与真实收入相关。此时缺失不是噪声,而是有预测力的特征。树模型把缺失样本分裂到增益最大的方向,天然利用了这一点。
- 树模型为何能原生处理缺失? XGBoost/LightGBM 在每个分裂点为缺失样本学习“走左还是走右”(按增益),不需要你预填。线性模型需要有限数值,必须填充。
- 为什么填充统计量只能来自训练集? 与缩放同理:用全量均值填,验证集分布信息渗入训练,构成预处理泄漏。
【选型判断树】
字段缺失 30%:
1. 缺失模式
├─ 疑似 MNAR(缺失本身有业务含义)→ 加 is_missing 标记,或当单独类别
├─ MAR → 可用模型/KNN 填充
└─ MCAR → 简单统计填充即可
2. 模型类型
├─ 树模型 → 留缺失或填简单值 + 缺失标记
└─ 线性/DNN/距离 → 中位数/均值/众数填充
3. 比例
└─ 缺失>80% 且无信息 → 删列
4. 工程
└─ 统计量 fit 在训练集;线上同一套规则【口述骨架】(5 分钟)
| 时间 | 任务 | 内容 |
|---|---|---|
| 0:00–0:30 | 定性 | “先分清 MCAR/MAR/MNAR,缺失可能是信号” |
| 0:30–2:00 | 三种处理 | 删除、填充(统计/业务/模型)、缺失标记 |
| 2:00–3:30 | 按模型 | 树原生处理 vs 线性必须填充 |
| 3:30–4:30 | 工程红线 | 训练集统计量;类别用 Unknown |
| 4:30–5:00 | 收尾 | “别无脑填 0;树模型善用缺失分裂” |
【关键数字】
| 参数 | 经验值 | 说明 |
|---|---|---|
| 删除阈值 | 缺失>70%–80% 考虑删 | 看业务信息量 |
| 数值填充 | 中位数优先于均值 | 抗离群 |
| 类别填充 | Unknown / 众数 | Unknown 保信号 |
| 模型填充 | KNN/回归 | 仅 MAR 合理 |
| 缺失标记 | is_missing 列 | 树模型收益常见 |
【追问链】(三层)
L1|“为什么树模型可以不用填充?” → 分裂时把缺失样本自动分到增益最大方向(稀疏感知),缺失模式本身可被利用。
L2|“全部填均值有什么问题?” → 破坏分布、压低方差、忽略缺失信号(MNAR),还可能把“未知”与“平均”错误等同。
L3|“验证集用了全量中位数填充,指标涨了 0.01,可信吗?” → 不可信。这是预处理泄漏。必须在训练集上计算中位数,再变换验证/测试集,重跑评估。
【评分标准】
| 档位 | 答案特征 |
|---|---|
| 60 分 | 知道均值/中位数填充、删除 |
| 80 分 | MCAR/MAR/MNAR;缺失标记;树 vs 线性差异 |
| 95 分 | 讲清 MNAR 缺失即信号;树模型稀疏感知机制;训练集统计量防泄漏 |
【关联题】
- 同一知识簇: AI-08(缩放)、AI-11(预处理泄漏)
- 树模型衔接: AI-12(GBDT 特性)、AI-07(选型)
【自测】
- MNAR 是什么?为什么重要? 参考答案: 非随机缺失,缺失与取值相关,应把缺失当信号而非噪声。
- 树模型原生缺失处理原理? 参考答案: 每个分裂为缺失样本学习走哪边,按增益最优分配。
- 填充为什么也要防泄漏? 参考答案: 全量统计会让验证集信息进入训练,指标虚高。
AI-10. 预测明天的销量,验证集怎么划才不作弊(时序验证)
【考察内容】时序验证是时序场景必考题
【题目】要做销量预测(时间序列数据),同事直接用随机 K 折交叉验证评估,指标很好看。为什么随机打乱划分在时序任务上是“作弊”(时间泄漏)?正确的划分方式是什么(按时间切分/前向链)?特征上还有什么陷阱?
【参考答案】
不能用随机 K 折:随机划分会打乱时间顺序——训练集混入未来数据(时间泄漏),验证结果虚高,线上必然翻车;
正确做法(时序验证):
- 按时间切分:前 80% 训练、后 20% 验证(严格时间顺序);
- 前向链(Walk-forward):滚动窗口——训练 [t0,t1] 验证 (t1,t2],滑窗多次,平均评估(更充分利用数据且保持时序);
- 留出最近周期:验证集取最后 N 天/月(贴近线上场景:预测未来);
特征工程注意:
- 特征只能用当前时刻之前的信息(滞后特征 shift);
- 避免“未来特征”(如用当天的总量预测当天);
- 目标变量(标签)也要与特征对齐(预测 t+1,特征截至 t);
特殊点:周期性(周/月/节假日)要在划分中考虑(如验证集含完整周期);滚动预测评估(多步预测误差累积)。
关键原则: 时序验证必须时间序切分:train<t0,valid 在 t0 后窗口;禁止随机 K 折打乱时间。可滚动原点(rolling origin)。
排查步骤: 画数据时间轴 → 检查特征是否用到未来统计 → 用与线上一致的预测时点构造样本。线上-离线:离线随机切分往往大幅虚高,上线用未来数据预测当然崩。
【原理溯源】
- 为什么随机 K 折在时序上是作弊? 任务是“用过去预测未来”。随机打乱后,训练集含有验证时刻之后的数据,模型直接学到了未来。离线指标好看,上线没有未来可用,必然崩。
- 前向链为何优于单次按时间切分? 单次切分只评估一个时间点。前向链模拟多次“训练到 t、预测 t+1”,既更充分利用数据,又给出多窗口的平均表现与波动,更接近真实部署。
- 滞后特征的因果约束是什么? 预测 t+1 的销量,特征只能来自 ≤t 的信息。用 t+1 当天的天气/促销去预测 t+1,是典型目标泄漏——线上预测时这些值还不存在。
- 为什么要“留出最近完整周期”? 销量有周/月季节性。验证集若不覆盖完整周期,评估会系统性偏乐观或偏悲观。
【选型判断树】
时序验证怎么划?
1. 数据长度
├─ 足够长 → 前向链(多窗口平均,首选)
└─ 较短 → 严格按时间单次切分(80/20)
2. 预测步长
├─ 单步 t+1 → 标签对齐 t+1,特征截至 t
└─ 多步 → 滚动预测评估,看误差累积
3. 周期性
└─ 验证集尽量含完整业务周期(周/月/大促)
4. 红线
└─ 禁止随机打乱;禁止未来特征【口述骨架】(5 分钟)
| 时间 | 任务 | 内容 |
|---|---|---|
| 0:00–0:30 | 定性 | “时序任务禁止随机 K 折,那是时间泄漏” |
| 0:30–2:00 | 正确划分 | 按时间切分、前向链、留最近周期 |
| 2:00–3:30 | 特征陷阱 | 滞后特征、未来特征、标签对齐 |
| 3:30–4:30 | 周期与多步 | 完整周期;滚动预测误差累积 |
| 4:30–5:00 | 收尾 | “模拟线上:只用过去预测未来” |
【关键数字】
| 参数 | 经验值 | 说明 |
|---|---|---|
| 时间切分 | 前 80% 训练 / 后 20% 验证 | 也可留最近 1–4 周 |
| 前向链窗口 | 3–5 个窗口 | 看数据长度 |
| 滞后特征 | lag1 / lag7 / lag28 | 周期相关 |
| 多步预测 | 1/7/28 天 | 评估累积误差 |
| 随机种子 | 时序评估无意义 | 不要用随机划分“多次平均”冒充 |
【追问链】(三层)
L1|“为什么训练集不能包含验证期数据?” → 模型会学到未来信息,线上不可能拿到,评估失真。
L2|“Walk-forward 具体怎么做?” → 例如:训练 [1月–6月] 验 7 月;训练 [1月–7月] 验 8 月……多次滚动,指标取平均与标准差。
L3|“特征用了‘当天总流量’预测当天销量,有什么问题?” → 目标泄漏:预测时刻当天总流量尚未知或与标签同源。只能用 t 之前的信息。
【评分标准】
| 档位 | 答案特征 |
|---|---|
| 60 分 | 知道不能随机打乱,要按时间切 |
| 80 分 | 会说前向链;知道滞后特征 |
| 95 分 | 讲清时间泄漏因果;标签对齐;完整周期;多步误差累积 |
【关联题】
- 同一知识簇: AI-11(数据泄漏)、AI-05(线上效果差)
- 评估衔接: AI-24(监控)、AI-22(A/B 同期对比)
【自测】
- 时序任务能用随机 K 折吗? 参考答案: 不能,会造成时间泄漏、指标虚高。
- 前向链是什么? 参考答案: 滚动窗口:训练历史、验证下一窗口,多次平均评估。
- 预测 t+1 时特征最多用到哪? 参考答案: t 及之前,不能用 t+1 及之后的信息。
AI-11. 离线指标高得离谱,一查是特征里混了未来信息(数据泄漏)
【考察内容】数据泄漏是算法面试高频陷阱题
【题目】模型离线 AUC 0.98 高得离谱,上线直接崩。排查发现是数据泄漏:特征里用了未来信息/目标信息。数据泄漏常见在哪几类(时间泄漏、目标泄漏、预处理泄漏、样本重叠)?怎么提前发现和避免?
【参考答案】
定义:训练时模型接触了“线上不会存在”的信息(未来信息/目标信息),导致离线评估虚高;
常见泄漏类型:
- 时间泄漏:用未来数据预测过去(时序任务混入未来特征/标签错位);
- 目标泄漏:特征里包含与标签同源的信息(用“是否退款”预测“是否退款”;用事后统计量当特征);
- 预处理泄漏:用全量数据(含验证集)做归一化/缺失填充/特征选择(统计量混入验证信息);
- 样本泄漏:训练集和验证集有重复样本/相似样本(同一用户的多条行为同时出现在两边);
- ID 泄漏:把用户 ID/时间戳等标识符当特征(模型记住 ID 而非规律);
排查方法:特征重要性异常高(某个特征 gain 离谱)、按时间/用户分组评估差异大、删除可疑特征后指标骤降;
预防:严格按时间/实体切分、特征只取过去信息、预处理流水线(fit 只在训练集)、特征审查(业务合理性检查)。
关键公式/信号: 泄漏时离线指标可接近 1.0。检查特征与标签的时间关系、统计特征是否含当期标签、目标编码是否泄漏。
排查步骤: ① 特征重要性异常高的字段逐一审时间 ② 去掉可疑特征看指标掉多少 ③ 用严格时序切分重跑 ④ 代码审查训练/在线同一套数据源。线上-离线:泄漏是“离线虚高、线上无用”的第一原因。
【原理溯源】
- 泄漏为什么让离线“高得离谱”? 模型在离线开卷考试——看到了标签的“答案线索”。AUC 0.95+ 在很多业务里已经可疑,0.98 往往不是模型强,而是特征里有标签的影子。
- 目标泄漏最常见的形态是什么? “事后统计量”当特征:用“近 7 日退款次数”预测“今日是否退款”,若统计窗口包含今日或标签时刻之后,就是泄漏。特征必须在预测时刻可计算。
- 预处理泄漏为何隐蔽? 归一化/填充/特征选择看起来“无害”,但 fit 在全量上,验证集的分布信息进入了训练管线。指标只涨一点点,却足以让你选错模型。
- 样本泄漏(用户重叠)为何危险? 同一用户的多条样本几乎相同,模型在验证集上是“认出熟人”而非“泛化新用户”,线上新用户表现远差于离线。
【选型判断树】
AUC 0.98 离谱:
1. 业务先验
├─ 任务本身不可能这么好 → 默认怀疑泄漏
└─ 有强信号特征 → 仍要审查
2. 审查特征
├─ 是否包含标签时刻及之后的信息?→ 时间/目标泄漏
├─ 是否事后统计、是否与标签同源?→ 目标泄漏
└─ 预处理是否 fit 全量?→ 预处理泄漏
3. 切分审查
├─ 同一用户是否跨集合?→ 样本泄漏
└─ 时序是否随机打乱?→ 时间泄漏
4. 验证
└─ 删可疑特征对比指标;按时间/用户分组评估【口述骨架】(5 分钟)
| 时间 | 任务 | 内容 |
|---|---|---|
| 0:00–0:30 | 定性 | “AUC 0.98 先当泄漏处理,开卷考试不算数” |
| 0:30–2:30 | 四类泄漏 | 时间/目标/预处理/样本(+ID) |
| 2:30–3:30 | 排查 | 重要性异常、删特征对比、分组评估 |
| 3:30–4:30 | 预防 | 时间切分、fit-on-train、实体隔离 |
| 4:30–5:00 | 收尾 | “特征必须在预测时刻可计算” |
【关键数字】
| 参数 | 经验值 | 说明 |
|---|---|---|
| 可疑 AUC | >0.95 警惕,>0.98 默认查泄漏 | 任务相关 |
| 特征时间边界 | 严格 ≤ 预测时刻 | 离线在线一致 |
| 预处理 fit | 仅训练集 | 归一化/填充/选择 |
| 用户切分 | 同一用户不跨集合 | 推荐/风控常见 |
| 消融 | 删特征后 AUC 骤降>0.05 | 高度可疑 |
【追问链】(三层)
L1|“归一化怎么泄漏?” → 用全量数据算 μ/σ,验证集信息进了训练。应只用训练集统计量。
L2|“怎么快速验证是否泄漏?” → 把可疑特征置零/删除,对比指标降幅;若从 0.98 掉到 0.80,基本坐实。
L3|“特征用了‘历史是否欺诈’预测今天欺诈,有问题吗?” → 若“历史”严格在今天之前,合法;若包含今天或标签窗口,就是目标泄漏。必须画清楚特征时间线。
【评分标准】
| 档位 | 答案特征 |
|---|---|
| 60 分 | 知道用了未来信息 |
| 80 分 | 能分类时间/目标/预处理/样本泄漏;会删特征对比 |
| 95 分 | 讲清“预测时刻可计算”原则;fit-on-train;用户实体切分;AUC 异常高的职业嗅觉 |
【关联题】
- 同一知识簇: AI-10(时序泄漏)、AI-05(离线好线上差)、AI-08/09(预处理泄漏)
- 评估衔接: AI-25(离线评估局限)
【自测】
- 什么叫目标泄漏? 参考答案: 特征包含与标签同源或事后才有的信息,如标签时刻后的统计量。
- 预处理泄漏怎么发生? 参考答案: 用全量数据 fit 归一化/填充/特征选择,验证信息渗入训练。
- 排查泄漏最快的实验? 参考答案: 删除/置零可疑特征,看指标是否骤降。
AI-12. 同是树模型集成,随机森林和 GBDT 差在哪(集成学习)
【考察内容】集成学习对比是 ML 必考题
【题目】团队做表格数据建模,A 用随机森林、B 用 XGBoost,效果有差异还互相不服。Bagging 和 Boosting 机制上差在哪(偏差/方差、并行/串行、噪声敏感)?各自适合什么场景?
【参考答案】
Bagging(随机森林):并行训练多个基模型(有放回采样+随机特征子集),投票/平均——降低方差(对噪声/过拟合更稳);训练可并行;
Boosting(GBDT/XGBoost/LightGBM):串行训练,每个模型拟合前序模型的残差/梯度——降低偏差(拟合能力强,精度通常更高);
关键差异:
- 偏差 vs 方差:RF 抗过拟合、更稳;GBDT 精度高但容易过拟合(需调参/正则);
- 对噪声:RF 鲁棒;GBDT 对异常值敏感(拟合残差被异常拉偏);
- 训练方式:RF 可并行;GBDT 串行(LightGBM 直方图加速);
- 调参:GBDT 参数敏感(树深/学习率/正则),RF 参数不敏感;
选型:精度优先+数据质量好→GBDT 系(XGBoost/LightGBM 是表格数据 SOTA);数据噪声大/怕过拟合/需要稳定→随机森林;实践中常两者都跑对比;
补充:Stacking(异质模型融合)可进一步提升。
关键公式: Bagging 降方差:Var(平均)≈ρσ²+(1-ρ)σ²/B。Boosting 降偏差:逐步拟合残差/梯度。
差异要点: RF 并行、抗过拟合、对异常稳健;GBDT 序列、通常更准但更易过拟合脏数据、需调学习率与树深。线上-离线:GBDT 推理更慢一些,但树深可控时 10ms 内常见。
【原理溯源】
- Bagging 为什么降方差? 多个模型在不同自助样本上训练,学到的噪声模式不同,投票/平均互相抵消。对“低偏差、高方差”的深树特别有效——单棵树过拟合,集成后稳。
- Boosting 为什么降偏差且怕噪声? 每棵新树专门拟合前面的残差。若某样本是噪声/离群点,残差会持续很大,后续树不断追着拟合它,误差被放大。这是“拟合能力强”的代价。
- 为什么 RF 对参数不敏感、GBDT 敏感? RF 靠平均降方差,树深一点浅一点影响有限。GBDT 是串行累加,学习率、树深、正则直接决定每一步步长与容量,调不好很快过拟合或欠拟合。
- 何时 RF 赢? 数据噪声大、标签脏、样本相对特征少、需要稳定基线与并行训练时。RF 还是很好的特征筛选器(重要性稳定)。
【选型判断树】
表格数据选 Bagging 还是 Boosting?
1. 数据质量
├─ 噪声大/标签脏/怕过拟合 → 随机森林
└─ 数据干净、追求精度 → GBDT(XGBoost/LightGBM)
2. 资源
├─ 需要并行快训 → RF
└─ 可接受串行+调参 → GBDT
3. 解释与稳定
├─ 要稳定重要性 → RF
└─ 要极致指标 → GBDT + 正则
4. 实践
└─ 两者都跑,同指标对比;可 Stacking 融合【口述骨架】(5 分钟)
| 时间 | 任务 | 内容 |
|---|---|---|
| 0:00–0:30 | 定性 | “Bagging 降方差、Boosting 降偏差,这是分水岭” |
| 0:30–2:00 | 机制 | RF 并行自助+投票;GBDT 串行拟合残差 |
| 2:00–3:30 | 差异 | 噪声敏感、参数敏感、并行 vs 串行 |
| 3:30–4:30 | 选型 | 噪声大→RF;数据好求精度→GBDT |
| 4:30–5:00 | 收尾 | “工业表格默认 GBDT,RF 做稳健基线与筛选” |
【关键数字】
| 参数 | 经验值 | 说明 |
|---|---|---|
| RF 树数 | 100–500 | 再多收益有限 |
| RF max_features | sqrt / 0.3–0.7 | 随机特征子集 |
| GBDT 学习率 | 0.01–0.1 | 小学习率+多树 |
| GBDT 深度 | 6–12 | 视样本量 |
| 噪声样本 | 异常值多先清洗 | GBDT 尤其需要 |
【追问链】(三层)
L1|“GBDT 为什么对异常值敏感?” → 残差由异常样本主导,损失梯度被极端值放大,后续树持续拟合噪声。
L2|“XGBoost 相比朴素 GBDT 改进了什么?” → 二阶泰勒展开、目标函数加正则、列采样、缺失值原生处理、近似直方图加速与并行。
L3|“两个模型指标接近,你上哪个?” → 看约束:要稳定可解释选 RF 或 GBDT+SHAP;要极致精度选正则调好的 GBDT;也可 Stacking 融合,但要评估维护成本。
【评分标准】
| 档位 | 答案特征 |
|---|---|
| 60 分 | 知道一个并行一个串行 |
| 80 分 | Bagging 降方差 / Boosting 降偏差;噪声与参数敏感差异 |
| 95 分 | 讲清残差拟合与异常放大机制;XGBoost 改进点;按数据质量选型 |
【关联题】
- 同一知识簇: AI-07(模型选型)、AI-02(方差)、AI-03(偏差)
- 延伸: AI-32(深度 CTR 模型)、AI-06(树模型重要性)
【自测】
- Bagging 和 Boosting 分别主要降什么? 参考答案: Bagging 降方差;Boosting 降偏差。
- 为什么 GBDT 怕噪声? 参考答案: 串行拟合残差,异常点梯度被放大。
- 表格数据默认工业选择? 参考答案: XGBoost/LightGBM;噪声大时考虑 RF。