时间序列基础:特性、预处理与评估框架
时间序列预测作为连接历史与未来的桥梁,在金融风控、能源调度、医疗监测、零售需求规划等领域扮演着核心角色。然而,要构建准确可靠的预测模型,首先必须深入理解时间序列的内在特性,并掌握一套系统的预处理与评估方法。本章将系统阐述时间序列的基础属性——趋势、季节性、周期性与噪声的统计定义与检测技术;详细讲解数据预处理流程,包括缺失值插值、异常值检测与平稳性转换;介绍时间序列交叉验证策略,如滚动窗口与扩展窗口;全面覆盖评估指标体系,从点预测精度(MSE、MAE、MAPE、sMAPE、MASE)到区间预测(PI覆盖率、PINAW)及概率预测(CRPS、对数分数)。最终强调,评估指标的选择必须与应用场景的决策目标深度对齐,为后续统计范式与深度学习范式的融合奠定坚实基石。
时间序列的基本属性
时间序列数据是按时间顺序排列的观测值集合,其内在结构通常由趋势(Trend)、季节性(Seasonality)、周期性(Cyclicity)与噪声(Noise)四种成分叠加而成。准确识别这些成分是选择合适模型与预处理方法的前提。本节将逐一解析其统计定义、检测方法与典型示例。
趋势
趋势反映序列在长期内的系统性上升或下降方向,可能为线性、多项式或更复杂的函数形式。趋势的存在往往导致序列非平稳,即其统计特性(如均值、方差)随时间变化。
检测方法:
- **移动平均(Moving Average)**:通过计算滑动窗口内的均值平滑短期波动,揭示长期趋势。窗口大小的选择至关重要,过小无法有效平滑噪声,过大会滞后趋势变化。例如,对月度零售数据采用12期移动平均可消除季节性,凸显年度趋势。
- **局部回归(LOESS)**:通过加权最小二乘拟合局部多项式,对趋势进行非参数估计。其优势在于适应非线性趋势,但计算成本较高。
- **HP滤波(Hodrick-Prescott Filter)**:将序列分解为趋势成分$g_t$与周期成分$c_t$,通过最小化以下目标函数实现:
$$\sum_{t=1}^{T}(y_t - g_t)^2 + \lambda \sum_{t=2}^{T-1}((g_{t+1} - g_t) - (g_t - g_{t-1}))^2$$ 其中$\lambda$为平滑参数,年度数据常取$\lambda=1600$。HP滤波对端点敏感,且可能引入人为波动。
示例:考虑某国1970-2020年实际GDP季度序列(经季节性调整)。应用HP滤波($\lambda=1600$)后,趋势成分显示长期上升轨迹,而周期成分捕捉经济周期波动。若趋势成分呈现指数增长,则需先取对数再进行分解。
季节性
季节性指序列在固定周期内(如日、周、月、季)重复出现的规律性波动。其周期$s$必须是已知或可推断的整数(如月度数据$s=12$,季度数据$s=4$)。
检测方法:
- **自相关函数(ACF)**:在滞后$k \cdot s$($k=1,2,...$)处出现显著峰值,是季节性的典型标志。例如,月度数据在滞后12、24、36处ACF值显著高于置信区间,表明年季节性。
- **周期图(Periodogram)**:基于傅里叶变换估计频谱功率,在频率$f=1/s$处出现峰值指示季节性。周期图对窗口选择敏感,常结合窗函数平滑。
- **季节性分解(STL)**:通过局部回归迭代分解趋势、季节性与残差。STL对季节性周期变化(如节日效应强度逐年改变)具有鲁棒性,且允许用户控制季节成分的平滑程度。
示例:某电商平台2019-2021年月度销售额序列。绘制ACF图可见滞后12、24处显著正自相关(超过95%置信带)。STL分解显示季节成分每年11-12月(双十一、圣诞节)出现峰值,且峰值高度逐年递增,表明季节性强度非恒定。
周期性
周期性指序列围绕长期趋势呈现的不规则波动,其周期长度不固定且通常长于季节性(如经济周期约3-10年)。与季节性不同,周期性无固定频率,需通过谱分析或模型识别。
检测方法:
- **谱密度估计**:使用傅里叶变换或自回归模型估计频谱,在非整数频率处出现峰值可能指示周期性。例如,经济数据在频率$f \approx 0.1$(周期约10年)处功率谱升高。
- **带通滤波(Bandpass Filter)**:设计滤波器提取特定周期范围(如2-8年)的成分,观察其与原始序列的相关性。
- **模型诊断**:拟合ARIMA或状态空间模型后,若残差ACF在非季节性滞后(如滞后20-40)仍显著,可能暗示未捕捉的周期性。
关键区分:季节性有固定周期且与日历相关;周期性无固定周期,常由经济、社会等复杂系统驱动。实践中,两者可能共存,如零售数据同时具有年季节性(固定12个月)与经济周期影响(不规则)。
噪声
噪声是序列中无法由趋势、季节性、周期性解释的随机波动,理想情况下应近似白噪声(零均值、同方差、无自相关)。噪声特性影响预测区间宽度与模型复杂度。
检验方法:
- **Ljung-Box检验**:检验残差序列是否存在自相关。原假设为“前$h$阶自相关系数均为零”。统计量:
$$Q = T(T+2)\sum_{k=1}^{h}\frac{\hat{\rho}_k^2}{T-k}$$ 其中$T$为样本量,$\hat{\rho}_k$为滞后$k$的样本自相关系数。若$p$值小于显著性水平(如0.05),拒绝白噪声假设,表明模型未充分提取信息。
- ** ARCH检验**:检测条件异方差(波动聚集)。若残差平方存在自相关,需考虑GARCH类模型。
- **正态性检验**:如Shapiro-Wilk检验或Q-Q图,评估残差是否服从正态分布,这对基于正态假设的预测区间至关重要。
示例:拟合ARIMA模型后,对残差进行Ljung-Box检验($h=20$)。若$p=0.03$,表明残差仍含自相关,需增加模型阶数或考虑外生变量。同时,绘制残差平方图若呈现“簇状”波动,则需引入GARCH项。
数据预处理技术
原始时间序列常包含缺失值、异常值及非平稳性,直接影响模型训练与预测性能。预处理旨在提升数据质量,使序列满足模型假设。
缺失值插值
缺失值可能源于传感器故障、记录错误或传输问题。时间序列插值需尊重时序结构,避免破坏前后依赖。
常用方法:
- **线性插值**:假设相邻观测间线性变化,适用于高频数据(如分钟级)且缺失间隔短。公式:$y_t = y_{t_1} + \frac{t - t_1}{t_2 - t_1}(y_{t_2} - y_{t_1})$,其中$t_1, t_2$为缺失段前后最近观测。
- **季节性插值**:对具有强季节性的序列,用同年同季(月)的历史均值填充。例如,填补12月缺失值时,使用过去3年12月的平均值。此方法保留季节模式,但忽略趋势变化。
- **前向/后向填充**:用最近或下一个有效观测填充,适用于实时流数据,但可能引入偏差。
- **模型插值**:用ARIMA、状态空间模型或局部回归预测缺失值。精度高但计算复杂,适用于缺失比例大或模式复杂的情况。
选择策略:缺失比例<5%时,线性或季节性插值通常足够;缺失比例高或缺失段长,建议使用模型插值。需注意,插值后序列的自相关结构可能被扭曲,建议在插值后重新检验平稳性。
实践案例:某气象站 hourly 温度序列缺失率约3%。由于温度具有日季节性(周期24小时),采用“季节性线性插值”:先按小时分组,在每组内进行线性插值。相比全局线性插值,该方法在夏季序列中RMSE降低12%。
异常值检测
异常值可能由设备故障、极端事件或数据录入错误导致,若不加处理会扭曲模型参数估计。
检测方法:
- **基于统计的方法**:
- **3σ原则**:假设序列近似正态分布,将偏离均值超过3倍标准差的值标记为异常。但对重尾分布或非平稳序列效果差。
- **IQR(四分位距)**:定义异常为小于$Q1 - 1.5 \times IQR$或大于$Q3 + 1.5 \times IQR$的值,对偏态分布更稳健。
- **时间序列特定统计量**:如基于STL分解,将残差超过$3 \times \sigma_{residual}$的点视为异常,此方法同时考虑趋势与季节性。
- **基于聚类的方法**:
- **DBSCAN**:在特征空间(如$[y_t, y_{t-1}, y_{t+1}]$)中聚类,将低密度点标记为异常。需调整邻域半径$\epsilon$与最小样本数$minPts$。
- **Isolation Forest**:通过随机划分特征空间隔离异常点,适用于高维,但可能忽略时序连续性。
- **基于预测的方法**:拟合简单模型(如ARIMA、指数平滑),计算预测误差,将误差超过阈值(如$3 \times \sigma_{error}$)的点视为异常。此方法自适应序列动态,但依赖模型选择。
处理策略:确认异常后,可选择删除、插值或作为特殊事件建模(如加入虚拟变量)。金融高频数据中,异常可能蕴含真实信息(如闪崩),需谨慎处理。
示例:某工业设备传感器振动序列,存在若干尖峰。先通过STL分解提取去趋势去季节性的残差序列,再应用IQR检测,标记出5个异常点。检查日志发现其中3个对应维护事件,保留并添加维护指示变量;其余2个疑似故障,用季节性插值替换。
平稳性转换
平稳性要求序列的均值、方差及自相关结构不随时间变化。大多数经典模型(如ARIMA)及深度学习模型的损失函数优化均依赖平稳性假设。非平稳序列需通过转换实现平稳。
平稳性检验:
- **ADF检验(Augmented Dickey-Fuller)**:原假设为序列非平稳(存在单位根)。检验统计量越负,越拒绝原假设。需选择滞后阶数(如AIC准则)并考虑是否包含常数项与趋势项。
- **KPSS检验**:原假设为序列平稳,与ADF互补。实践中常同时使用两者:若ADF拒绝原假设且KPSS不拒绝,则支持平稳。
转换方法:
- **差分(Differencing)**:一阶差分$\nabla y_t = y_t - y_{t-1}$可去除线性趋势;季节性差分$\nabla_s y_t = y_t - y_{t-s}$可去除季节性。过度差分会引入不必要的自相关,需通过ACF/PACF判断差分阶数$d$与季节性差分阶数$D$。
- **对数变换**:当序列方差随均值增大(异方差)时,取对数可稳定方差。例如,销售额序列常呈指数增长,取对数后趋势更线性。
- **Box-Cox变换**:广义幂变换,统一对数与平方根变换:
$$y_t^{(\lambda)} = \begin{cases} \frac{y_t^\lambda - 1}{\lambda} & \text{if } \lambda \neq 0 \\ \log(y_t) & \text{if } \lambda = 0 \end{cases}$$ 通过最大似然估计选择$\lambda$,使变换后序列最接近正态且方差稳定。要求$y_t > 0$,否则需加常数平移。
组合策略:实践中常组合使用。例如,对指数增长且具季节性的序列,先取对数稳定方差,再进行一阶与季节性差分去除趋势与季节性,最后检验ADF确认平稳。
示例:某全球零售销售额月度序列($T=120$)。原始序列ADF检验$p=0.21$(不平稳),且方差随均值上升。进行Box-Cox变换($\hat{\lambda}=0.3$),再一阶差分与季节性差分($s=12$)后,ADF检验$p<0.01$,KPSS检验$p=0.15$,接受平稳。ACF显示仅在滞后12处显著,表明季节性已去除。
时间序列交叉验证策略
时间序列的时间依赖性禁止随机划分训练集与测试集,否则会导致数据泄露(未来信息泄露到训练集)。必须采用按时间顺序划分的交叉验证策略。
滚动窗口(Rollating Window)
固定训练窗口大小$w$,测试窗口大小$h$,窗口随时间向前滚动。每次迭代,训练集为$[t, t+w-1]$,测试集为$[t+w, t+w+h-1]$,然后$t$增加$s$(步长,常等于$h$或1)。
特点:
- 训练样本量固定,模拟实时预测场景(模型基于最近$w$期数据预测未来$h$期)。
- 对近期动态更敏感,但早期样本利用率低。
- 适用于概念漂移(模型参数随时间变化)的场景。
示意图: ```mermaid graph LR subgraph 时间轴 T1[t=1] --> T2 --> T3 --> T4 --> T5 --> T6 --> T7 end A[训练: 1~w] --> B[测试: w+1~w+h] C[训练: 1+s~w+s] --> D[测试: w+s+1~w+s+h] E[训练: 1+2s~w+2s] --> F[测试: w+2s+1~w+2s+h] style A fill:#e1f5fe style C fill:#e1f5fe style E fill:#e1f5fe style B fill:#f3e5f5 style D fill:#f3e5f5 style F fill:#f3e5f5 ``` *注:蓝色为训练集,紫色为测试集;$s$为步长。*
扩展窗口(Expanding Window)
训练窗口随时间逐步扩大,测试窗口固定或滑动。初始训练集为$[1, w]$,测试集为$[w+1, w+h]$;下一轮训练集扩展为$[1, w+s]$,测试集为$[w+s+1, w+s+h]$,依此类推。
特点:
- 训练样本量增加,充分利用历史数据,适合数据生成过程稳定的场景。
- 对早期异常值更敏感,且计算成本随迭代增加。
- 评估指标对历史数据依赖性强,可能高估早期预测性能。
对比选择:
- 若数据生成过程存在结构性变化(如政策改革、市场结构突变),滚动窗口更优,因其聚焦近期模式。
- 若历史数据宝贵且过程稳定,扩展窗口可提升估计精度。
- 实践中常结合两者:如初始若干轮用扩展窗口,后转滚动窗口。
评估指标计算:交叉验证产生多组预测值$\hat{y}_{t,i}$与实际值$y_{t,i}$,将所有迭代的预测误差合并计算最终指标,避免单次划分的随机性。
时间序列自助法(Time Series Bootstrap)
为估计预测区间,可对残差进行自助采样(如块自助法Block Bootstrap), preserving 残差的自相关结构。生成多个残差序列,加到拟合值上,得到多个未来路径,进而计算预测分布。
示例:对某电力负荷序列(小时级)采用滚动窗口CV,训练窗口$w=30$天,测试窗口$h=24$
时间序列交叉验证策略(续)
滑动窗口原点与多步预测评估
在实际应用中,预测步长 $h$ 可能大于1(多步预测),且需要评估整个预测区间的性能。滑动窗口原点(Rolling Window Origin)是解决此问题的关键概念:对于每个测试起点 $t$,我们生成从 $t+1$ 到 $t+h$ 的 $h$ 步预测,并与实际值比较。评估时需区分:
1. 迭代预测(Iterated Forecast):使用单步模型递归预测多步,误差随步长累积。 2. 直接多步预测(Direct Multi-step Forecast):为每个预测步长 $h$ 训练独立模型,避免误差累积。
交叉验证设计需与预测策略对齐。例如,若采用直接多步预测,则每个测试窗口应产生 $h$ 个独立预测值,分别对应不同模型。评估时,可计算所有步长的平均误差(如平均MASE),或分析误差随步长的变化趋势。
实践考量:高频数据(如分钟级)中,$h$ 可能达数百步,计算成本高。可采用时间序列交叉验证的近似变体,如固定原点滚动(Fixed Origin Rolling):仅使用最近 $N$ 个窗口的预测误差计算指标,牺牲部分稳定性以提升效率。研究表明,当序列自相关性强时,需更多窗口才能获得稳定评估。
留一法时间序列交叉验证(LOOCV for Time Series)
当数据量极有限时,可采用滚动原点留一法:每次仅预测一个点($h=1$),训练窗口从起点滚动至终点。例如,序列长度 $T=100$,初始训练窗口 $w=50$,则进行 $T-w=50$ 次迭代,每次预测下一个点。此方法最大化利用数据,但计算量大,且对早期窗口的评估可能因训练样本少而高方差。
适用场景:小样本研究(如仅数十期的宏观经济指标),或需要精确评估每个时间点预测性能的场景(如金融风险价值VaR回测)。
评估指标体系详解
评估指标的选择直接反映预测目标与业务需求。本节系统梳理点预测、区间预测与概率预测的核心指标,并深入讨论其统计性质与应用场景。
点预测精度指标
点预测输出单一数值 $\hat{y}_t$,评估其与实际值 $y_t$ 的接近程度。
1. 均方误差(MSE)与均方根误差(RMSE)
$$\text{MSE} = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2, \quad \text{RMSE} = \sqrt{\text{MSE}}$$
MSE对大误差敏感(平方放大),适合误差代价非线性的场景(如电力负荷预测中,大幅低估的代价远高于高估)。RMSE与原始数据同量纲,更易解释。但两者均受量纲影响,跨序列比较需谨慎。
统计性质:MSE是$\hat{y}$的二次函数,最小化MSE等价于最小化预测误差的方差,但可能受偏差影响。若模型有偏,需结合MAE综合判断。
2. 平均绝对误差(MAE)
$$\text{MAE} = \frac{1}{n}\sum_{i=1}^{n}|y_i - \hat{y}_i|$$
MAE对异常值稳健,解释直观(平均绝对偏差)。最小化MAE等价于最小化误差的中位数,对重尾分布更鲁棒。但MAE未区分高估与低估,业务中可能需区别对待(如库存管理,缺货损失高于过剩)。
3. 平均绝对百分比误差(MAPE)与对称MAPE(sMAPE)
$$\text{MAPE} = \frac{100\%}{n}\sum_{i=1}^{n}\left|\frac{y_i - \hat{y}_i}{y_i}\right|, \quad \text{sMAPE} = \frac{100\%}{n}\sum_{i=1}^{n}\frac{|y_i - \hat{y}_i|}{(|y_i|+|\hat{y}_i|)/2}$$
MAPE因分母为实际值,对接近零的值敏感(分母小导致误差爆炸),且不对称(高估