3. 特征选择入门

在金融建模中,我们常面对成百上千个候选变量:财务比率、行情因子、宏观指标、文本情绪得分、另类数据衍生特征。把它们全部塞进模型,往往不会带来更好的预测,反而会引入噪声、加剧过拟合、抬高计算成本,并让模型解释变得困难。特征选择要解决的核心问题就是:在保持甚至提升模型泛化能力的前提下,从原始特征集合中挑选出最有信息量的子集。它与降维(如PCA)不同,降维生成新特征,而特征选择保留原始特征的物理含义,这对金融场景中的可解释性与合规审查尤为关键。

一句话定义:特征选择是一个搜索与评估过程,目标是在给定学习算法和评价指标下,找到使泛化误差最小、同时特征数量尽量少的特征子集。

一、核心原理:为什么“少即是多”

特征选择的有效性来自三个层面。第一,偏差—方差权衡:无关特征会增加模型方差,尤其在样本量有限的金融数据中,噪声特征容易被模型“记住”。第二,信息冗余:高度相关的特征提供重复信息,既增加共线性风险,也稀释重要变量的权重。第三,计算与解释成本:特征越多,训练、调参、监控和上线维护的成本越高,而金融模型往往需要向风控、合规和业务方解释每个变量的作用。

因此,特征选择不是简单地“删掉没用的列”,而是一个与模型目标、数据分布、业务约束紧密耦合的决策过程。下面这张图概括了三大类方法在“评估方式”和“与模型关系”上的本质差异。

三类特征选择方法:评估逻辑与模型耦合度 过滤法 Filter 独立于模型 统计指标打分排序 方差 / 卡方 / 互信息 相关系数 / IV值 速度快、可解释 忽略特征间交互 适用:高维初筛、快速基线 包裹法 Wrapper 以模型表现为准则 前向 / 后向 / 递归消除 子集搜索 + 交叉验证 RFE / 序列特征选择 考虑交互、效果好 计算昂贵、易过拟合 适用:中小规模、追求精度 嵌入法 Embedded 训练中自动完成 L1 / L2 正则化 树模型特征重要性 弹性网络 / 梯度提升 效率与效果平衡 依赖模型假设 适用:大规模、端到端建模 模型耦合度:低 ————————————————→ 高

二、过滤法:先打分,再筛选

过滤法的思路最直接:用统计指标给每个特征单独打分,按分数排序后保留前K个或超过阈值的特征。它完全不依赖下游模型,因此计算快、可并行、易于解释。常见指标包括:

  • 方差过滤:删除取值几乎不变的特征,如常数或近常数变量。
  • 卡方检验:衡量类别型特征与分类标签之间的独立性,适合离散特征。
  • 互信息:捕捉非线性相关,对连续和离散特征都适用。
  • 相关系数 / IV值:金融风控中常用IV筛选变量,同时用相关系数剔除共线性。

下面是一个使用方差和互信息做初筛的示例:

from sklearn.feature_selection import VarianceThreshold, mutual_info_classif
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=1000, n_features=50, n_informative=10, random_state=42)

# 1) 删除低方差特征
vt = VarianceThreshold(threshold=0.01)
X_var = vt.fit_transform(X)
print("方差过滤后特征数:", X_var.shape[1])

# 2) 互信息打分,保留前15个
mi = mutual_info_classif(X_var, y, random_state=42)
idx = mi.argsort()[::-1][:15]
X_sel = X_var[:, idx]
print("互信息筛选后特征数:", X_sel.shape[1])
适用场景:特征维度极高(如数千个因子)、需要快速建立基线模型、或作为包裹法/嵌入法之前的预处理步骤。过滤法尤其适合在数据探索阶段快速识别明显无效的变量。

三、包裹法与嵌入法:让模型参与选择

包裹法把特征选择看作一个搜索问题:不断尝试不同的特征子集,用模型在验证集上的表现来评价子集好坏。典型方法有前向选择、后向消除和递归特征消除(RFE)。它的优点是能捕捉特征之间的交互作用,往往能选出更紧凑、更有效的子集;缺点是计算量大,且在小样本上容易过拟合验证集。

嵌入法则把特征选择嵌入到模型训练过程中。L1正则化(Lasso)通过稀疏化权重自动将部分系数压为零;树模型在分裂时根据信息增益或基尼不纯度选择特征,训练完成后可直接输出特征重要性。嵌入法在效率与效果之间取得较好平衡,是金融建模中最常用的方案之一。

方法类别 评估依据 计算成本 是否考虑特征交互 典型金融场景
过滤法 统计指标(方差、互信息、IV) 低 否 因子库初筛、信用评分变量预选
包裹法 模型交叉验证表现 高 是 中小规模量化策略、追求精度的场景
嵌入法 正则化或树分裂重要性 中 部分 大规模风控模型、端到端机器学习流水线

四、误区与复盘:特征选择不是“一劳永逸”

在实际项目中,特征选择最常见的误区有三个。第一,在全部数据上做选择再划分训练测试集,这会造成数据泄露,使验证结果虚高。正确做法是把特征选择放入交叉验证的每一折中,或至少在训练集上完成选择后再应用到测试集。第二,盲目追求特征数量最少,忽略了业务可解释性和稳定性。某些变量虽然统计贡献不高,但在极端行情下具有风险指示作用,不应轻易删除。第三,只做一次选择就固定不变,而金融市场的数据分布会随时间漂移,特征重要性也会变化,需要定期复盘和滚动验证。

复盘清单:
  • 特征选择是否在训练集内完成,测试集是否保持“未见”状态?
  • 是否同时评估了模型精度、特征数量和稳定性三个维度?
  • 被删除的特征是否有业务上的强制保留要求?
  • 特征重要性是否随时间发生显著漂移?
  • 最终子集是否经过多折交叉验证和样本外测试?