3. 金融时间序列特征
在把深度学习模型用于金融波动率预测之前,必须先理解金融时间序列本身的统计特征。很多初学者直接套用图像或语音领域的网络结构,结果在验证集上表现尚可,一到实盘就迅速失效。根本原因往往不是网络不够深,而是忽略了金融数据与常规序列在分布、相关结构和方差行为上的本质差异。本节围绕五个核心特征展开:非平稳性、自相关性、异方差性、厚尾分布与长记忆性,并说明它们分别对建模策略产生什么约束。
一、核心原理:五个特征分别意味着什么
非平稳性指序列的均值、方差或自协方差结构随时间改变。价格序列通常是非平稳的,而收益率序列更接近弱平稳。若直接把原始价格喂给模型,网络很容易学到“时间趋势”而非“波动规律”,导致样本外泛化能力差。
自相关性指当前值与过去值存在统计依赖。收益率本身的自相关通常很弱,但收益率的绝对值或平方序列却表现出显著自相关——这正是波动率聚集的统计表现,也是GARCH族模型和深度学习波动率模型能够工作的基础。
异方差性指方差随时间变化,且往往成簇出现:大波动后面跟着大波动,小波动后面跟着小波动。这一特征直接决定了损失函数的设计——若假设噪声方差恒定,模型会低估极端风险。
厚尾分布指极端值出现的概率远高于正态分布。金融收益率峰度通常显著大于3,意味着尾部风险不可忽略。用均方误差训练时,少数极端样本会主导梯度,模型可能被“拉偏”。
长记忆性指自相关函数衰减缓慢,过去很久的冲击仍对当前有影响。波动率序列常表现出这种特性,普通RNN难以捕捉长程依赖,需要LSTM、GRU或带注意力机制的模型。
二、方法流程:从特征诊断到建模决策
面对一段金融时间序列,建议按以下流程推进,而不是直接开始搭网络。
- 平稳性检验:用ADF或KPSS检验判断序列是否平稳。若价格非平稳,转为对数收益率或差分序列。
- 自相关分析:绘制ACF/PACF,分别观察收益率、绝对值收益率、平方收益率。若平方序列自相关显著,说明存在波动聚集。
- 异方差检验:用Ljung-Box检验平方序列,或观察滚动标准差。若显著,考虑GARCH类标签或波动率目标。
- 厚尾诊断:计算偏度、峰度,绘制QQ图。若峰度远大于3,避免使用纯MSE,改用Huber损失或分位数损失。
- 长记忆评估:观察ACF衰减速度,或用Hurst指数粗略判断。若衰减缓慢,优先选择LSTM、GRU或Transformer。
关键决策:波动率预测的目标通常不是收益率本身,而是收益率的条件方差。因此标签构造常采用已实现波动率、GARCH拟合方差或平方收益率的滚动均值,而不是直接预测价格。
三、案例/场景:用代码快速诊断五个特征
下面以一段模拟的金融收益率序列为例,展示如何用Python快速完成特征诊断。实际项目中可将数据替换为真实标的的日频收益率。
import numpy as np
import pandas as pd
from statsmodels.tsa.stattools import adfuller, acf
from scipy import stats
np.random.seed(42)
n = 2000
# 模拟带波动聚集和厚尾的收益率
vol = np.zeros(n)
vol[0] = 0.01
for t in range(1, n):
vol[t] = 0.0001 + 0.1 * (vol[t-1]**2) + 0.85 * vol[t-1]
eps = stats.t.rvs(df=4, size=n)
ret = vol * eps
# 1. 平稳性
adf_p = adfuller(ret)[1]
print("ADF p-value:", round(adf_p, 4))
# 2. 自相关(平方序列)
acf_sq = acf(ret**2, nlags=20)
print("ACF of squared returns (lag1-5):", np.round(acf_sq[1:6], 3))
# 3. 厚尾
print("Skewness:", round(stats.skew(ret), 3))
print("Kurtosis:", round(stats.kurtosis(ret), 3))
# 4. 异方差:滚动标准差
roll_std = pd.Series(ret).rolling(60).std()
print("Rolling std range:", round(roll_std.min(), 5), "-", round(roll_std.max(), 5))
运行后若看到ADF p值很小、平方序列ACF显著为正、峰度远大于3、滚动标准差波动明显,就说明五个特征同时存在。此时若直接用普通MLP预测收益率,模型很难学到有效规律。
四、误区与复盘:常见建模陷阱
| 误区 | 表现 | 修正策略 |
|---|---|---|
| 直接用价格训练 | 训练集损失下降,验证集失效 | 转为对数收益率或差分序列 |
| 忽略平方序列自相关 | 模型无法捕捉波动聚集 | 加入滚动波动率特征或GARCH标签 |
| 假设方差恒定 | 极端行情下预测严重偏低 | 使用异方差建模或分位数损失 |
| 用MSE应对厚尾 | 梯度被极端值主导 | 改用Huber、分位数或对数变换 |
| 用短窗口RNN处理长记忆 | 长程依赖丢失 | 使用LSTM/GRU/Attention并增大感受野 |
复盘提醒:金融时间序列的五个特征不是孤立存在的。非平稳性会放大厚尾的影响,异方差会改变自相关结构,长记忆性又会让异方差持续更久。建模时应把它们视为一个整体约束系统,而不是逐条打补丁。
实操建议:在正式训练深度学习模型前,先完成一次完整的特征诊断报告,包括ADF检验、ACF/PACF图、峰度偏度、滚动标准差曲线。这份报告不仅能指导网络结构选择,还能在模型失效时快速定位是哪个特征没有被正确处理。