2. 金融时间序列基础
在进入 PatchTST 之前,必须先回答一个更基础的问题:我们喂给模型的,究竟是什么样的数据?金融时间序列并不是一条“干净曲线”,它同时叠加了趋势、周期、噪声、跳跃与制度切换。若跳过本节直接建模,模型往往会把噪声当规律、把偶然当因果。本节围绕四个核心问题展开:时间序列由什么组成、什么叫平稳、自相关告诉我们什么、以及常见金融数据如何预处理。
一、时间序列的四个组成成分
经典分解把观测序列 y_t 视为若干成分的叠加或乘积:
- 趋势项 T:长期方向,如利率下行周期、指数长期上行。
- 季节项 S:固定周期波动,如日内成交量 U 型、月度宏观数据发布效应。
- 循环项 C:非固定周期的经济周期,长度常大于一年。
- 随机项 R:不可预测的残差,也是模型真正要压缩的部分。
加法模型为 y_t = T_t + S_t + C_t + R_t,乘法模型为 y_t = T_t × S_t × C_t × R_t。价格类数据因波动随水平放大,更接近乘法结构,通常先取对数再分解。
二、平稳性:建模的入场券
平稳性分严平稳与弱平稳。实践中使用弱平稳:均值恒定、方差恒定、自协方差只与时间间隔有关。金融价格几乎从不平稳,但收益率通常近似平稳。这也是为什么建模对象常是收益率而非价格。
检验与处理流程如下:
- 画时序图与滚动均值/滚动标准差,肉眼判断趋势与方差漂移。
- 用 ADF 或 KPSS 检验:ADF 原假设为存在单位根,p 值小才拒绝。
- 不平稳则差分,价格取一阶差分即收益率;必要时对波动率取对数差分。
- 差分后再次检验,并检查是否过度差分导致自相关被破坏。
from statsmodels.tsa.stattools import adfuller
import numpy as np
ret = np.diff(np.log(price)) # 对数收益率
stat, p, lags, nobs, crit, _ = adfuller(ret, autolag="AIC")
print(f"ADF={stat:.4f}, p={p:.4f}, lags={lags}")
# p < 0.05 视为拒绝单位根,可继续建模
三、自相关:序列记忆的度量
自相关函数 ACF 衡量 y_t 与 y_{t-k} 的线性相关,偏自相关 PACF 则剔除中间滞后影响。它们决定 ARIMA 的阶数,也决定 PatchTST 的 patch 长度与回看窗口是否合理。
- ACF 缓慢衰减:存在趋势或单位根,需差分。
- ACF 截尾、PACF 拖尾:倾向 MA 结构。
- ACF 拖尾、PACF 截尾:倾向 AR 结构。
- 收益率 ACF 常接近零,但平方收益率的 ACF 显著,说明波动率有记忆。
四、常见金融数据与预处理清单
| 数据类型 | 典型字段 | 主要问题 | 预处理方法 |
|---|---|---|---|
| 价格 | OHLC、收盘价 | 非平稳、量纲大 | 对数收益率、差分、标准化 |
| 成交量 | volume、turnover | 右偏、量级跨度大 | 对数变换、滚动分位归一 |
| 宏观指标 | CPI、PMI、利率 | 发布频率低、滞后、修订 | 对齐时间戳、前向填充、同比/环比 |
| 高频数据 | tick、盘口 | 缺失、非同步、噪声 | 重采样、去极值、时间对齐 |
通用预处理顺序建议:
- 时间对齐:统一时区与频率,低频指标前向填充但需标记“填充位”。
- 缺失处理:优先插值,其次前向填充,禁止用未来值回填。
- 异常值:用滚动中位数与 MAD 识别,缩尾而非直接删除。
- 平稳化:差分或取对数收益率。
- 标准化:按训练集统计量做 z-score,避免验证/测试集信息泄漏。
# 防泄漏的滚动标准化
train_mean = train.mean()
train_std = train.std()
train_norm = (train - train_mean) / train_std
valid_norm = (valid - train_mean) / train_std
test_norm = (test - train_mean) / train_std
五、案例复盘:一条价格序列的完整处理
假设某股票 2018–2023 日线收盘价。第一步画图,发现明显上行趋势且波动随价格放大;第二步 ADF 检验 p=0.92,确认非平稳;第三步取对数收益率,ADF p<0.01,通过;第四步检查收益率 ACF 近似白噪声,但平方收益率 ACF 显著,说明应引入波动率特征;第五步按时间切分,用训练集统计量标准化,并构造滚动窗口样本。至此,数据才真正成为 PatchTST 可消费的对象。
把上述流程固化后,数据才具备可复现性。下一阶段进入 PatchTST 时,你会看到 patch 划分、通道独立与长回看窗口的设计,正是建立在“平稳化后的多变量序列 + 合理自相关结构”这一基础之上。基础不牢,模型再新也只是在噪声上过拟合。