《如何从零搭建一套属于自己的量化系统》系列第15篇。
近期在下将开始连载《如何从零搭建一套属于自己的量化系统》系列,从基础概念到实战代码,一步步带你构建属于自己的交易利器。若道友对此感兴趣,敬请关注、点赞、转发三连,是对在下最大的支持!

(创作不易,感谢关注支持↑↑↑)
上一篇我们升级了数据“粮仓”。有了可靠的数据源,接下来就要施展“炼金术”了——从看似普通的原始数据中,提炼出真正能预测市场、驱动策略的“金子”,这就是特征工程 (Feature Engineering)。
在量化交易(尤其是机器学习驱动的量化)领域,流传着这样一句话:“数据和特征决定了模型的上限,算法和模型只是在不断逼近这个上限。” 这足以说明特征工程的核心地位!即使对于非ML策略,构造有效的技术指标、统计量,本质上也是特征工程。
好的特征,能让简单的模型发挥巨大威力;糟糕的特征,再强大的算法也回天乏术。今天,我们就来深入探索特征工程的“奇技淫巧”。
1. 特征的“藏宝图”:从哪里挖掘?
有效的特征可能隐藏在各个角落:
价格与成交量衍生特征 (技术指标进阶):移动平均类:EMA, DEMA, TEMA, KAMA (自适应移动平均)...动量与摆动类:ROC, MACD柱状图, RSI(不同周期/平滑方式), Stochastics (KD), CCI...波动率类:ATR (平均真实波幅), Bollinger Bands宽度, 历史波动率...成交量相关:OBV (能量潮), MFI (资金流向指数), VR (成交量比率)...价量组合:VWAP (成交量加权平均价), Klinger Oscillator...组合与变换:指标的指标(如RSI的均线)、指标之间的差值/比率、指标的N阶差分等。时间特征: 星期几、月份、年份、距离财报/除权日天数、交易时段(对日内)等。横截面特征 (Cross-sectional Features):个股指标在当日所有股票/板块内Rank排名。个股指标与行业/市场均值的偏离度(Z-Score标准化)。行业/板块动量、资金流向。基本面特征 (需精细处理):财务比率:PE(TTM), PB, PS, ROE, ROA, 负债率, 毛利率, 净利率...增长率:营收/利润同比/环比增长, N年复合增长...质量指标:盈利稳定性、现金流状况...处理技巧:去极值 (Winsorization)、标准化 (Standardization)、行业中性化 (Neutralization)。另类数据特征 (进阶):文本情绪:新闻/社交媒体情绪评分 (需NLP技术)。供应链数据、卫星图像、网络搜索指数等 (获取和处理难度大)。核心思想: 特征工程的目标是提取信息,降低噪声,将原始数据转化为更能反映市场潜在规律、对预测目标(如未来收益)更有解释力的变量。
2. “炼金术”手法:常用特征变换技巧
原始特征往往不能直接使用,需要进行变换:
① 标准化/归一化 (Scaling): 将不同量纲的特征放到可比较的尺度上。
StandardScaler (Z-Score): (X - mean) / std,使数据均值为0,方差为1。MinMaxScaler: (X - min) / (max - min),将数据缩放到[0, 1]或[-1, 1]区间。② 离散化/分箱 (Binning): 将连续特征转化为分类特征,可增强模型对非线性的捕捉能力,降低噪声影响。如将PE值分为“低估”、“合理”、“高估”三档。
③ 多项式与交叉特征 (Polynomial & Interaction): 通过特征的乘方或特征之间的相乘,创造新的非线性特征。如 `feat1 * feat2`。
④ 滞后特征 (Lagged Features): 使用过去N期的特征值作为当前输入。如用昨天的收盘价、前天的成交量等。`df[close_lag1] = df[close].shift(1)`。
⑤ 滚动窗口统计量 (Rolling Statistics): 计算过去N期窗口内的统计指标,如滚动均值、滚动标准差、滚动最大/最小值、滚动偏度/峰度等。`df[close_rol_std_20] = df[close].rolling(20).std()`。
3. “去粗取精”:特征筛选与降维
特征并非越多越好!过多的特征(尤其是不相关或冗余的特征)会增加模型复杂度、计算成本,并可能导致过拟合。需要进行筛选:
过滤法 (Filter Methods): 基于特征本身的统计属性进行筛选,独立于模型。方差阈值 (Variance Threshold): 剔除方差过小的特征(变化不大,信息量少)。相关性分析 (Correlation Analysis): 剔除与目标变量相关性过低的特征,或剔除特征之间相关性过高的冗余特征。(用于分类) 卡方检验 (Chi-squared), F检验 (ANOVA F-value)。包装法 (Wrapper Methods): 将特征选择过程看作一个搜索问题,用模型的性能作为评价标准。递归特征消除 (Recursive Feature Elimination, RFE): 反复训练模型,每次剔除最不重要的特征。嵌入法 (Embedded Methods): 在模型训练过程中自动进行特征选择。Lasso回归 (L1 Regularization): 通过L1正则项将不重要特征的系数压缩为0。基于树的模型 (如随机森林, GBDT) 的特征重要性评分 (Feature Importance)。降维 (Dimensionality Reduction): 将高维特征映射到低维空间,保留主要信息。主成分分析 (PCA): 寻找数据方差最大的方向。(注意:降维后的特征可解释性会变差)4. Python实战:特征生成与筛选示例 (概念)
以Pandas和Scikit-learn库为例,演示部分操作思路:
import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.feature_selection import SelectKBest, f_regression # 示例: 基于F检验选回归特征 from sklearn.ensemble import RandomForestRegressor # 示例: 用随机森林看特征重要性 # 假设df已有 close, volume 等基础数据, target 是预测目标(如下期收益率) # 1. 特征生成示例 df[return_5d] = df[close].pct_change(5) # 5日收益率 df[volatility_20d] = df[close].pct_change().rolling(20).std() # 20日滚动波动率 df[ma_diff_10_30] = df[close].rolling(10).mean() - df[close].rolling(30).mean() # 均线差值 df[volume_log] = np.log1p(df[volume]) # 成交量对数变换 (处理偏态) # (省略更多特征生成...) df.dropna(inplace=True) # 删除包含NaN的行 features = [return_5d, volatility_20d, ma_diff_10_30, volume_log] # 假设这是我们的特征集 target = target# 预测目标列名 X = df[features] y = df[target] # 2. 特征标准化示例 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) X_scaled = pd.DataFrame(X_scaled, columns=features, index=X.index) # 3. 特征筛选示例 (过滤法: 选最好的2个特征) selector_kbest = SelectKBest(score_func=f_regression, k=2) X_kbest = selector_kbest.fit_transform(X_scaled, y) selected_features_kbest = X.columns[selector_kbest.get_support()] print(f"\nKBest选择的特征: {selected_features_kbest.tolist()}") # 4. 特征筛选示例 (嵌入法: 随机森林特征重要性) rf = RandomForestRegressor(n_estimators=100, random_state=42, n_jobs=-1) rf.fit(X_scaled, y) feature_importances = pd.Series(rf.feature_importances_, index=features).sort_values(ascending=False) print("\n随机森林特征重要性排序:") print(feature_importances)这只是冰山一角,实际的特征工程会复杂得多,需要反复试验和验证。
特征工程的“诅咒”:过拟合与未来函数!
特征工程是过拟合的重灾区!
数据挖掘偏差: 在同一数据集上尝试过多特征组合,很容易找到“假阳性”的规律。未来函数引入: 特征计算中不小心使用了未来的信息(如用当日最高/最低价计算用于盘中决策的指标)。极其危险!验证不足: 构造的特征必须经过严格的样本外测试,验证其在未知数据上的有效性和稳定性。原则: 优先选择有经济学/金融学逻辑支撑的特征,对纯数据挖掘产生的特征保持高度警惕!
小结
特征工程是量化策略研发中极具艺术性和挑战性的一环,它直接决定了策略的潜力上限。掌握丰富的特征构造方法、变换技巧以及科学的筛选流程,是中阶量化修炼者的必备技能。但同时,也要时刻警惕过拟合与未来函数的陷阱。
你认为哪些类型的特征在你的实践中最有效?在特征工程方面,你踩过哪些坑或者有什么独门秘籍?欢迎在评论区分享你的“炼金术”心得!
#量化入门教程