在金融 ML 里,特征工程的产出效率是模型调参的数倍:把领域知识编码进特征,比让模型自己从原始数据里挖更省样本、更抗过拟合。本篇按三个构造维度组织手册,再处理两个生死问题:泄漏与稳定性。
维度一:时序特征——把一条序列变成一组统计量
对每个原始变量(价格、量、波动、财务指标),构造多窗口统计家族:
- 动量族:
ret_5/20/60(多窗口收益)、price/ma20 − 1(相对均线偏离); - 波动族:
std_20、std_20/std_60(波动变化率)、下行波动占比; - 位置族:当前价在 60 日高低区间的分位、距离前高的天数;
- 结构族:收益率偏度/峰度(20 日)、上涨天数占比、连续同向天数;
- 变化率族:换手率的环比/同比——「变量本身」与「变量的变化」是不同的信息(水平值慢、变化快)。
设计原则:窗口族化(每个核心变量给 3–5 个窗口,让树模型自己学哪档有效)优于单窗口精调;语义命名(reversal_5d 而不是 x37)——特征可解释性是后来排查泄漏与失效的线索。
维度二:截面特征——把「绝对水平」变成「相对位置」
原始值(市值 500 亿)对横截面预测几乎无意义,有意义的是相对位置:
- 分位数:行业内 rank/percentile——消除行业与规模量纲,树模型对这类 [0,1] 特征极其友好(见因子构建 的标准化);
- 相对偏离:个股值 − 行业中位(财务比率的行业差);
- 分组哑变量 / 序数编码:市值五分位组、风格组标签;
- 截面条件特征:「低估值 AND 高质量」的双条件标记——把组合逻辑显式编码为特征。
截面的正确打开方式还有时变基准:所有截面操作按「当日截面」计算(不是全样本)——这既是统计正确性也是泄漏防线(见下文)。
维度三:交叉特征——编码交互假设
树模型理论上能自动学交互(分裂路径即交互),但显式构造语义交互更省样本也更稳:
- 量价交互:
量变化 × 价变化(放量上涨 vs 缩量上涨,经典四象限); - 波动 × 估值:低波 × 低估值(双低风险结构);
- 资金 × 动量:北向流入 × 前期滞涨(资金抢筹滞涨股);
- 时间交互:财报临近度 × 预期差(事件窗口的条件因子)。
每条交叉特征都应有一个经济学假设写在注释里——「这组交互可能捕捉什么」回答不了的交叉特征,过拟合风险大于信息价值。
特征泄漏:六种形态与防线
泄漏(label leakage)是金融 ML 的第一死因——模型「通过未来作弊」,样本外必然现形。六种形态:
- 时间泄漏:特征窗口包含标签期(用 20 日收益做标签,特征却含当日后的数据)——防线:特征与标签的时间区间严格不相交 + 逐特征审计可知时点;
- 截面泄漏:用全样本统计量标准化(全期均值/方差含未来)——防线:一切统计按「当日截面」或「滚动至当日」(见统计推断 的口径纪律);
- 幸存者泄漏:股票池用今天的成分回测历史——防线:动态当时在市池(见数据清洗 );
- 处理泄漏:用全样本拟合的 scaler/PCA/编码器进入回测——防线:一切「拟合型」变换只能在训练区拟合、滚动应用(Walk-Forward 的思想下沉到特征层,见Walk-Forward );
- 标签工程泄漏:标签用了未来才知的信息(如「未来 20 日是否 ST」含披露滞后)——防线:标签也要 PIT 化;
- 选择泄漏:特征筛选用全样本重要性挑出的特征再进 CV——防线:特征筛选嵌进 CV 循环内(每折只用自己的训练区筛特征)。
泄漏的体检法:构造「打乱标签」的对照实验——把标签随机重排后重新训练,若模型绩效仍然不错(如重要性前特征仍显著),特征里几乎必有泄漏。
特征稳定性:时间维度的体检
金融特征的时间稳定性与预测力同等重要:
- 重要性漂移:滚动窗口重训,特征重要性的排名方差——重要性暴涨暴跌的特征是「噪声探测器」(它在拟合每个窗口的独特噪声);
- 单调性检查:特征与收益的关系(分箱收益)跨期是否保持方向——方向翻转的特征要么做状态条件处理、要么剔除(与因子失效监控同构,见因子库 );
- 覆盖率与缺失模式:特征的覆盖度随时间的漂移(另类数据早期覆盖稀疏)——覆盖率突变的时期单独检验。
特征库的管理与因子库同构(版本、元数据、血缘——见因子存储 ),特征是因子的高维延伸,管理纪律不因形态变花哨而放松。