机器学习 / 深度学习在量化中的应用
这一页覆盖量化研究面试里关于机器学习与深度学习的核心八股(Q41–Q55):从偏差-方差、正则化、时序交叉验证,到 LSTM/Transformer、AutoEncoder、GAN、GNN、强化学习,再到标签不平衡、信息泄漏、LLM 落地等实战问题。每道难题都配了 🔬 深度拓展(含完整推导、几何直觉与面试追问演练),既适合大一新生打基础,也适合求职者临阵磨枪。
金融数据信噪比极低(信号微弱、噪声巨大)。这一句话几乎是本页所有问题的"题眼":它解释了为什么我们偏好低方差模型、为什么正则化如此重要、为什么时序交叉验证不能泄漏、为什么集成学习的价值在降方差而非提精度。面试时把任何 ML 技巧扣回这条主线,答案就有了灵魂。
机器学习基础(Q41–Q45)
模型犯错有两种方式。偏差大=模型太笨(像硬用直线去描一条弯路),怎么学都学不会,叫"欠拟合";方差大=模型太较真,把训练题里的噪声都背下来,换套题就废,叫"过拟合"。这俩按下葫芦浮起瓢,得找平衡。金融噪声大,宁可笨一点也别太较真。
标准答案
泛化误差可以分解为三部分:
$$\text{MSE} = \text{Bias}^2 + \text{Variance} + \text{Irreducible Noise}$$
- 偏差(Bias):模型假设过于简单导致的系统性误差,对应欠拟合。
- 方差(Variance):模型对训练数据过度敏感导致的波动,对应过拟合。
在量化中的含义:
- 高偏差模型(如简单线性回归)可能错过非线性 alpha;
- 高方差模型(如深度神经网络)可能拟合市场噪声;
- 金融数据信噪比极低,通常偏向低方差模型更安全;
- 原则:宁可欠拟合也不要过拟合——错过一个机会的代价,远小于错误地相信一个不存在的机会。
正则化就是给模型加一句"别想太多"的紧箍咒,防止它把噪声也当规律学进去。L1 像用刀切,直接把没用的因子砍到 0、只留少数几个;L2 像用手压,所有因子都缩小但都保留;ElasticNet 是这两招混着用。目的都是让模型更简单、更稳。
标准答案
| 正则化 | 惩罚项 | 效果 | 量化场景 |
|---|---|---|---|
| L1(Lasso) | $\lambda \sum |w_i|$ | 产生稀疏解,自动选择因子 | 从大量候选因子中筛选有效因子 |
| L2(Ridge) | $\lambda \sum w_i^2$ | 缩小权重但不为零 | 因子共线性处理,稳定回归 |
| Elastic Net | $\alpha\,L1 + (1-\alpha)\,L2$ | 兼具稀疏和稳定 | 高维因子选择的默认选择 |
直觉:L1 像用刀切(有的因子直接砍到 0),L2 像用手压(所有因子都缩小但保留)。
量化中的额外考虑:正则化强度 $\lambda$ 的选择不应只看交叉验证误差,还要考虑因子的经济学可解释性——如果 L1 选出了无法解释的因子,可能只是拟合了噪声。
考模型要拿它没见过的数据当考题。但金融数据有时间先后,如果随机抽题,就可能拿"未来"去训练、"过去"来考——相当于考前偷看了答案,分数虚高、实盘就崩。正确做法是永远"用过去预测未来",而且训练和测试之间留一道空隙,防止信息偷偷渗过去。
标准答案
问题:普通 K-Fold 随机划分,破坏了时间序列的时序结构,导致未来信息泄漏到训练集。
正确方法:
Time →
|---Train---|---Gap---|--Test--| 第1轮
|------Train-------|---Gap---|--Test--| 第2轮
|---------Train-----------|---Gap---|--Test--| 第3轮
- Walk-Forward(前向验证):固定或扩展窗口训练,向前滚动测试;
- Embargo Gap:训练集和测试集之间留缓冲期,防止特征计算中的信息泄漏;
- Purged K-Fold(López de Prado 提出):在 K-Fold 基础上,清除训练集中与测试集标签在时间上重叠的样本。
Embargo 的计算:如果特征使用了过去 20 天的数据来预测未来 5 天的收益,Embargo 至少应设为 5 天(标签的前瞻窗口)。
XGBoost / LightGBM 是一种"很多小决策树一起投票"的模型。每棵树都在问一连串"如果…就…"的问题来做判断,特别擅长处理杂乱的表格数据,还自带挑重点、容忍缺失值的本事。但它太聪明,金融噪声大时容易把噪声也当规律背下来,所以未必比简单模型强。
标准答案
核心优势:
- 天然处理非线性和交互:树模型自动捕捉因子间的非线性关系和交互效应;
- 对异常值鲁棒:基于排序分裂,不受因子分布影响;
- 特征重要性:内置特征选择,直接看哪些因子有用;
- 缺失值处理:原生支持缺失值;
- 训练效率高:GPU 加速,大规模因子矩阵可快速训练。
量化中的关键调参:
max_depth:3–7 即可,太深容易过拟合;learning_rate:0.01–0.1,配合较多的n_estimators;subsample / colsample_bytree:0.5–0.8,增加随机性;min_child_weight:防止拟合噪声。
注意:树模型在量化中的表现上限可能不如线性模型——因为金融数据信噪比极低,复杂模型更容易拟合噪声。实际中线性模型 + 好因子常常比复杂模型 + 普通因子更稳定。
喂给模型的"线索"就叫特征,特征工程就是把原始数据加工成更好用的线索(比如排名、近期平均值)。最重要的一条铁律:做预测的那一刻,你必须真能拿到这个线索。要是偷偷用了"未来才知道的事",等于穿越作弊——回测好看,实盘崩盘。
标准答案
| 技巧 | 描述 | 原因 |
|---|---|---|
| 截面排序 / z-score | 每个截面时间点标准化 | 消除时间趋势,保留截面排序信息 |
| 滞后特征 | feature_lag1, feature_lag5 | 捕捉因子动量或反转 |
| 滚动统计量 | 均值、标准差、偏度、峰度 | 捕捉分布特征的时变性 |
| 交互特征 | 因子A × 因子B | 捕捉条件效应(如"价值+动量"联合信号) |
| 分位数编码 | 连续值 → 分位数桶 | 减少异常值影响,对树模型可提升稳定性 |
| 目标编码的陷阱 | 不可对测试集做全局编码 | 信息泄漏的常见来源 |
最重要的原则:每个特征必须在预测时刻(point-in-time)确实可以获得。回测中使用了未来信息的特征工程是最隐蔽的前视偏差。
深度学习(Q46–Q49)
这三个都是处理"有先后顺序的数据"(比如每天股价)的神经网络。RNN 像金鱼,记性短,太久之前的事就忘了;LSTM 给它配了个"记事本",能记长一点;Transformer 更狠,能一眼扫完整段历史、还自动判断哪段最重要。但越复杂越吃数据,金融噪声大时反而容易翻车。
标准答案
| 模型 | 优势 | 劣势 | 量化适用 |
|---|---|---|---|
| RNN | 简单、参数少 | 梯度消失、长程依赖弱 | 基本淘汰 |
| LSTM | 门控机制解决长程依赖 | 串行计算慢,超参敏感 | 中频时序预测 |
| GRU | 比 LSTM 简化、参数更少 | 能力略弱于 LSTM | LSTM 的轻量替代 |
| Transformer | 并行计算、全局注意力 | 对位置敏感,数据需求大 | 多因子截面学习,注意力权重可解释 |
| Temporal Fusion Transformer | 专为时序设计,内置变量选择 | 复杂度高 | 多变量时序 + 可解释性需求 |
实践建议:不要迷信模型复杂度。在低信噪比的金融数据中,简单 LSTM 配合好的特征工程和正则化,常常优于 Transformer。
AutoEncoder 先把一堆数据压缩成几个核心数字(像把长文章缩成摘要),再尝试还原回去。要是某条数据怎么都还原不像,就说明它很"怪",可以拿来抓异常行情。VAE 是升级版,不仅会压缩,还能照着学到的规律"无中生有"造出新的仿真数据。
标准答案
AutoEncoder(AE):
$$\text{Input} \xrightarrow{\text{Encoder}} \text{Latent} \xrightarrow{\text{Decoder}} \text{Reconstruction}$$
量化应用:
- 因子降维:从上百个原始因子中提取非线性压缩表示;
- 异常检测:重建误差大的样本可能是异常行情;
- 缺失值填充:用训练好的 AE 重建缺失的因子值。
VAE(变分自编码器):在 AE 基础上引入概率,latent space 是参数化的高斯分布:$q(z\mid x) \sim N(\mu, \sigma^2)$。
额外能力:
- 生成合成金融数据(数据增强);
- 对市场状态的不确定性建模;
- 更平滑的 latent space 有利于下游任务。
GAN 是让两个网络互相比拼:一个拼命造假数据,一个拼命鉴别真假,你来我往越练越强,最后造出的假数据以假乱真。量化里用它来"造"行情数据补充训练。难点是:金融数据"像不像"很难判断,必须检查它有没有真实市场的怪脾气(比如大跌之后往往更动荡)。
标准答案
金融数据生成:
- 生成合成的价格路径 / 收益率序列,用于扩充训练集;
- 生成极端行情场景(压力测试);
- 保护隐私的数据共享。
常用变体:
- TimeGAN:专门针对时间序列数据,保留时序依赖性;
- WGAN-GP:训练更稳定,避免模式崩塌。
核心挑战:
- 评估生成质量困难——FID 等图像指标不直接适用;
- 必须验证生成数据的统计特性(自相关、波动率聚集、厚尾、杠杆效应);
- 用生成数据训练的模型,样本外表现仍需在真实数据上验证。
股票之间有各种关系:上下游供货、同行业、互相影响……把它们用线连起来就是一张"关系网"。GNN 就是专门看这种网的模型,让每只股票参考"邻居"的情况来判断自己。难点是这张网会变——今天的供应商明天可能就换了,关系得不断更新。
标准答案
金融市场天然是图结构:股票之间通过产业链、股东关系、资金流、相关性等形成网络。
应用场景:
- 关联股预测:上下游公司的信息传导(供应链图谱);
- 行业传导:行业龙头的涨跌对同行业/产业链的影响建模;
- 风险传染:金融机构间的系统性风险传导;
- 知识图谱因子:从企业关系图中提取因子(如"供应商动量"因子)。
常用模型:GCN、GAT(Graph Attention Network)、GraphSAGE。
关键难点:图结构本身是动态变化的(公司关系、股东结构会变),需要时序图网络(Temporal GNN)或定期更新图结构。
强化学习(Q50)
强化学习就是让程序像打游戏一样,通过不断试错、拿"奖励"或"惩罚"来摸索最优操作。量化里最成功的是"怎么把一笔大单拆开慢慢卖、少惊动市场"。难点是金融数据太少、市场又老在变、奖励也难设计,所以拿它直接选股目前还不太靠谱。
标准答案
应用场景:
- 最优执行:将大单拆分为小单逐步执行,最小化冲击成本(Almgren-Chriss 的 RL 版本);
- 动态组合管理:根据市场状态动态调整持仓,考虑交易成本;
- 做市策略:动态调整报价价差和挂单量。
常用算法:
- PPO / A2C / SAC(连续动作空间,适合权重/价格决策);
- DQN(离散动作空间,适合买/卖/持有决策)。
核心挑战:
- 数据不足:金融数据的有效样本远少于游戏/机器人场景;
- 非平稳环境:市场结构持续变化,训练好的 agent 可能快速失效;
- 奖励设计困难:简单用 PnL 做 reward 会导致高方差;需要设计风险调整后的 reward;
- 模拟器偏差:回测模拟器无法完美还原真实市场的冲击和流动性;
- 可解释性差:策略决策过程不透明,难以获得风控信任。
实践建议:RL 在执行优化(Optimal Execution)中最为成熟,在 alpha 策略中仍处于研究阶段。
实战问题(Q51–Q55)
预测涨跌时,绝大多数时候都是小打小闹(噪声),真正大涨大跌很少——这就叫"样本不平衡"。坏处是模型会偷懒:反正"几乎没动"占多数,它一律猜"没动"也能蒙对很多,却啥也没学到。常见对策是只挑涨得最猛、跌得最惨的来学,中间模糊地带直接扔掉。
标准答案
场景:预测涨跌时,实际中大量微小变动(噪声),真正大涨大跌是少数。
处理方法:
- 标签重定义:不用涨跌,用超额收益分位数(Top 20% vs Bottom 20%,中间丢弃);
- 重采样:过采样少数类(SMOTE)或欠采样多数类;
- 损失函数加权:
class_weight='balanced'或 Focal Loss; - 评估指标:不用 Accuracy,用 AUC、Precision-Recall、IC 等。
量化特有考虑:金融中"不平衡"不一定是问题——中间区域的样本可能确实不包含有效信号,强行学习反而引入噪声。Triple-barrier 方法(López de Prado)通过止盈、止损、最长持有期三个条件定义标签,是更好的方案。
信息泄漏,就是模型偷偷用到了"预测那一刻根本拿不到的未来信息",于是回测(模拟考试)成绩漂亮得吓人,一上实盘立刻现原形——本质就是考前看了答案。防它的核心一招:所有数据处理都只能"在训练数据上学规则,再原样套到测试数据上",绝不能拿全部数据一起算。
标准答案
常见泄漏来源:
- 特征泄漏:使用了包含未来信息的因子(如未来才发布的财报数据);用全局统计量做标准化(应该用历史窗口内的统计量)。
- 标签泄漏:收益率标签与特征时间窗口重叠。例:用 t-20 到 t 天的均值预测 t 到 t+5 的收益,但 t-20 到 t 已包含了部分 t+5 的信息。
- 验证泄漏:用未来数据调参(如用整个时期做网格搜索选最优参数);K-Fold 未保持时序。
- 数据处理泄漏:先做全局 PCA 再划分训练/测试集;缺失值用全局均值填充。
防御清单:
- 所有数据处理管道必须在训练集上 fit,在测试集上 transform;
- 建立 point-in-time 数据库,每条数据标注其可用时间;
- 用
sklearn.pipeline.Pipeline封装所有预处理步骤。
传统选股给每个指标(因子)固定的权重。Attention(注意力)机制让模型学会"看情况分配注意力":不同股票、不同行情下,自动多看重要的因子、少看没用的。好处是还能看出模型在关注谁。但它太灵活,金融噪声大时很容易过拟合,得配上强约束和大量数据。
标准答案
传统多因子模型对所有因子等权或固定权重组合,Attention 机制允许模型动态地、针对不同股票和不同时期为因子分配不同权重。
具体做法:
输入:N只股票 × K个因子 × T个时间步
↓
时间维度 Attention:关注哪些历史时刻更重要
↓
因子维度 Attention:关注哪些因子在当前市场环境下更有效
↓
输出:每只股票的预测收益率 / 排序分数
优势:
- 自动实现"因子择时"——在不同市场状态下侧重不同因子;
- Attention 权重提供可解释性——可以看到模型关注了哪些因子;
- Cross-Attention 可以捕捉股票之间的关联信息。
挑战:模型容易过拟合,需要较强的正则化和较大的样本量。
集成学习就是"三个臭皮匠顶个诸葛亮",把好几个模型的预测综合起来用。有一点反直觉:它主要不是让你预测得更准,而是让结果更稳、不忽上忽下(降低波动)。在噪声巨大的金融市场里,"稳"往往比"准"更值钱。诀窍是让几个模型尽量不一样、别一起犯同样的错。
标准答案
| 方法 | 原理 | 量化应用 |
|---|---|---|
| Bagging | 多个模型在不同子样本上训练,平均预测 | 随机森林做因子打分 |
| Boosting | 串行训练,每个模型修正前一个的残差 | XGBoost/LightGBM 因子选股 |
| Stacking | 用元模型组合基模型的预测 | 第一层多个异质模型,第二层线性组合 |
| Blending | 简单加权平均多个模型的输出 | 多策略信号等权/风险平价组合 |
量化中的特殊集成技巧:
- 时间集成:对不同时间窗口训练的模型取平均,增强稳定性;
- 因子集成:同一个 Alpha 逻辑,用多个模型(线性、树、NN)分别实现,取中位数信号;
- 交叉验证集成:K 个 Fold 的模型全部保留,对新数据取 K 个预测的均值。
核心洞察:集成学习的价值不在于提高精度,而在于降低方差——在低信噪比的金融数据中,降低方差比提高精度更重要。
LLM 就是 ChatGPT 这类会读会写的 AI。量化里已经在用它读新闻和研报、判断情绪、抽取事件这些"文字活"。但它有两个大坑:一是会"一本正经地胡说"(幻觉),二是会"剧透"——用今天的 AI 去回测两年前的新闻,它可能早就知道后来涨跌了,这是看不见的作弊。
标准答案
已落地的应用:
- 新闻/公告情感分析:用 LLM 解析财报电话会议、新闻、社交媒体的情绪;
- 事件提取:从非结构化文本中提取并购、高管变动、产品发布等事件;
- 研报摘要与因子化:将卖方研报的观点量化为多空信号;
- 代码辅助:加速策略开发、回测代码编写。
前沿探索:
- LLM 作为 Alpha 信号:直接让 LLM 根据新闻判断涨跌方向;
- 多模态理解:结合文本、表格、图像(如 K 线图)的分析;
- 策略推理:让 LLM 解释因子失效原因或生成交易假设。
关键限制:
- 推理成本高,实时交易中延迟大;
- 幻觉问题——LLM 可能自信地给出错误的金融分析;
- 训练数据截止日期导致的信息滞后;
- 不适合需要精确数值计算的场景。