3. 量化模型概览
在量化交易中,时间序列建模的核心目标是利用历史价格、成交量、宏观指标等有序数据,预测未来收益、波动率或风险状态。不同模型对数据规律、非线性关系与计算资源的要求差异巨大。本节将量化模型分为统计模型、机器学习模型与深度学习模型三大类,梳理其原理、适用场景与在交叉验证中的关键差异,为后续实战打下选型基础。
一、核心原理:三类模型如何理解时间序列
统计模型假设时间序列由可解释的随机过程生成,强调平稳性、自相关与误差结构。典型代表包括ARIMA、GARCH、VAR与状态空间模型。它们参数少、可解释性强,适合捕捉线性趋势、季节性与波动聚集,但对非线性与高维交互的刻画能力有限。
机器学习模型将时间序列转化为监督学习问题,通过特征工程构造滞后项、滚动统计量、技术指标等,再使用树模型、支持向量机或集成方法进行预测。其优势在于自动捕捉非线性关系与特征交互,对缺失值和异常值相对稳健,但依赖特征质量,且容易在时序数据上因随机划分而泄露未来信息。
深度学习模型直接对序列结构建模,如RNN、LSTM、GRU、TCN与Transformer。它们能端到端学习长程依赖与复杂模式,适合高频、多因子或跨资产场景,但需要大量数据、算力与调参经验,且黑箱特性增加了过拟合与解释难度。
二、方法流程:从数据到模型评估的通用链路
无论选择哪类模型,量化时间序列建模都遵循一条通用流程。理解这条链路,有助于在交叉验证中正确划分数据、构造特征与评估模型。
- 数据获取与清洗:对齐时间戳、处理缺失值、剔除异常价格,确保序列按时间严格排序。
- 平稳性检验与变换:使用ADF、KPSS检验判断平稳性,必要时进行差分、对数变换或波动率标准化。
- 特征工程:构造滞后收益、滚动均值/标准差、动量、换手率、宏观因子等。注意所有特征只能使用当前及过去信息。
- 模型训练与验证:采用滚动窗口或扩展窗口交叉验证,避免随机K-Fold造成未来信息泄露。
- 评估与回测:使用IC、RankIC、夏普比率、最大回撤等指标,结合交易成本进行样本外回测。
关键原则:时间序列交叉验证必须保证“训练集时间 < 验证集时间 < 测试集时间”。任何跨越时间边界的随机打乱都会引入前视偏差,使模型在实盘中失效。
三、案例/场景:同一预测任务下的模型对比
假设我们要预测某股票未来5日收益率方向,数据为2018—2024年日频行情。三类模型的典型配置与表现差异如下表所示。
| 维度 | 统计模型(ARIMA-GARCH) | 机器学习(XGBoost) | 深度学习(LSTM) |
|---|---|---|---|
| 输入特征 | 收益率序列、波动率 | 滞后收益、技术指标、因子暴露 | 原始序列、多因子面板 |
| 训练数据量 | 约1500条 | 约1500条 × 30特征 | 约1500条 × 60时间步 |
| 交叉验证方式 | 滚动窗口 + AIC/BIC | Purged K-Fold + embargo | 时序嵌套 + 早停 |
| 样本外IC均值 | 0.021 | 0.038 | 0.035 |
| 训练耗时 | 秒级 | 分钟级 | 小时级(GPU) |
| 可解释性 | 高 | 中(特征重要性) | 低 |
| 过拟合风险 | 低 | 中 | 高 |
从案例可见,机器学习模型在中等数据量下往往能取得较好的IC表现,统计模型胜在稳定与可解释,深度学习则需要更丰富的数据与更谨慎的正则化。实际选型应结合数据规模、算力预算与策略容量综合判断。
四、误区与复盘:交叉验证中的常见陷阱
误区一:随机K-Fold用于时间序列。随机划分会让模型在训练时“看到”未来数据,导致验证指标虚高。正确做法是使用滚动窗口、扩展窗口或Purged K-Fold。
误区二:特征构造引入未来信息。例如使用全样本均值标准化、未来收益率计算标签、或未对齐财报公布时间。所有特征必须严格基于历史信息。
误区三:忽略交易成本与滑点。样本外IC高不代表策略盈利。回测必须扣除手续费、冲击成本,并考虑容量限制。
复盘建议:每次建模后记录数据切分方式、特征清单、模型参数与样本外表现。对比不同模型的失败案例,分析是数据泄露、过拟合还是市场结构变化所致。只有把交叉验证做扎实,量化模型才能真正服务于实盘决策。
# 时序交叉验证伪代码示例
from sklearn.model_selection import TimeSeriesSplit
tscv = TimeSeriesSplit(n_splits=5, test_size=60)
for train_idx, val_idx in tscv.split(X):
X_train, X_val = X[train_idx], X[val_idx]
y_train, y_val = y[train_idx], y[val_idx]
model.fit(X_train, y_train)
score = model.score(X_val, y_val)
print(f"验证集得分: {score:.4f}")
掌握三类模型的定位与交叉验证要点后,下一步需要深入数据切分与特征工程的具体实现,才能把模型能力转化为稳健的量化策略。