4、变量衍生基础:衍生变量的意义、常见衍生方法(滞后、差分、滚动统计)
原始因子数据往往只包含某一时刻的截面信息,缺乏时间序列上的动态特征。变量衍生(Feature Engineering)正是通过数学变换,从原始变量中提取出更具预测能力的新变量,从而捕捉市场微观结构、趋势动量与波动聚集等非线性规律。本节将系统阐述衍生变量的核心价值,并逐一讲解三种最基础的衍生方法:滞后、差分与滚动统计。
4.1 衍生变量的意义
在量化因子研究中,原始数据通常以“时间 × 股票”的矩阵形式存在。直接使用原始值作为因子,往往存在以下局限:
- 信息滞后性:当前价格已包含历史信息,但原始值无法直接反映变化趋势。
- 缺乏动态视角:截面比较只能看到相对强弱,无法刻画个股自身的时间序列行为。
- 噪声干扰:单期数据受微观结构噪声影响大,需要平滑或差分来提取信号。
核心观点: 变量衍生的本质是将“静态截面”转化为“动态时序特征”,使因子能够同时包含水平、趋势、波动与周期信息,从而提升IC(信息系数)的稳定性与显著性。
下表总结了原始变量与衍生变量在信息维度上的差异:
| 维度 | 原始变量 | 衍生变量 |
|---|---|---|
| 时间信息 | 仅当前时刻 | 包含历史窗口信息 |
| 趋势捕捉 | 无 | 差分、移动平均可提取趋势 |
| 波动刻画 | 无 | 滚动标准差可度量波动 |
| 噪声水平 | 高(单点噪声) | 低(平滑或差分后更稳定) |
| IC贡献 | 短期不稳定 | 中长期更显著 |
4.2 常见衍生方法
以下三种方法构成了变量衍生的基石,几乎所有高阶衍生(如动量因子、反转因子、波动率因子)都建立在此基础之上。
4.2.1 滞后(Lag)
滞后操作将当前时刻的变量向后平移若干期,用于对齐不同时间点的数据,或构造自回归特征。其数学表达式为:
Lag(X, k) = X_{t - k}
其中 k 为滞后阶数。在量化研究中,滞后变量常用于:
- 构造自回归因子:用过去收益预测未来收益。
- 对齐不同频率数据:将日频因子与月频收益对齐。
- 避免未来信息:确保因子在回测时只使用已知数据。
实战注意: 滞后阶数
k 的选择需结合数据频率与信号衰减速度。日频数据常用 k=1~5,周频数据常用 k=1~2。过大的 k 会导致信息衰减严重,IC 趋于零。
4.2.2 差分(Difference)
差分计算相邻两期或多期之间的变化量,用于消除趋势、提取增量信息。一阶差分公式为:
Diff(X, 1) = X_t - X_{t-1}
高阶差分(如二阶差分)可捕捉加速度信息:
Diff(X, 2) = (X_t - X_{t-1}) - (X_{t-1} - X_{t-2})
差分变量的典型应用场景:
- 价格收益率:对数价格的一阶差分即为对数收益率。
- 成交量变化:成交量差分可反映资金进出强度。
- 因子动量:因子值本身的差分可作为因子变化的代理变量。
避坑提示: 差分操作会减少有效样本量(每阶差分损失一期数据)。对于短时间序列(如上市不足一年的股票),过度差分可能导致样本不足,IC 估计不稳定。
4.2.3 滚动统计(Rolling Statistics)
滚动统计在固定长度的时间窗口内计算统计量,是最常用的平滑与特征提取方法。常见滚动统计量包括:
| 统计量 | 公式(窗口长度 N) | 捕捉的信息 |
|---|---|---|
| 滚动均值 | MA = (1/N) * Σ X_{t-i} | 趋势方向与平均水位 |
| 滚动标准差 | Std = sqrt( (1/N) * Σ (X_{t-i} - MA)² ) | 波动率与风险水平 |
| 滚动最大值 | Max = max(X_{t-1}, ..., X_{t-N}) | 近期极值压力位 |
| 滚动最小值 | Min = min(X_{t-1}, ..., X_{t-N}) | 近期极值支撑位 |
| 滚动偏度 | Skew = (1/N) * Σ ((X_{t-i} - MA) / Std)³ | 分布不对称性 |
| 滚动峰度 | Kurt = (1/N) * Σ ((X_{t-i} - MA) / Std)⁴ - 3 | 尾部风险与极端值频率 |
窗口长度 N 的选择直接影响衍生变量的性质:
- 短窗口(N=5~10):对短期变化敏感,适合捕捉反转信号。
- 中窗口(N=20~60):平衡平滑与响应速度,适合趋势跟踪。
- 长窗口(N=120~250):强平滑,适合刻画长期均值回归特征。
4.3 衍生方法的组合应用
在实际因子研究中,单一衍生方法往往不足以充分提取信息。更常见的做法是将三种方法组合使用,形成复合衍生变量。以下是一个典型的组合流程:
- 原始数据:日频收盘价
Close_t。 - 一阶差分:计算日收益率
Ret_t = Close_t / Close_{t-1} - 1。 - 滚动统计:对收益率计算 20 日滚动均值
MA_Ret_t与滚动标准差Std_Ret_t。 - 滞后:将
MA_Ret_t滞后 1 期,避免未来信息,得到因子Factor_t = MA_Ret_{t-1}。 - 二次衍生:对
Std_Ret_t再做差分,得到波动率变化量Delta_Vol_t。
组合衍生示例代码(Python 伪代码):
import pandas as pd
import numpy as np
# 假设 df 包含股票日频收盘价,index 为日期,columns 为股票代码
close = df['Close']
# 1. 差分:计算日收益率
ret = close.pct_change()
# 2. 滚动统计:20日滚动均值与标准差
ma_ret = ret.rolling(window=20).mean()
std_ret = ret.rolling(window=20).std()
# 3. 滞后:将滚动均值滞后1期,避免未来信息
factor = ma_ret.shift(1)
# 4. 二次衍生:波动率变化量
delta_vol = std_ret.diff()
# 最终因子矩阵
final_factor = pd.DataFrame({
'momentum_factor': factor,
'vol_change': delta_vol
})
4.4 衍生变量的IC分析要点
生成衍生变量后,必须通过IC分析验证其有效性。以下是针对衍生变量的IC分析要点:
- 滞后阶数敏感性:不同滞后阶数的IC可能差异显著,建议扫描 k=1~20 的IC序列,选择峰值对应的阶数。
- 窗口长度优化:滚动窗口 N 过小则噪声大,过大则信号迟钝。可通过滚动IC(Rolling IC)观察不同 N 下的IC稳定性。
- 多重共线性:多个衍生变量之间可能存在高度相关(如滚动均值与原始变量的滞后),需进行相关性检验或使用PCA降维。
- 衰减速度:差分变量的IC通常衰减较快(信息快速被市场吸收),滚动统计量的IC衰减较慢(趋势信息更持久)。
最佳实践: 在构建因子库时,建议对每个原始变量生成一组标准衍生变量(滞后1/5/20、差分1/5、滚动均值5/20/60、滚动标准差5/20/60),然后通过IC筛选与相关性分析,保留最有效的5~10个衍生变量进入最终模型。