背景知识:特征工程常见陷阱

量化中 80% 的 Alpha 来自特征工程,但 80% 的失败也来自特征工程。


陷阱一:未来信息泄漏

问题:特征计算中意外使用了未来数据。

# 错误示例:用当日收盘价计算的指标,在当日开盘时做决策
df['ma20'] = df['close'].rolling(20).mean()  # 包含当日收盘
signal = df['close'] > df['ma20']  # 用当日收盘判断

# 正确做法:shift(1) 确保只用历史数据
df['ma20'] = df['close'].rolling(20).mean().shift(1)
signal = df['close'] > df['ma20']

检测方法

  • 特征与标签相关性 >0.9 → 很可能泄漏
  • 模型准确率 >90% → 几乎一定泄漏

陷阱二:全局归一化

问题:用整个数据集的统计量归一化,泄漏了未来分布信息。

# 错误示例
mean = df['close'].mean()  # 包含未来数据
std = df['close'].std()
df['normalized'] = (df['close'] - mean) / std

# 正确做法:滚动窗口归一化
df['normalized'] = (
    (df['close'] - df['close'].rolling(20).mean()) /
    df['close'].rolling(20).std()
)

陷阱三:高相关特征冗余

问题:多个特征高度相关,信息冗余且增加过拟合风险。

特征组相关性问题
MA5, MA10, MA200.95+几乎相同的信息
RSI, Stochastic0.8+都衡量超买超卖
Close, VWAP0.99几乎相同

解决方案

  • 相关性 >0.7 的特征只保留一个
  • 使用 PCA 降维
  • 选择最有解释力的代表

陷阱四:过度拟合噪音

问题:特征越多,越容易记住训练数据的噪音。

特征数量 vs 样本数量的经验法则:

样本数 / 特征数 >`2`0   安全区
样本数 / 特征数 = 10   警戒区
样本数 / 特征数 < 5    危险区

例:1000 个样本,最多用 50 个特征

解决方案

  • 递归消除特征,观察验证集表现
  • 使用 L1 正则化自动筛选
  • 领域知识优先于统计显著

陷阱五:类别特征编码错误

问题:对类别特征的错误处理导致信息丢失或虚假关系。

# 错误示例:直接用数字编码(暗示了顺序关系)
sector_map = {'Technology': 1, 'Healthcare': 2, 'Finance': 3}
df['sector'] = df['sector_name'].map(sector_map)  # 模型会认为 3 >`2` >`1`

# 正确做法:One-Hot 编码
df = pd.get_dummies(df, columns=['sector_name'])

陷阱六:时间相关性忽略

问题:特征在不同时间段的预测力不稳定。

时期动量因子 IC价值因子 IC
2015-20170.050.02
2018-20190.010.04
2020-20210.06-0.02

解决方案

  • 使用滚动 IC 而非单一 IC
  • IC 稳定性(IC/std(IC))比 IC 绝对值更重要
  • 考虑 Regime 条件下的特征效果

陷阱七:数据窥探

问题:反复测试直到找到"有效"特征,实际是过拟合。

测试 100 个特征
 期望 5 个在 p<0.05 水平"显著"
  5 个可能只是随机噪音

解决方案

  • 使用 Bonferroni 校正:p 值阈值 = 0.05 / 测试数量
  • 保留独立的 OOS 数据集
  • 记录所有测试过的特征,不只是"成功"的

陷阱八:忽略交易成本影响

问题:高频换手的特征在实盘中被成本吞噬。

特征 A:IC = 0.05,换手率 200%/
特征 B:IC = 0.03,换手率 50%/

假设单边成本 0.2%
特征 A 成本:200% × 0.2% × 2 = 0.8%/
特征 B 成本:50% × 0.2% × 2 = 0.2%/

扣除成本后,特征 B 可能更优

特征工程检查清单

检查项通过标准
无未来信息所有特征用 shift(1) 或更早数据
滚动归一化不使用全局均值/标准差
低相关性特征间相关性 < 0.7
样本比例样本数 / 特征数 >20
IC 稳定性IC / std(IC) >0.5
成本可行扣除换手成本后仍有正收益
Cite this chapter
Zhang, Wayland (2026). 特征工程常见陷阱. In AI Quantitative Trading: From Zero to One. https://waylandz.com/quant-book/特征工程常见陷阱
@incollection{zhang2026quant_特征工程常见陷阱,
  author = {Zhang, Wayland},
  title = {特征工程常见陷阱},
  booktitle = {AI Quantitative Trading: From Zero to One},
  year = {2026},
  url = {https://waylandz.com/quant-book/特征工程常见陷阱}
}