3. 金融数据特点

在金融场景中做 Stacking 与 Blending,最大的误区是把它当成一次普通的 Kaggle 表格竞赛:把数据随机切分、堆叠几层模型、调一调超参就收工。金融数据的五个核心特点——时序性、非平稳性、噪声、缺失值、类别不平衡——会从数据切分、基模型选择、元特征构造到最终评估,逐层破坏集成的有效性。本节先建立这五个特点与集成方法之间的因果链,再给出可落地的应对策略。

一、核心原理:五个特点如何"攻击"集成结构

Stacking 的本质是让元模型学习"基模型在何种样本上更可信"。这个学习过程依赖两个假设:样本之间近似独立同分布,且元特征与标签的关系在训练集与验证集上保持一致。金融数据恰恰同时违反这两点。

  • 时序性:样本存在自相关,随机 K 折会让未来信息泄漏到过去。元模型会学到"未来才知道的模式",回测虚高、实盘崩塌。
  • 非平稳性:分布随时间漂移,基模型的误差结构也在漂移。元模型在旧 regime 上学到的权重,在新 regime 上可能完全反向。
  • 噪声:信噪比极低,单模型容易过拟合噪声。集成本应降方差,但若基模型误差高度相关,Stacking 反而放大共同偏差。
  • 缺失值:金融数据缺失往往非随机(如停牌、未披露),缺失本身携带信息。若在集成前统一填充,会抹掉这一信号,并让各基模型看到同一份"被污染"的输入。
  • 类别不平衡:违约、欺诈、极端涨跌等正例稀少。若在每折内不做分层,某些折可能几乎没有正例,元特征分布剧烈波动,元模型难以稳定收敛。

关键判断:在金融集成中,"如何切分数据"比"选哪个元模型"更重要。切分方式决定了元特征是否可信,而元特征的可信度决定了整个 Stacking 的上限。

二、方法流程:面向金融数据的集成改造

下面给出一个可复用的流程骨架,核心思想是用时间序列交叉验证替代随机 K 折,并在每一折内部独立处理缺失与不平衡。

  1. 按时间排序并划分:先切出训练段、验证段、测试段,禁止跨时间段随机打乱。
  2. 构造时序折:使用 expanding window 或 rolling window 生成 OOF(out-of-fold)元特征。
  3. 折内独立预处理:缺失值填充、标准化、重采样等只在当前折的训练部分 fit,再 transform 到验证部分。
  4. 基模型多样化:在线性模型、树模型、时序模型之间制造误差结构差异,降低误差相关性。
  5. 元模型轻量化:优先使用带正则的线性模型或浅层树,避免在噪声元特征上二次过拟合。
  6. 滚动评估:用多个时间窗口重复评估,观察集成收益是否稳定,而非只看单次回测。
# 时序 OOF 元特征构造示意(expanding window)
import numpy as np
from sklearn.base import clone

def time_series_oof(models, X, y, n_splits=5):
    n = len(X)
    fold_size = n // (n_splits + 1)
    oof = np.zeros((n, len(models)))
    for i, model in enumerate(models):
        for k in range(1, n_splits + 1):
            train_end = fold_size * k
            val_end = fold_size * (k + 1)
            X_tr, y_tr = X[:train_end], y[:train_end]
            X_val = X[train_end:val_end]
            m = clone(model).fit(X_tr, y_tr)
            oof[train_end:val_end, i] = m.predict_proba(X_val)[:, 1]
    return oof
# 注意:缺失填充与重采样必须放在每个 fold 内部,不能提前对全量数据做

三、可视化:五类数据特点对集成链路的影响路径

金融数据特点 → 集成链路影响图 时序性 非平稳性 噪声 缺失值 类别不平衡 数据切分 / OOF 构造 基模型误差结构 元特征信噪比 折内预处理一致性 元模型收敛稳定性 信息泄漏 / 回测虚高 集成收益不稳定 实盘表现崩塌

四、案例与场景:一个违约预测的集成复盘

某消费金融团队用 Stacking 做违约预测,基模型为逻辑回归、XGBoost、LSTM,元模型为逻辑回归。第一版采用随机 5 折,AUC 达到 0.86,上线后一个月跌到 0.71。复盘发现三个问题:

问题表现根因修正
随机切分 OOF 元特征过于乐观 未来样本泄漏到训练折 改为 expanding window 时序折
全局填充缺失 缺失率高的客群预测偏移 填充统计量含未来信息 折内 fit 填充器,并加入缺失指示特征
未处理不平衡 元模型偏向多数类 部分折正例过少 折内分层 + 类别权重,元模型用带权逻辑回归

修正后,单次回测 AUC 降到 0.81,但滚动 6 个窗口的 AUC 稳定在 0.78~0.82,上线后实际表现与回测差距缩小到 0.03 以内。这说明:集成在金融场景中的目标不是把回测刷到最高,而是让回测与实盘的一致性最大化。

五、常见误区与检查清单

误区一:先对全量数据做缺失填充和标准化,再交给 Stacking。这会让每一折的验证集都"见过"全局统计量,等价于轻度泄漏。

误区二:认为基模型越多越好。在低信噪比数据上,增加高度相关的基模型只会抬高元特征维度,加剧元模型过拟合。

误区三:用随机 K 折的 OOF 分数直接当作实盘预期。时序数据的 OOF 分数天然偏乐观,必须用滚动窗口重新校准。

落地检查清单:

  • 切分是否严格按时间?是否存在任何跨时间的随机打乱?
  • 缺失填充、编码、标准化是否都在折内 fit?
  • 是否加入了缺失指示特征,保留缺失的非随机信息?
  • 每折的正负样本比例是否可接受?是否需要分层或权重?
  • 基模型之间的误差相关性是否足够低?
  • 元模型是否足够简单,是否带正则?
  • 是否用多个时间窗口验证集成收益的稳定性?

把这五个数据特点当作集成设计的前置约束,而不是事后补救的清洗步骤,Stacking 与 Blending 才能在金融场景中真正产生可复现、可上线的增益。