数据与算法

金融数据特征工程:多重共线性对策略表现的隐形干扰

VIF = 1 / (1 - R²)

金融数据特征工程:多重共线性对策略表现的隐形干扰

这是金融数据特征工程中最容易被忽略的一行公式。它不预测收益。不产生交易信号。它只回答一个问题:某个特征的信息,是否已经被其他特征重复解释。

如果多个因子高度线性相关,回归模型通常仍然可以在样本内得到不错的拟合结果。问题出现在系数。标准误差上升。参数显著性下降。符号可能反转。滚动窗口重新估计后,权重发生剧烈变化。进入样本外区间,信息系数(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_20price_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和参数稳定性检验处理结果;
  • 不把样本内拟合优度当作唯一判断标准。

多重共线性不会自动消失。增加数据量不一定解决问题。增加模型复杂度通常也不会解决问题。深度学习模型可以吸收相关特征,但仍可能形成重复暴露和不稳定的隐含表示。

可执行的做法只有一条:在每个训练窗口内重新诊断特征结构,记录处理规则,隔离测试数据,再评估样本外结果。

参数需要优化。模型需要约束。结论需要保留边界。

不做行情预测。只检查输入矩阵是否仍然可用。

相关阅读: 交易员决策疲劳应对策略:减少日内无效交易的系统化方案全职交易员的社交孤立:享受孤独还是走向心理失衡?.

常见问题

为什么模型在训练样本内拟合得很好,但样本外表现却很差?
这可能是由于多重共线性导致参数估计不稳定。模型在训练期通过重复编码的特征获得了拟合,但一旦进入样本外区间,特征间的相关结构发生微小变化,模型系数就会失效。
VIF值达到多少时需要处理?
VIF为1表示无共线性;1至5为低度至中度共线性;大于等于5提示有明显风险;大于等于10则存在严重共线性,通常建议优先删除、合并特征或进行正则化处理。
相关系数矩阵和VIF有什么区别?
相关系数矩阵仅能发现两个变量间的两两冗余,而VIF衡量的是单个特征被其余所有特征共同解释的程度,能识别更复杂的线性依赖关系。
使用PCA降维能彻底解决多重共线性吗?
PCA可以将特征转换为正交的主成分,从而缓解共线性,但它会降低特征的可解释性,且主成分载荷会随时间窗口变化,必须在滚动框架内使用。
为什么不能直接删除所有高相关性的特征?
高相关并不等同于无用,直接删除可能导致互补信息的丢失。应先建立特征字典,通过分析业务含义、样本外稳定性和因子簇表现来决定是否保留。