3. 探索性数据分析
在构建金融时序机器学习择时信号之前,探索性数据分析(EDA)是决定模型上限的关键一步。很多初学者拿到价格序列后直接套用LSTM或XGBoost,结果回测曲线漂亮、实盘却迅速失效,根源往往在于跳过了对收益率统计特性的诊断。本节围绕四个核心对象展开:收益率分布形态、波动率聚集、自相关结构,以及偏度与峰度,并给出可落地的可视化方法。
一、核心原理:价格不是分析对象,收益率才是
金融价格序列通常是非平稳的,均值与方差随时间漂移,直接建模容易产生伪回归。因此第一步永远是做对数差分,得到对数收益率:
r_t = ln(P_t / P_{t-1}) = ln(P_t) - ln(P_{t-1})
对数收益率具备可加性,且近似等于简单收益率,是后续所有统计检验的基础。EDA要回答的问题包括:收益率是否服从正态分布?波动率是否成簇出现?过去收益能否预测未来收益?极端值出现的频率是否被正态假设低估?这些问题的答案直接决定特征工程方向与模型选择。
二、收益率分布:偏度、峰度与正态性检验
正态分布假设在金融数据中几乎总被拒绝。我们需要重点观察两个高阶矩:
- 偏度(Skewness):衡量分布不对称性。负偏度意味着左尾更长,暴跌概率高于暴涨,A股与指数普遍呈现负偏。
- 峰度(Kurtosis):衡量尾部厚度。正态分布峰度为3,超额峰度大于0即为尖峰厚尾,极端收益出现频率远高于正态预期。
实操中可用Jarque-Bera检验或Shapiro-Wilk检验做正态性判断。若峰度显著大于3,则基于正态假设的风险模型(如VaR)会系统性低估尾部风险,择时信号也应更关注尾部状态而非均值状态。
| 统计量 | 正态基准 | 典型金融资产表现 | 对择时建模的启示 |
|---|---|---|---|
| 均值 | 接近0 | 日频接近0,年化正 | 不宜直接预测绝对收益 |
| 标准差 | 稳定 | 时变、成簇 | 需引入波动率特征 |
| 偏度 | 0 | 常为负 | 区分上涨与下跌状态 |
| 超额峰度 | 0 | 显著为正 | 使用稳健损失函数 |
| 自相关 | 无 | 收益弱、平方收益强 | 从波动率中提取信号 |
三、波动率聚集与自相关结构
波动率聚集是金融时序最稳健的典型事实之一:大幅波动后面往往跟着大幅波动,平静期后面跟着平静期。这意味着收益率本身自相关很弱,但其平方或绝对值序列存在显著自相关。这正是GARCH族模型和波动率特征有效的根本原因。
自相关分析应分两层进行:
- 对收益率序列做ACF/PACF,检验均值可预测性,通常快速衰减至不显著。
- 对收益率平方做ACF,检验方差可预测性,通常缓慢衰减且显著,说明存在长记忆。
若平方收益ACF显著,则可在特征集中加入滚动波动率、已实现波动率、GARCH条件方差等,作为择时模型的状态输入。
四、可视化方法与实战流程
EDA的可视化应服务于判断,而非堆砌图表。推荐一套最小可视化组合:
- 收益率时序图:观察波动率聚集与结构性断点。
- 直方图叠加正态曲线:直观展示尖峰厚尾与偏度。
- QQ图:尾部偏离正态的程度一目了然。
- ACF/PACF图:分别对收益率与平方收益率绘制。
- 滚动波动率曲线:观察波动率状态切换。
下面给出一个可复用的Python分析片段:
import numpy as np, pandas as pd
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf
from scipy import stats
ret = np.log(price).diff().dropna()
print("偏度:", stats.skew(ret))
print("峰度:", stats.kurtosis(ret, fisher=False))
print("JB检验 p值:", stats.jarque_bera(ret).pvalue)
fig, ax = plt.subplots(2, 2, figsize=(12, 8))
ax[0,0].plot(ret); ax[0,0].set_title("收益率时序")
ax[0,1].hist(ret, bins=80, density=True)
ax[1,0].plot(np.sort(ret), stats.norm.ppf(np.linspace(0.01,0.99,len(ret))))
plot_acf(ret**2, ax=ax[1,1], lags=40)
plt.tight_layout()
运行后若发现峰度远大于3、平方收益ACF显著、QQ图两端明显偏离,即可确认数据具备典型的厚尾与波动率聚集特征,后续建模应优先引入波动率类特征,并采用对异常值稳健的损失函数。
完成上述诊断后,你会得到一份关于数据“性格”的清晰画像:厚尾意味着不能依赖高斯假设,波动率聚集意味着方差本身携带信号,弱均值自相关意味着单纯用历史收益预测方向收益有限,而平方收益的强自相关则提示应从波动率状态切入构建择时逻辑。这份画像将直接指导后续特征工程与模型选择,是整门课程从数据走向信号的第一道分水岭。