这是金融数据特征工程中最容易被忽略的一行公式。它不预测收益。不产生交易信号。它只回答一个问题:某个特征的信息,是否已经被其他特征重复解释。
如果多个因子高度线性相关,回归模型通常仍然可以在样本内得到不错的拟合结果。问题出现在系数。标准误差上升。参数显著性下降。符号可能反转。滚动窗口重新估计后,权重发生剧烈变化。进入样本外区间,信息系数(IC)和收益稳定性同步下滑。
这不是模型复杂度不足。很多时候,模型已经获得了同一份信息,只是被不同字段重复编码。
多重共线性的量化本质:模型看到了几份相同的信息
多重共线性,指多元回归模型中两个或多个自变量存在高度线性相关。
设收益为 \(y\),特征矩阵为 \(X\),线性模型为:
\[
y = \beta_0 + \beta_1x_1 + \beta_2x_2 + \cdots + \beta_px_p + \epsilon
\]
在单变量回归中,\(x_1\) 的作用相对容易估计。加入多个变量后,模型需要分离每个特征的独立贡献。
这一步在高度相关的金融特征上很难完成。
例如,特征工程中同时加入:
- 过去20日收益率;
- 过去20日价格变化;
- 过去20日对数收益累积;
- 过去20日均线偏离度;
- 当前价格与20日均线的比值。
这些字段的数学定义不同。信息来源却高度重叠。模型需要在近似相同的解释变量之间拆分贡献。结果不是信息增加,而是参数估计的方差增加。
系数不稳定,不等于模型一定拟合失败
这是诊断中最容易出现的误判。
多重共线性不必然降低样本内整体拟合优度。模型仍然可能拥有较高的 \(R^2\)。预测值也可能贴合训练样本。真正受损的是以下部分:
1. 单个回归系数的统计显著性;
2. 参数的稳定性;
3. 特征贡献的可解释性;
4. 模型在样本外数据上的泛化能力;
5. 滚动回测中的信号一致性。
当两个特征几乎携带相同信息时,模型不需要准确区分它们的独立作用,也可以得到相近的预测结果。但一旦进入新的时间区间,二者之间的相关结构发生微小变化,系数就可能重新分配。
一种常见表现是:
- 训练区间内,因子 \(x_1\) 的系数为正;
- 换一个滚动窗口后,\(x_1\) 的系数接近零;
- 再换一个窗口,\(x_1\) 的系数变为负;
- 总体预测值变化不大;
- 单因子解释完全失效。
这不是因子逻辑突然反转。更接近数值分解不稳定。
共线性不一定破坏样本内拟合。它首先破坏的是参数的可信度。
金融特征中的重复信息通常来自三类来源
同一原始变量的不同变换
价格、收益率、对数收益、价格变化率、均线偏离度,经常同时进入数据表。
这些变量并非完全相同。但在固定窗口和特定市场状态下,相关系数可能长期处于高位。
不同指标对同一时间窗口的重复计算
动量指标、均线系统、趋势强度指标、部分技术指标,都可能使用相同的过去 \(N\) 日价格序列。
窗口分别设置为10日、20日、21日,不代表信息独立。相邻窗口生成的特征往往高度相关。
基本面字段之间的机械关系
市值、总资产、营业收入、利润、资产负债率、净资产收益率之间存在会计关系。
例如,某些估值指标由价格和盈利字段共同计算。如果基础字段和衍生比率同时进入模型,重复信息会被进一步放大。
因此,特征数量增加不等于有效维度增加。
诊断工具箱:先看相关矩阵,再计算VIF
金融数据特征工程不应直接从模型训练开始。第一步应当是建立特征依赖结构。
诊断过程可以拆分为三个层次:
1. 两两相关性;
2. 单变量对其余变量的解释程度;
3. 整体设计矩阵的条件数。
这三个层次解决不同问题。不能用一个指标替代全部诊断。
相关系数矩阵:快速发现冗余关系
相关系数最适合做第一轮筛选。
对任意两个特征 \(x_i\) 与 \(x_j\),计算:
\[
r_{ij} = corr(x_i, x_j)
\]
当相关系数绝对值大于0.7或0.8时,可以视为高度相关预警。阈值不是定理。它用于缩小排查范围。
相关矩阵适合发现:
- 同一类动量因子的重复计算;
- 多个相邻窗口的均线特征;
- 价格水平与价格变换字段的高相关;
- 财务比率与其组成字段之间的重叠;
- 不同数据源对同一经济变量的重复表达。
相关系数有一个明显限制:它只观察两个变量之间的关系。
假设 \(x_1\) 与 \(x_2\) 的相关系数不高,但二者共同可以被其他变量线性解释。两两相关矩阵可能没有明显异常,整体模型仍然存在多重共线性。
因此,相关矩阵只能作为入口。
方差膨胀因子:衡量一个特征被其他特征解释了多少
对特征 \(x_j\),先用其他特征对它进行回归:
\[
x_j = \alpha + \gamma_1x_1 + \cdots + \gamma_{j-1}x_{j-1} + \gamma_{j+1}x_{j+1} + \cdots + \gamma_px_p + u
\]
得到决定系数 \(R_j^2\) 后,计算:
\[
VIF_j = \frac{1}{1-R_j^2}
\]
VIF越大,说明 \(x_j\) 越能被其他特征解释。它的独立信息越少。对应回归系数的不确定性越高。
常用解释区间如下:
| VIF范围 | 诊断含义 | 工程动作 |
|---|---|---|
| VIF = 1 | 与其余变量完全不相关 | 无需因共线性处理 |
| 1–5 | 低度至中度共线性 | 结合业务含义继续观察 |
| ≥5 | 明显共线性风险 | 检查变量定义和重复信息 |
| ≥10 | 严重共线性风险 | 优先删除、合并或正则化 |
| ≥100 | 极严重共线性 | 不宜直接保留原始特征进入普通回归 |
VIF不是预测指标。它不能说明某个因子是否有效,也不能说明删除该因子后策略一定改善。
它只说明参数估计可能受到其他特征干扰。
条件指数:观察整体设计矩阵的退化程度
条件指数用于识别设计矩阵中近似线性依赖的方向。
当条件指数大于30时,通常可以视为强共线性信号。与VIF相比,条件指数更偏向整体诊断。它不只关注某个变量,而是观察特征空间是否存在接近退化的方向。
这对高维因子库更有价值。
例如,特征数量从20个增加到200个后,单个变量的相关系数可能都没有超过预设阈值。此时,如果多个变量在组合意义上形成近似线性关系,条件指数可能先出现异常。
诊断不能脱离时间结构
金融数据与普通截面数据不同。相关系数不是常数。VIF也不是常数。
在不同市场状态、不同波动区间和不同交易频段中,特征之间的依赖结构会变化。
如果把全样本数据直接合并后计算一次相关矩阵,结果可能掩盖局部问题:
- 全样本相关性中等,但某段行情中高度相关;
- 训练区间VIF正常,验证区间VIF快速上升;
- 日频数据共线性有限,换到分钟级后多个微观结构变量高度重复;
- 财务数据在报告期变化缓慢,滚动窗口中出现近似常数。
因此,诊断应嵌入回测流程,而不是只做一次静态报告。
使用滚动窗口计算诊断指标
可以按照训练窗口、验证窗口和测试窗口分别计算:
- 相关系数矩阵;
- 每个特征的VIF;
- 条件指数;
- 特征缺失率;
- 特征有效样本数;
- 模型系数的滚动均值与滚动标准差。
如果某个变量在全样本中VIF为4,但在多个滚动窗口中超过10,它不应被视为稳定变量。
反过来,如果某个特征偶尔VIF较高,但其经济定义清晰、样本外表现稳定,也不必机械删除。阈值是诊断工具,不是交易规则。
诊断过程必须避免未来数据泄漏
如果使用整个样本计算特征筛选结果,再用筛选后的特征做历史回测,会把未来信息带入过去。
正确流程应当是:
1. 在训练区间计算相关矩阵;
2. 在训练区间计算VIF;
3. 仅使用训练区间决定删除、合并或保留哪些特征;
4. 将同一套特征规则应用到验证区间;
5. 进入下一个滚动窗口后重新计算;
6. 保留每个窗口的诊断记录。
不能先查看测试集中的相关结构,再反向调整训练集特征。
这属于数据泄漏。无论最终模型使用线性回归、树模型还是神经网络,问题都存在。
共线性如何传导到策略表现
多重共线性的影响不止体现在一张回归系数表中。它会通过参数、信号和组合构建三个层级传导。
第一层:标准误差扩大
在线性回归中,系数估计的方差与特征矩阵的结构相关。
当一个变量大部分可以被其他变量解释时,模型难以确认它的独立贡献。标准误差上升。置信区间变宽。统计显著性下降。
此时,因子可能仍然具有整体预测价值,但单个系数不再稳定。
这会影响因子筛选。若只按单变量显著性删除特征,可能误删处于高度相关因子组中的有效变量。
因此,不能仅看单个因子的显著性。应同时观察:
- 因子组整体表现;
- 正则化后的系数路径;
- 删除某个变量后的组合变化;
- 滚动样本外IC;
- 不同窗口下的符号稳定性。
第二层:系数符号和大小反转
两个高度相关的变量共同进入模型时,模型可能在二者之间进行不稳定分配。
假设 \(x_1\) 和 \(x_2\) 都代表趋势信息。某个窗口中,\(x_1\) 获得正权重,\(x_2\) 获得接近零的权重。另一个窗口中,权重可能转移到 \(x_2\)。
如果相关性更高,系数甚至可能出现正负号反转。
这不代表因子逻辑发生了确定的方向变化。可能只是设计矩阵接近奇异,参数对样本扰动过于敏感。
系数反转会造成两个问题:
- 因子解释失去一致性;
- 基于系数符号的仓位构建出现额外波动。
第三层:样本外预测失效
样本内模型可以通过不同系数组合产生相近的预测结果。
样本外数据改变后,原有的相关结构不再完全成立。模型过去依赖的参数分配失效。预测结果偏离。信息系数可能大幅下滑。
这里必须区分两种情况:
- 共线性导致参数不稳定;
- 真实结构发生变化导致预测关系改变。
二者可能同时出现。单独使用VIF不能完成归因。需要结合滚动系数、特征分布、残差结构和样本外表现进行拆解。
样本外失效通常不是某个系数突然犯错,而是特征空间的几何结构发生了变化。
组合层面的重复暴露
即使模型采用正则化,重复特征仍然可能造成组合暴露集中。
例如,模型输入包含多个不同名称的趋势变量。模型输出可能同时对它们产生正权重。最终组合看似持有多个因子,实际只承担一种潜在风险。
这会产生虚假的分散化。
因子数量增加。有效独立因子数量没有增加。
因此,策略评价不能只统计输入字段数量。还应分析:
- 特征相关矩阵;
- 因子收益相关矩阵;
- 组合对主成分的暴露;
- 同类变量的总权重;
- 删除整个因子簇后的性能变化。
特征工程的三条处理路径
处理多重共线性没有单一最优方案。选择取决于模型目标。
如果目标是解释系数,优先保留可解释变量。
如果目标是预测,正则化和降维更有优势。
如果目标是构建稳定组合,应同时控制因子暴露和特征依赖。
路径一:删除高相关冗余特征
这是最直接的方法。
先计算相关系数矩阵。对绝对相关系数超过0.7或0.8的变量对建立候选集合。然后根据以下顺序保留变量:
1. 数据质量更稳定的变量;
2. 缺失值更少的变量;
3. 时间定义更清晰的变量;
4. 经济含义更直接的变量;
5. 滚动样本外表现更稳定的变量;
6. 对交易成本和换手率影响更低的变量。
不能只保留历史收益最高的那个变量。这样容易把样本内噪声当成筛选依据。
更稳妥的做法,是将高度相关变量视为一个特征簇,再对整个特征簇进行分析。
例如,将多个趋势指标归为趋势簇,将多个估值比率归为估值簇。先计算簇内相关性,再从簇中选取代表变量,或构造簇级综合因子。
删除特征的优势:
- 结果容易解释;
- 模型计算成本低;
- 回归系数更容易分析;
- 参数调整路径更清晰。
局限也很明确:
- 可能丢失部分互补信息;
- 阈值选择带有主观性;
- 单一变量无法代表整个特征簇;
- 在不同时间窗口中,保留变量可能发生变化。
路径二:使用主成分分析降维
主成分分析(PCA)将原始特征转换为一组互相正交的主成分。
设标准化后的特征矩阵为 \(X\),通过协方差矩阵或相关系数矩阵分解,得到新的方向:
\[
Z = XW
\]
其中,\(W\) 为特征向量矩阵,\(Z\) 为主成分。
主成分之间不再存在原始意义上的线性相关。共线性问题得到缓解。
PCA适合以下场景:
- 原始特征数量较多;
- 特征之间存在明显重复信息;
- 预测目标优先于单因子解释;
- 模型对变量正交性有要求;
- 需要压缩计算维度。
但PCA并不等于自动生成有效因子。
它只按照特征自身的方差排序。方差最大的方向,不一定最能预测未来收益。
还存在三个工程问题:
主成分的可解释性下降
第一主成分可能同时包含价格、波动率、成交量和估值字段。它是数学方向,不是天然的经济因子。
如果策略需要向投资者解释每个风险暴露,PCA会增加沟通成本。
主成分载荷会随窗口变化
在滚动计算中,特征协方差矩阵变化,主成分载荷也会变化。第一主成分在不同窗口可能对应不同的变量组合。
因此,不能只在全样本上拟合一次PCA,再直接用于历史回测。降维参数也必须只使用当时可获得的数据。
标准化会改变结果
不同特征量纲差异很大。价格、成交量、估值比率不能直接混合做PCA。
通常需要先进行截面或时间序列标准化。但标准化方法本身会影响协方差结构。异常值处理也会改变主成分方向。
PCA的参数不能脱离预处理流程单独讨论。
路径三:使用岭回归或LASSO
正则化不删除特征,而是限制参数规模。
岭回归在损失函数中加入二次惩罚:
\[
\min_{\beta}\left\{\|y-X\beta\|_2^2+\lambda\|\beta\|_2^2\right\}
\]
当特征高度相关时,岭回归倾向于将权重分散到相关变量之间。系数不容易发生剧烈变化。
这通常适合预测优先的任务。
岭回归的特点:
- 缓解系数方差过大;
- 对高度相关变量较稳定;
- 保留全部变量;
- 不产生稀疏结果;
- 参数解释仍需结合载荷分析。
LASSO使用绝对值惩罚:
\[
\min_{\beta}\left\{\|y-X\beta\|_2^2+\lambda\|\beta\|_1\right\}
\]
它可以将部分系数压缩到零,实现变量选择。
LASSO的特点:
- 产生稀疏模型;
- 减少输入变量数量;
- 适合特征筛选;
- 在高度相关变量组中,可能任意选择其中一个;
- 变量选择结果对样本窗口较敏感。
当多个特征高度相关时,LASSO不一定稳定地保留同一个变量。它可能在不同训练窗口中切换选择对象。
如果目标是预测,这种切换未必造成严重问题。
如果目标是解释和构建稳定因子组合,则需要记录变量选择频率,而不能只看单次结果。
正则化能压低参数方差,但不能把重复信息变成独立信息。
一个可执行的诊断与处理流程
将共线性处理写成固定流程,可以减少人工判断和回测偏差。
第一步:建立特征字典
每个特征至少记录:
- 原始数据来源;
- 计算公式;
- 时间窗口;
- 更新频率;
- 缺失值处理方法;
- 是否使用未来可得字段;
- 是否经过截面标准化;
- 是否与其他字段存在机械关系。
特征名称不够。必须保留定义。
例如,momentum_20 和 price_change_20 可能名称不同,但实际表达相近。没有特征字典,重复信息很难被系统识别。
第二步:清理数据质量问题
在计算相关性和VIF之前,先处理:
- 缺失值;
- 无穷值;
- 停牌或无成交记录;
- 极端异常值;
- 样本数量过少的变量;
- 近似常数变量。
异常值会扭曲相关系数。近似常数变量会让回归诊断失去意义。
标准化应在明确的时间边界内完成。不能用全样本均值和标准差处理历史数据。
第三步:计算相关系数矩阵
对候选特征进行初筛。
对绝对相关系数超过0.7或0.8的变量对,建立冗余候选列表。不要立即删除。先按特征定义分组。
如果两个变量高度相关,但分别属于不同业务含义,直接删除可能丢失解释信息。需要进一步计算其与目标变量的关系,以及在样本外的稳定性。
第四步:计算VIF和条件指数
在筛选后的特征集合上计算VIF。
建议保留每个窗口的:
- VIF最大值;
- VIF中位数;
- 超过5和10的变量数量;
- 条件指数最大值;
- 高VIF变量的所属因子簇。
如果某个变量VIF长期超过10,优先检查它是否为其他字段的线性组合或近似重复变换。
如果VIF在不同窗口间剧烈跳动,说明相关结构具有时间依赖。此时不应只做一次全样本删除。
第五步:确定处理策略
可以按照任务目标选择:
- 强调解释:删除或合并高相关变量;
- 强调预测:使用岭回归或其他正则化;
- 高维特征:使用PCA或分组降维;
- 需要稀疏输入:使用LASSO,但记录变量选择稳定性;
- 组合构建:增加因子暴露和簇级权重约束。
不要将所有处理方法叠加。先明确目标函数,再选择工具。
第六步:重新做滚动样本外回测
处理共线性后,不能只比较样本内 \(R^2\)。
至少观察:
- 样本外IC;
- IC的时间序列稳定性;
- 多空组合收益;
- 换手率;
- 最大回撤;
- 回归系数的滚动标准差;
- 特征选择频率;
- 不同窗口下的预测相关性。
如果模型样本外表现改善,但系数仍然变化较大,说明正则化可能缓解了预测问题,但没有完全解决解释问题。
如果模型样本外表现没有改善,可能存在其他原因:
- 特征本身没有预测能力;
- 标签定义不稳定;
- 存在数据泄漏或时间对齐错误;
- 交易成本没有正确计入;
- 市场结构已经发生变化;
- 共线性并不是主要失效来源。
不同交易频段的容忍度不能直接套用
高频、日频和低频策略的特征结构不同。共线性诊断阈值可以作为统一起点,但不能把某个频段的经验边界直接迁移到另一个频段。
高频数据
高频特征通常来自订单簿、成交、价差、撤单、盘口深度和短周期收益。
这些变量可能在极短时间内近似同步变化。相关性更容易受到采样方式、时间聚合方式和盘口状态影响。
此时需要关注:
- 特征计算是否使用相同事件窗口;
- 不同字段是否由同一批成交记录派生;
- 时间戳是否严格对齐;
- 盘口特征是否重复编码同一深度信息;
- 诊断是否受到非同步交易影响。
高频策略中,简单删除高相关字段可能损失微观结构信息。更合理的做法通常是先构造低维、定义明确的特征簇,再使用正则化或降维控制参数波动。
日频数据
日频因子通常包括动量、反转、波动率、流动性、估值和基本面变量。
同类指标的重复计算较为常见。相关系数矩阵和VIF具有较好的筛选价值。
但日频数据仍然存在时间依赖。相关性可能在高波动阶段集中上升。一次全样本诊断无法覆盖所有状态。
低频基本面数据
基本面字段更新慢。多个财务比率可能长期保持高相关。报告期之间还可能存在阶梯状变化。
此时需要区分:
- 变量之间的数学关系;
- 变量之间的经济关系;
- 数据发布时间与可交易时间;
- 报告期与实际可用日期。
低频特征的共线性处理,不能脱离数据可得性。一个在报告期内存在的字段,不代表当时已经可以用于交易。
目前没有足够依据给出一个适用于所有频段的固定VIF边界。5、10和100可以作为诊断参考,但实际容忍度仍取决于特征数量、窗口长度、模型形式、目标定义和样本外稳定性。
常见错误:看见高相关就删除
这是最简单,也最危险的自动化规则。
高相关并不等于无用。两个变量可能在历史样本中高度相关,但其中一个在未来区间具有更稳定的可得性或更低的噪声。
相反,低相关也不等于独立。多个变量的组合关系可能产生严重共线性。
还存在一个常见错误:只在训练前做一次特征筛选,然后将筛选结果固定到整个回测周期。
如果特征相关性随时间变化,固定筛选结果会产生错配。过去适用的特征组合,未必适用于后续窗口。
另一个错误是把PCA输出直接当成可解释因子。主成分只表示方差最大的数学方向。它不自动对应收益来源,也不保证样本外预测能力。
LASSO也不能被视为稳定的因子选择器。高度相关变量之间,选择结果可能随窗口变化。应当观察变量入选频率,而不是只记录最终一次模型保留了哪些字段。
参数优化:先优化稳定性,再优化收益
共线性处理中的参数包括:
- 相关系数阈值;
- VIF阈值;
- 条件指数阈值;
- PCA保留维度;
- 岭回归惩罚系数;
- LASSO惩罚系数;
- 滚动训练窗口长度;
- 特征更新频率。
这些参数不能全部根据样本内收益优化。否则,特征工程本身会成为过拟合源。
更合理的参数评估顺序是:
1. 先观察VIF和条件指数是否下降;
2. 再观察滚动系数是否稳定;
3. 再观察样本外IC是否保持;
4. 再加入交易成本与换手约束;
5. 最后比较组合收益和风险指标。
如果一个参数设置提高了收益,却使特征选择频率和系数波动显著恶化,应当谨慎处理。
对PCA而言,保留主成分数量不应只由累计解释方差决定。还应检查不同维度下的样本外预测差异。
对岭回归和LASSO而言,惩罚系数应在滚动训练框架内选择。不能使用测试区间结果反向确定全周期参数。
结论:减少重复信息,不是减少特征数量
金融数据特征工程的核心问题,不是输入字段越多越好,也不是把VIF压到最低。
目标是获得一个可诊断、可复现、样本外稳定的特征空间。
处理多重共线性时,可以遵循以下原则:
- 用相关系数矩阵识别两两冗余;
- 用VIF判断单个变量被其他变量解释的程度;
- 用条件指数观察整体特征空间是否接近退化;
- 用滚动窗口识别时间变化;
- 用特征字典确认字段之间的机械关系;
- 用删除、合并、PCA、岭回归或LASSO匹配模型目标;
- 用样本外IC和参数稳定性检验处理结果;
- 不把样本内拟合优度当作唯一判断标准。
多重共线性不会自动消失。增加数据量不一定解决问题。增加模型复杂度通常也不会解决问题。深度学习模型可以吸收相关特征,但仍可能形成重复暴露和不稳定的隐含表示。
可执行的做法只有一条:在每个训练窗口内重新诊断特征结构,记录处理规则,隔离测试数据,再评估样本外结果。
参数需要优化。模型需要约束。结论需要保留边界。
不做行情预测。只检查输入矩阵是否仍然可用。
相关阅读: 交易员决策疲劳应对策略:减少日内无效交易的系统化方案 、 全职交易员的社交孤立:享受孤独还是走向心理失衡?.
