🏠 总目录📚 本教程 16 · 深度学习与因子挖掘
📑 本页目录(点开跳转)

深度学习与因子挖掘

30 分钟 | 🎁 量化赛的进阶


🎯 一句话

上一章讲了多因子模型的框架,这一章讲怎么用深度学习去「挖」新因子。但先记住一句话:在金融数据上,模型复杂度的收益递减得比任何领域都快——信噪比太低,复杂模型极容易学到噪声。


一、深度学习时序模型

LSTM(Long Short-Term Memory)

维度 说明
核心结构 遗忘门(决定丢弃) + 输入门(决定更新) + 输出门(决定输出)
遗忘门 f_t = sigmoid(W_f * [h_{t-1}, x_t] + b_f)
输入门 i_t = sigmoid(W_i * [h_{t-1}, x_t] + b_i)
候选记忆 C_tilde = tanh(W_c * [h_{t-1}, x_t] + b_c)
细胞状态 C_t = f_t * C_{t-1} + i_t * C_tilde
输出门 o_t = sigmoid(W_o * [h_{t-1}, x_t] + b_o)
隐状态 h_t = o_t * tanh(C_t)
LSTM vs RNN LSTM RNN
长程依赖 可捕捉(门控机制) 梯度消失/爆炸
训练稳定性 稳定 不稳定
参数量 4倍RNN 基准
竞赛推荐 时序任务首选 不推荐

GRU(Gated Recurrent Unit)

维度 说明
核心结构 重置门 + 更新门(比LSTM少一个门)
更新门 z_t = sigmoid(W_z * [h_{t-1}, x_t])
重置门 r_t = sigmoid(W_r * [h_{t-1}, x_t])
候选隐状态 h_tilde = tanh(W * [r_t*h_{t-1}, x_t])
隐状态 h_t = (1-z_t)h_{t-1} + z_th_tilde
LSTM vs GRU LSTM GRU
门数量 3个 2个
参数量 少(约3/4)
训练速度
表达能力 稍弱
竞赛建议 数据量大时 数据量小时/快速实验

时序建模实践

要点 说明
输入构造 滑动窗口:用前T步预测后1步
特征归一化 对每个特征做z-score归一化,避免量纲差异
序列长度 过短丢失长程信息,过长引入噪声,通常20~200
双向LSTM 同时利用前向和后向信息,但预测任务慎用(可能数据泄露)
多层堆叠 2~3层LSTM堆叠,增加表达能力

二、半监督学习

伪标签

步骤 说明
1. 训练初始模型 用有标签数据训练LSTM/GRU
2. 预测无标签数据 用模型预测,取高置信度样本
3. 混合训练 有标签+伪标签数据一起训练
4. 迭代优化 重复2-3,逐步提升

一致性正则

方法 说明
Dropout一致性 同一样本多次前向(不同Dropout),要求输出一致
数据扰动一致性 对输入加噪声,要求输出一致
时间扰动 对时序数据做时间偏移/缩放,要求预测一致

Mixup时序适配

维度 说明
方法 在特征空间做Mixup:x_mix = lambdax1 + (1-lambda)x2
注意 时序数据需对齐时间步再做Mixup
效果 正则化,提高泛化能力

三、高频因子挖掘

数据源

数据类型 字段 说明
订单簿(Order Book) 买/卖各10档价格和数量 反映市场供需
成交数据(Trade) 价格、数量、方向、时间 反映实际交易
K线数据 OHLCV(开高低收量) 聚合后的行情

订单簿因子

因子类别 示例因子 计算方式
价差因子 买卖价差 ask1 - bid1
深度因子 买卖力量比 sum(bid_qty) / sum(ask_qty)
加权因子 加权中间价 (bid1ask1_qty + ask1bid1_qty) / (bid1_qty + ask1_qty)
不平衡因子 订单不平衡 (bid_qty - ask_qty) / (bid_qty + ask_qty)
压力因子 买/卖压力 各档位量价加权

成交数据因子

因子类别 示例因子 计算方式
量价因子 成交量加权平均价(VWAP) sum(price*qty) / sum(qty)
方向因子 买卖比例 buy_qty / (buy_qty + sell_qty)
大单因子 大单占比 大单量 / 总成交量
动量因子 价格动量 price_t / price_{t-n} - 1

买卖单细分因子

细分维度 说明
主动买/主动卖 以卖价成交=主动买,以买价成交=主动卖
大单/中单/小单 按成交量划分,大单通常>均值+2sigma
买卖力量 主动买量 - 主动卖量,反映市场方向

联动因子

因子 说明
个股与大盘联动 个股收益率与大盘收益率的相关性
行业联动 同行业股票收益率的协动性
期现联动 期货与现货价格的价差变化

KMeans聚类因子

步骤 说明
1. 特征提取 对每只股票提取多维度特征(波动率、换手率、市值等)
2. 聚类 KMeans将股票分为K组
3. 因子构造 聚类标签作为类别因子,或组内均值/离差作为因子
4. 应用 同组股票具有相似特征,可用于配对交易或风险控制

四、因子评估

IC(Information Coefficient)

指标 公式 含义
IC corr(factor_rank, return_rank) 因子值与收益率的秩相关系数
IC均值 多期IC的平均 因子预测能力
IC标准差 多期IC的标准差 因子稳定性
ICIR IC均值 / IC标准差 风险调整后预测能力
ICIR评判标准 ICIR值 评价
优秀 > 0.5 强因子
良好 0.3 ~ 0.5 可用
一般 0.1 ~ 0.3 弱因子
无效 < 0.1 噪声

分层回测

步骤 说明
1. 排序分组 按因子值将股票分为5~10组
2. 计算组收益 每组等权/市值加权收益
3. 多空组合 顶组 - 底组收益
4. 单调性 组间收益应单调递增/递减

五、模型融合

时序竞赛融合策略

方法 说明 适用场景
简单平均 多模型预测取平均 Baseline
加权平均 按验证集表现分配权重 最常用
Rank平均 将预测转为排名再平均 预测尺度不一致时
Stacking 基模型预测作为特征训练元模型 最强但易过拟合

多模型构建

模型类型 示例 融合价值
树模型 LightGBM, XGBoost 捕捉非线性交叉
深度模型 LSTM, GRU, Transformer 捕捉时序依赖
统计模型 ARIMA, Prophet 捕捉趋势和周期
线性模型 Ridge, Lasso 稳定基线

六、竞赛实战要点

要点 说明
时间泄露 严禁用未来数据,验证集按时间划分
特征稳定性 因子在训练集和测试集上IC应一致
过拟合风险 时序数据过拟合严重,需严格时间切分验证
因子衰减 因子有效性可能随时间衰减,需定期更新
交易成本 实盘需考虑滑点、手续费,竞赛通常忽略
多频率 日频/分钟频/Tick频,不同频率因子差异大

七、TabNet

维度 说明
核心思想 针对表格数据的深度学习模型,用注意力机制做特征选择
逐层特征选择 每层通过Mask选择部分特征,类似决策树的特征分裂
稀疏正则 鼓励每层只选少量特征,提高可解释性
优势 无需特征工程即可处理表格数据,端到端训练
劣势 在结构化数据上通常不如LightGBM,训练慢
竞赛应用 作为融合多样性来源,与树模型互补

八、Temporal Fusion Transformer(TFT)

维度 说明
核心思想 面向多变量多步预测的Transformer模型,显式处理静态/动态/已知未来输入
变量类型 静态协变量(不随时间变化) + 动态已知输入(未来可知) + 动态观测输入(仅历史)
可解释性 注意力权重可视化特征重要性,变量选择模块输出特征贡献度
分位数预测 输出多个分位数(10%/50%/90%),天然支持区间预测
优势 同时处理多种输入类型,可解释性强,多步预测准确
竞赛应用 多变量多步时序预测,需要可解释性时

九、因子中性化与正交化

维度 说明
因子中性化 去除因子与行业/市值等风险因子的相关性,只保留Alpha信息
实现方式 对因子值做截面回归:factor = alpha + betamarket_cap + gammaindustry + residual,取residual
因子正交化 去除多个因子之间的相关性,使因子独立
Symmetric正交 对称正交,保持因子排序不变
竞赛价值 中性化后的因子IC更纯净,正交化后的多因子组合更有效

十、因子衰减与动态因子权重

维度 说明
因子衰减 因子有效性随时间递减,近期IC高于远期IC
半衰期 因子IC衰减到一半所需时间,不同因子半衰期不同
动态权重 根据近期IC动态调整因子权重,近期IC高的因子权重更大
实现方式 指数加权IC均值:IC_weighted = sum(w_i * IC_i) / sum(w_i),w_i随时间指数衰减
竞赛应用 时序竞赛中动态调整特征权重,适应市场变化

🔗 这一章连到哪里

去哪为什么
ML基础 13 RNN 与序列建模LSTM / GRU / TCN 的原理,高频因子挖掘的模型底座
ML基础 14 通往 TransformerTFT 里的注意力机制从哪来
ML基础 03 线性模型因子中性化 = 对风格因子做回归取残差,正交化也是线性代数那一套

✅ 检查点

  1. 为什么金融数据上「模型越复杂越好」这条经验最不成立?
  2. TabNet 和 TFT 分别适合什么场景?
  3. 什么是因子中性化?为什么要做?
  4. 因子衰减是什么现象?动态因子权重怎么应对它?
  5. 半监督学习在量化赛里的典型用法是什么?
👀 答案
  1. 因为金融数据的信噪比极低——真实信号可能只占方差的百分之几。复杂模型有足够的容量把噪声也拟合进去,而验证集上的噪声和训练集的噪声不是同一批,于是过拟合表现得特别明显。⭐ 这也是为什么量化赛里线性模型和浅层树模型经常出奇地强
  2. TabNet:表格数据的注意力模型,优势是自带特征选择的可解释性(能看出每一步用了哪些特征),适合特征多且想知道模型在看什么的场景。TFT(Temporal Fusion Transformer):多变量时序预测,优势是同时处理静态协变量、已知未来协变量、和历史观测,适合有丰富外生变量的时序赛题。
  3. 把因子中与已知风险因子(如市值、行业、beta)相关的部分剔除掉,只保留残差。做的理由:如果你的「新因子」只是市值因子的伪装,那它带不来任何新信息——中性化之后才能看出它是否有独立的预测能力。实现上就是把新因子对风险因子做回归,取残差
  4. 因子衰减指一个因子的预测能力随时间下降(被更多人使用、市场结构变化)。动态因子权重的应对是:用滚动窗口重新估计各因子近期的有效性,据此调整权重——衰减的降权、新起作用的升权。⚠️ 但要注意窗口太短会追噪声,太长又反应不及时,这个窗口本身就是关键超参。
  5. 用大量无标签的行情数据做预训练/表示学习,再用有限的有标签数据微调。典型场景:标签(未来收益)稀缺且噪声大,但原始行情数据海量。常见做法:自监督地预测被遮盖的时间片段、或用对比学习让相似市场状态的表示靠近。

🛑 可以停在这里

走神救援
金融数据上「模型越复杂越好」最不成立——信噪比极低(真实信号可能只占方差的百分之几),复杂模型容量足以拟合噪声,所以量化赛里线性模型和浅层树模型经常出奇地强TabNet 是表格注意力模型,自带特征选择的可解释性TFT 能同时处理静态协变量 + 已知未来协变量 + 历史观测,适合外生变量丰富的时序。⭐因子中性化 = 把新因子对已知风险因子(市值/行业/beta)做回归取残差——如果你的「新因子」只是市值因子的伪装,中性化之后就现原形了因子衰减(用的人多了、市场结构变了)用滚动窗口重估有效性来动态调权应对,⚠️ 但窗口太短追噪声、太长反应不及时,它本身就是关键超参。半监督:标签(未来收益)稀缺且噪声大但行情数据海量 → 自监督预训练再微调。

打卡记录保存在你的浏览器里,首页能看到总进度