4. 机器学习基础理论高频题
在金融机器学习岗位面试中,基础理论题往往不是考你背定义,而是考你能否把“模型为什么失效、如何诊断、如何取舍”讲成一条清晰的因果链。偏差方差、正则化、过拟合与评估指标这四组概念,几乎覆盖了建模全流程的核心判断。面试官真正想听的是:你遇到一个坏模型时,会先看什么、再怎么调、最后如何证明调对了。
一、核心原理:偏差方差不是两个名词,而是一组取舍
偏差衡量模型预测的期望与真实规律之间的系统性偏离,方差衡量模型对训练集扰动的敏感程度。高偏差通常表现为训练集和验证集都差,模型太简单或特征信息不足;高方差表现为训练集很好、验证集明显变差,模型把噪声也学进去了。金融数据信噪比低、非平稳性强,高方差往往比高偏差更危险,因为回测漂亮、实盘崩溃是常见事故。
面试时不要只背“偏差方差分解”,要能说出它与数据量、模型复杂度、特征维度的关系。样本量增加通常降低方差,对偏差帮助有限;模型复杂度提升降低偏差但抬高方差;特征噪声大时,正则化和特征筛选比换更复杂的模型更有效。
二、方法流程:从诊断到干预的四步法
- 诊断:固定随机种子,输出训练集、验证集、时间外样本的指标差距。金融场景必须用时间序列切分,不能随机打乱。
- 定位:若训练与验证都低,偏偏差;若训练高验证低,偏方差;若两者都高且波动大,可能是数据泄漏或标签质量问题。
- 干预:高偏差优先加特征、加模型容量、减少过强正则;高方差优先加数据、加正则、降维、早停、集成。
- 验证:用滚动回测或 walk-forward 验证,确认改进不是某一段行情的偶然。
# 时间序列切分与学习曲线诊断示例
from sklearn.model_selection import TimeSeriesSplit
from sklearn.metrics import roc_auc_score
tscv = TimeSeriesSplit(n_splits=5)
for train_idx, valid_idx in tscv.split(X):
model.fit(X.iloc[train_idx], y.iloc[train_idx])
train_auc = roc_auc_score(y.iloc[train_idx], model.predict_proba(X.iloc[train_idx])[:, 1])
valid_auc = roc_auc_score(y.iloc[valid_idx], model.predict_proba(X.iloc[valid_idx])[:, 1])
print(f"train_auc={train_auc:.4f}, valid_auc={valid_auc:.4f}, gap={train_auc-valid_auc:.4f}")
三、正则化与过拟合:不是“加个 L2”就结束
正则化的本质是给模型加约束,让参数不要为了拟合训练噪声而剧烈变化。L1 倾向稀疏,适合做特征选择;L2 倾向平滑,适合共线性强的金融因子;弹性网络结合两者。树模型的正则化体现在最大深度、最小叶子样本数、学习率、子采样比例和早停。面试官常追问“为什么正则化能降低方差”,你可以回答:它缩小了假设空间,牺牲一点偏差换取更稳定的泛化误差。
| 现象 | 常见原因 | 优先动作 | 金融场景注意点 |
|---|---|---|---|
| 训练好、验证差 | 高方差、过拟合 | 加正则、早停、降维、集成 | 检查是否用了未来信息 |
| 训练差、验证差 | 高偏差、欠拟合 | 加特征、加容量、减正则 | 确认标签定义是否合理 |
| 验证波动大 | 样本少、非平稳 | 滚动验证、分层采样、稳健损失 | 避免单段行情过拟合 |
| 指标高但实盘差 | 泄漏、成本未计 | 重做切分、加入交易成本 | 关注换手率与滑点 |
四、评估指标:选错指标等于答错题
金融机器学习中,准确率通常没有意义,因为违约、欺诈、大涨样本极少。二分类常用 AUC、KS、PR-AUC、召回率与精确率;排序场景看 IC、Rank IC、NDCG;交易策略还要看年化收益、夏普、最大回撤、换手率和胜率。面试时要主动说明指标与业务代价的对应关系:风控更怕漏放,关注召回;量化选股更怕噪声,关注 IC 稳定性和换手成本。
复盘时可以用一句话收束:偏差方差决定模型该往哪个方向调,正则化是控制复杂度的工具,过拟合是金融建模的默认敌人,评估指标则是把技术选择翻译成业务代价的最后一环。把这四者串成一条因果链,你的回答就从“背概念”变成了“能落地”。