4. 金融数据预处理

在AutoML金融模型自动搜索中,数据预处理不是“清洗一下再喂给模型”的附属步骤,而是决定搜索空间有效性与评估结果可信度的前置约束。金融数据具有低信噪比、非平稳、强时序依赖和极端事件频发等特征,若预处理与验证设计不当,AutoML会快速过拟合到被泄漏的未来信息上,给出虚高的搜索评分。本节围绕五个关键环节展开:缺失值处理、异常值检测、标准化、时序交叉验证与数据泄漏防范。

一、核心原理:预处理是搜索空间的一部分

AutoML的搜索对象不仅是模型结构与超参数,还包括预处理管线。缺失值填充策略、异常值截断阈值、标准化窗口长度,都会改变特征分布,从而改变模型评分。因此,预处理必须与模型搜索在同一套时序验证框架内评估,而不能在搜索前用全量数据“一次性”完成。

关键原则:任何使用未来数据计算的统计量(均值、方差、分位数、缺失率)都不得回填到过去样本。预处理参数必须由训练窗口拟合,再应用到验证窗口。

下图展示了金融时序预处理与验证的数据流关系:原始行情经过缺失与异常处理后,标准化参数仅在训练窗口拟合,再分别变换训练段与验证段,最终进入时序交叉验证。

金融时序预处理与验证数据流 原始行情/因子 价格·成交量·财务 缺失值处理 前向填充·插值 异常值检测 MAD·分位数截断 标准化 训练窗口拟合 时序交叉验证(滚动窗口) 训练窗口 T1 拟合标准化参数 验证窗口 V1 仅变换,不拟合 滚动至 T2/V2 重复评估

二、方法流程:五步预处理管线

  1. 缺失值处理:金融数据缺失常源于停牌、非交易日、财报未披露。价格类优先前向填充,因子类可用滚动中位数或行业截面中位数填充,并附加缺失指示列。
  2. 异常值检测:收益率用MAD或滚动分位数识别极端值,成交量用对数变换后检测。异常值应截断而非直接删除,避免破坏时序连续性。
  3. 标准化:时序模型用滚动Z-score或滚动Min-Max;截面模型用当日截面排序或去极值标准化。参数只在训练窗口拟合。
  4. 时序交叉验证:采用扩展窗口或滚动窗口,保证训练集时间早于验证集,验证集之间不重叠。
  5. 数据泄漏检查:逐特征审计计算窗口,确认无未来信息进入训练段。

三、案例场景:滚动窗口标准化与验证

假设使用过去60个交易日预测未来5日收益。标准化参数必须仅由训练窗口计算,再应用到验证窗口。以下代码展示了正确的滚动标准化与时序切分逻辑:

import numpy as np
import pandas as pd

def rolling_zscore(series, window=60):
    mean = series.rolling(window).mean()
    std = series.rolling(window).std()
    return (series - mean) / std

# 时序切分:训练在前,验证在后
def time_split(df, train_end, val_end):
    train = df.iloc[:train_end]
    val = df.iloc[train_end:val_end]
    return train, val

# 正确:标准化参数仅由训练窗口拟合
train, val = time_split(data, 800, 1000)
mu, sigma = train['factor'].mean(), train['factor'].std()
train['factor_z'] = (train['factor'] - mu) / sigma
val['factor_z'] = (val['factor'] - mu) / sigma  # 使用训练参数
常见错误:先对全量数据做标准化再切分,导致验证集统计量泄漏到训练集。正确做法是先切分,再在训练集上拟合变换参数。

四、误区与复盘

误区 后果 修正策略
全量数据标准化后再切分 验证集信息泄漏,评分虚高 先切分,训练窗口拟合参数
随机K折交叉验证 未来样本进入训练,时序泄漏 改用滚动/扩展窗口时序CV
异常值直接删除 破坏时序连续性,样本偏差 截断或缩尾处理
缺失值用全局均值填充 引入未来信息,分布失真 滚动统计量或前向填充
验证集与训练集重叠 评估结果不可信 设置purge gap隔离期
复盘建议:在AutoML搜索前,先固定一套时序验证协议,并将预处理步骤纳入搜索空间。每次搜索完成后,检查特征计算窗口是否严格早于标签窗口,确认无泄漏后再比较模型评分。

综上,金融数据预处理的核心不是“把数据变干净”,而是“在时序约束下构造可信的训练与验证边界”。缺失值、异常值、标准化都必须服从训练窗口拟合、验证窗口变换的原则;时序交叉验证与泄漏防范则是保障AutoML搜索结论有效性的最后防线。只有预处理与验证协议同时正确,自动搜索出的金融模型才具备真实泛化能力。