4. 多变量交叉衍生:比率变量、乘积变量、差值变量与多项式特征构造
单一变量的变换(如对数、标准化)只能捕捉个体分布特征,无法刻画变量间的交互关系。在量化交易与风险建模中,资产间的比价、价差、乘积协同效应以及非线性曲面往往比单变量更具预测力。本节系统讲解四类多变量交叉衍生方法,并给出可落地的构造流程与避坑指南。
4.1 四类交叉衍生方法总览
| 衍生类型 | 数学形式 | 典型应用场景 | 注意事项 |
|---|---|---|---|
| 比率变量 | X₁ / X₂ | 市盈率、夏普比率、换手率/波动率 | 分母不可为零;需处理极端值 |
| 乘积变量 | X₁ × X₂ | 成交量×价格(资金流)、因子交互项 | 量纲放大,需标准化后再相乘 |
| 差值变量 | X₁ − X₂ | 价差、期限利差、Alpha 残差 | 需确保量纲一致;注意序列相关性 |
| 多项式特征 | X₁², X₁X₂, X₁²X₂, … | 非线性曲面拟合、波动率微笑 | 阶数过高易过拟合;需配合正则化 |
核心原则:交叉衍生应基于业务逻辑驱动,而非穷举所有组合。每增加一个交互项,模型自由度上升,必须用交叉验证或信息准则控制复杂度。
4.2 比率变量:标准化与可比性
比率变量是最常用的交叉衍生形式,其本质是去量纲化,使不同量级的变量具有可比性。在量化研究中,常见的比率构造包括:
- 估值类:PE = Price / EPS, PB = Price / BVPS
- 效率类:换手率 / 波动率(衡量流动性效率)
- 风险调整收益类:夏普比率 = (Rₚ − R_f) / σₚ
构造要点:
- 分母必须为正且远离零;若分母接近零,可加平滑常数 ε(如 1e-6)或使用 Winsorize 截尾。
- 比率变量通常呈右偏分布,建议在衍生后做对数变换或 Box-Cox 变换。
- 警惕“伪相关”:两个独立变量在分母同时包含共同因子时,比率可能产生虚假信号。
# Python 示例:稳健比率构造
import numpy as np
import pandas as pd
def safe_ratio(num, denom, eps=1e-6, upper=10.0, lower=0.1):
ratio = num / (denom + eps)
ratio = np.clip(ratio, lower, upper) # 极端值截尾
return ratio
# 示例:构造换手率/波动率比率
df['turnover_vol_ratio'] = safe_ratio(df['turnover'], df['volatility'])
4.3 乘积变量:交互效应与协同信号
乘积变量用于捕捉两个因子之间的协同或增强效应。例如,高动量叠加高成交量往往比单一因子更具持续性。乘积项在统计模型中对应交互项,在机器学习中则自动被树模型捕获,但在线性模型中必须显式构造。
构造规范:
- 相乘前先对每个变量做 Z-score 标准化,避免量纲差异导致乘积项被某个变量主导。
- 若两个变量高度相关(|r| > 0.7),乘积项会引入多重共线性,需考虑正交化处理。
- 在因子组合中,乘积变量常作为“条件因子”使用:如市值×动量,表示不同市值区间下动量的异质性。
# 标准化后构造乘积项
from scipy.stats import zscore
df['size_z'] = zscore(df['market_cap'])
df['mom_z'] = zscore(df['momentum_12m'])
df['size_mom_interact'] = df['size_z'] * df['mom_z']
4.4 差值变量:价差与相对强弱
差值变量直接度量两个变量之间的绝对偏离,在配对交易、期限结构分析中不可或缺。常见形式包括:
- 价差:P_A − P_B(同品种不同到期日)
- 期限利差:10Y 国债收益率 − 2Y 国债收益率
- Alpha 残差:实际收益 − 因子预测收益
关键处理:
- 差值变量通常是非平稳的,尤其在价格类数据中。建议对差值做差分或使用协整检验确保平稳性。
- 若两个变量量纲不同,差值无实际意义,必须先标准化或转换为比率。
- 在截面因子中,差值变量常以“排名差”形式出现:Rank(X₁) − Rank(X₂),以消除极端值影响。
常见陷阱:直接使用原始价格做差值构造“价差因子”,却忽略了两个价格序列的协整关系。若两者非协整,价差会发散,导致因子失效。务必先做 ADF 检验或 Engle-Granger 两步法。
4.5 多项式特征:非线性曲面构造
多项式特征通过变量的幂次和交叉项来拟合非线性关系。在量化中常用于:波动率微笑曲面、期权隐含二叉树、因子收益率的非线性暴露。
常用多项式阶数:
| 阶数 | 形式 | 参数数量(p 个变量) | 适用场景 |
|---|---|---|---|
| 2 阶(二次) | X₁, X₂, X₁², X₂², X₁X₂ | O(p²) | U 型/倒 U 型关系 |
| 3 阶(三次) | 增加 X₁³, X₂³, X₁²X₂, X₁X₂² | O(p³) | S 型曲线、拐点效应 |
| ≥4 阶 | 高阶交叉 | O(pᵏ) | 极少使用,过拟合风险极高 |
# 使用 sklearn 构造多项式特征(2 阶)
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2, interaction_only=False, include_bias=False)
X_poly = poly.fit_transform(df[['factor_a', 'factor_b']])
# 输出列:factor_a, factor_b, factor_a^2, factor_a*factor_b, factor_b^2
实战建议:多项式特征应配合 L1/L2 正则化(Lasso/Ridge)使用,自动筛选有效的高阶项。在树模型(XGBoost、LightGBM)中,多项式特征通常不是必须的,因为树可以自动学习分段非线性。
4.6 交叉衍生流程与质量检查
下图展示了从原始变量到交叉衍生因子的完整工作流,包含质量检查节点:
质量检查清单(6 项):
- 缺失率:衍生后缺失率 < 20%,否则需填充或剔除。
- 极端值:检查 1% 和 99% 分位数,必要时做截尾或分箱。
- 相关性:与原始变量的 Pearson 相关性不宜超过 0.95,避免冗余。
- 平稳性:时间序列类衍生变量需通过 ADF 检验(p < 0.05)。
- 单调性:与目标变量的 IC(信息系数)应具有业务可解释的单调方向。
- 共线性:VIF(方差膨胀因子)< 10,否则考虑正交化或剔除。
4.7 实战案例:构造多因子交叉信号
以 A 股市场为例,从市值、动量、波动率三个原始因子出发,构造一组交叉衍生因子:
| 原始因子 | 交叉衍生 | 类型 | 业务含义 |
|---|---|---|---|
| 市值 + 动量 | 市值 × 动量(标准化后) | 乘积 | 大市值高动量的趋势强化效应 |
| 波动率 + 换手率 | 换手率 / 波动率 | 比率 | 流动性效率:高换手低波动为活跃信号 |
| 短期动量 − 长期动量 | Momentum_1m − Momentum_12m | 差值 | 短期反转强度 |
| 市值² + 市值×动量 | 多项式 2 阶 | 多项式 | 市值非线性暴露与交互效应 |
# 完整构造示例
import pandas as pd
import numpy as np
from scipy.stats import zscore
# 假设 df 包含原始因子列
df['size'] = zscore(df['market_cap'])
df['mom'] = zscore(df['momentum_12m'])
df['vol'] = zscore(df['volatility_60d'])
df['turn'] = zscore(df['turnover_20d'])
# 乘积
df['size_mom'] = df['size'] * df['mom']
# 比率(加平滑)
df['turn_vol_ratio'] = df['turn'] / (df['vol'] + 1e-6)
df['turn_vol_ratio'] = np.clip(df['turn_vol_ratio'], -5, 5)
# 差值
df['mom_short_long'] = zscore(df['momentum_1m']) - zscore(df['momentum_12m'])
# 多项式(2 阶)
df['size_sq'] = df['size'] ** 2
df['size_mom_sq'] = df['size'] * df['mom'] ** 2 # 高阶交互
# 质量检查:计算与下月收益的 IC
ic_values = {}
for col in ['size_mom', 'turn_vol_ratio', 'mom_short_long', 'size_sq']:
ic = df[[col, 'next_month_return']].corr().iloc[0, 1]
ic_values[col] = round(ic, 4)
print("IC 检查结果:", ic_values)
效率提示:在因子挖掘阶段,建议先构造 10~20 个有业务逻辑的交叉衍生,而不是盲目生成数百个组合。后续可通过特征重要性(如 LightGBM 的 feature_importance)或逐步回归筛选有效子集。
4.8 避坑指南与最佳实践
- 避免“厨房 sink”式衍生:每增加一个交叉项,多重比较的假阳性概率上升。建议使用 Bonferroni 校正或 FDR 控制。
- 警惕未来信息:构造差值或比率时,确保两个变量在时间上对齐,不要用未来数据计算当前因子。
- 分组验证:交叉衍生因子应在不同市值、行业、牛熊市分组中保持稳定的 IC 方向,避免过拟合特定区间。
- 可解释性优先:在量化策略中,一个业务含义清晰的比率因子(如 PE)往往比高阶多项式因子更稳健。
多变量交叉衍生是量化因子工程的核心环节,它从单变量描述跨越到多变量交互建模。掌握比率、乘积、差值与多项式四类方法,配合严格的质量检查流程,能够系统性地提升因子库的信息密度与预测效能。下一阶段,我们将进入因子分箱与离散化处理,将连续衍生变量转化为稳定的分类信号。