4. 特征工程入门

在Alpha研究中,特征工程决定了模型能看到什么。原始行情数据只有开高低收、成交量与成交额,而真正驱动预测能力的,是从这些原始字段中提炼出的可解释、可复用、可检验的因子。本节围绕五类核心特征展开,并给出中性化处理的工程实现思路。

一、核心原理:特征是对市场状态的压缩表达

量价特征刻画资金与价格的配合关系;波动率特征描述风险水平与不确定性;流动性特征衡量交易成本与冲击;动量与反转特征捕捉趋势延续或过度反应;中性化处理则剥离行业与市值带来的系统性暴露。五者共同构成从“原始数据”到“可建模信号”的桥梁。

特征工程五类核心对象与数据流 原始行情 OHLCV / 成交额 量价特征 量价背离 / 换手 VWAP偏离 波动率特征 已实现波动 / ATR 波动率变化 流动性特征 Amihud / 买卖价差 成交额分位 动量与反转 N日收益 / 排名 短期反转 中性化处理 行业哑变量回归 市值对数回归 Alpha因子矩阵 标准化 / 去极值 截面排序

二、方法流程:从字段到因子的标准管线

建议按以下顺序构建特征管线,避免信息泄露与量纲混乱:

  1. 数据对齐:统一交易日历,处理停牌与涨跌停,缺失值前向填充但限制最大天数。
  2. 特征计算:按量价、波动率、流动性、动量反转四类分别生成原始因子值。
  3. 去极值:采用MAD或分位数截断,防止极端值主导回归。
  4. 标准化:截面Z-score或排序百分位,使不同因子可比。
  5. 中性化:对行业哑变量与市值对数做回归,取残差作为最终因子。
  6. IC检验:计算因子与未来收益的Rank IC,筛选有效特征。
关键参数示例:动量窗口20日、波动率窗口20日、流动性窗口20日、中性化行业分类采用申万一级、市值取对数后回归。

三、案例场景:构建一个20日动量因子并中性化

假设我们已有一个包含股票代码、日期、收盘价、行业、总市值的DataFrame,下面用Python实现动量因子计算与中性化:

import pandas as pd
import numpy as np
import statsmodels.api as sm

# 1. 计算20日动量
df['mom_20'] = df.groupby('code')['close'].pct_change(20)

# 2. 去极值:MAD截断
def mad_clip(s, n=5):
    med = s.median()
    mad = (s - med).abs().median()
    return s.clip(med - n*1.4826*mad, med + n*1.4826*mad)

df['mom_20'] = df.groupby('date')['mom_20'].transform(mad_clip)

# 3. 标准化
df['mom_20_z'] = df.groupby('date')['mom_20'].transform(
    lambda x: (x - x.mean()) / x.std()
)

# 4. 行业与市值中性化
def neutralize(group):
    y = group['mom_20_z']
    X = pd.get_dummies(group['industry'], drop_first=True)
    X['ln_mktcap'] = np.log(group['mktcap'])
    X = sm.add_constant(X.astype(float))
    model = sm.OLS(y, X, missing='drop').fit()
    return model.resid

df['mom_20_neutral'] = df.groupby('date').apply(neutralize).reset_index(level=0, drop=True)

运行后,mom_20_neutral即为剥离行业与市值暴露后的纯净动量因子,可直接进入多因子合成或机器学习模型。

四、误区与复盘:中性化不是万能药

常见误区:中性化会移除部分有效信息。若行业轮动本身是Alpha来源,过度中性化会削弱收益。建议先检验原始因子IC,再决定是否中性化以及中性化程度。
  • 误区一:用全样本均值标准化,导致未来信息泄露。必须按截面日期分组计算。
  • 误区二:忽略停牌股,造成因子在停牌期间被错误填充。应标记停牌并排除。
  • 误区三:动量与反转窗口混用。短期(1-5日)常表现为反转,中期(20-60日)常表现为动量,需分别检验。
  • 误区四:流动性因子未考虑成交额分布。建议同时保留绝对成交额与截面分位数。
特征类别 典型因子 计算窗口 方向假设 中性化建议
量价特征 量价背离、VWAP偏离 5/20日 背离看反转 行业+市值
波动率特征 已实现波动、ATR 20日 低波动占优 行业+市值
流动性特征 Amihud非流动性 20日 低流动性溢价 市值必做
动量与反转 20日收益、5日反转 5/20日 中期动量、短期反转 行业+市值
复盘建议:每构建一个因子,先画因子分布图与IC时间序列,再检查与已有因子的相关性。相关性高于0.7的因子应合并或剔除,避免多重共线性。

特征工程不是一次性工作,而是伴随模型迭代持续优化的过程。掌握量价、波动率、流动性、动量反转四类特征的构造逻辑,并正确执行行业与市值中性化,才能为后续的Alpha模型提供干净、稳定、可解释的输入。