📑 查看全课大纲(第 2 / 20 节)
- 1.时间序列分析简介
- 2.平稳性检验与特征
- 3.纯随机性检验(白噪声检验)
- 4.时间序列预处理代码实战
- 5.自回归模型(AR 模型)
- 6.自相关系数与偏自相关系数
- 7.移动平均模型(MA)与自回归移动平均模型(ARMA)
- 8.平稳时序模型识别与参数估计
- 9.模型显著性检验、优化与序列预测
- 10.平稳时间序列建模代码实战
- 11.确定性序列分解与趋势分析
- 12.季节效应分析与综合波动分析
- 13.确定性时序分析代码实战
- 14.差分平稳化与 ARIMA 模型
- 15.残差自回归模型
- 16.ARCH / GARCH 模型及其衍生
- 17.异方差检验:Portmanteau Q 检验与 LM 检验
- 18.随机性非平稳建模与 GARCH 实战
- 19.ARIMAX 模型与单位根(DF/ADF)检验
- 20.协整检验与误差修正模型(ECM)
平稳性检验与特征
约 64 分钟
小象实战讲义 · 时间序列分析
当我们拿到一组按时间顺序排列的数据时,首要任务并非直接建模,而是要先理解数据的“性格”。时间序列分析对数据有两个核心性质要求:平稳性与非纯随机性。本节将聚焦于第一个要求——平稳性。我们将系统学习如何通过特征统计量、数学定义和统计性质来理解平稳性,并掌握通过时序图和自相关图进行平稳性检验的实用方法。学完本节,你将能够判断一个时间序列是否具备平稳性,并理解为何平稳性是后续建模分析的重要基石。
💡 核心导读
- 特征统计量:理解时间序列分析中四个核心统计量(均值、方差、自协方差、自相关系数)的定义与计算,它们是描述序列特性的基础工具。
- 平稳性定义:掌握严平稳(分布平稳)与宽平稳(低阶矩平稳)两种定义的数学表述,理解二者之间的关系与适用场景。
- 平稳序列性质:推导平稳时间序列所具有的常数均值、常数方差,以及自协方差/自相关系数仅依赖于时间间隔(而非起止点)的核心性质。
- 平稳性意义:从数据结构的特殊性出发,理解为何平稳性假设能极大简化分析、减少待估参数并提高估计精度。
- 平稳性检验:学习通过观察时序图(判断趋势、周期、方差齐性)和自相关图(判断短期相关性衰减)这两种直观的图检验方法来判断序列的平稳性。
特征统计量:描述序列的“尺子”
在深入平稳性之前,我们需要一套描述时间序列特征的“尺子”,即特征统计量。与横截面数据不同,时间序列的每个观测点 都对应一个特定的时间 ,它们可能来自不同的概率分布。因此,在定义统计量时,必须明确其时间属性。
均值与方差
- 均值:反映序列在特定时点 的平均水平。 其中 是 的分布函数。对于掷骰子这类离散分布,均值计算为 。
- 方差:刻画序列在时点 的离散程度。 计算上常用公式 。
自协方差与自相关系数
时间序列分析的核心是研究序列自身在不同时期间的相关关系,即“自相关”。
- 自协方差函数:衡量序列在时点 和 的协同变化程度。
- 自相关系数函数:对自协方差进行标准化,消除了量纲影响,便于比较不同序列或不同间隔的相关性强弱。其绝对值越接近1,相关性越强;越接近0,相关性越弱。 自相关系数满足 ,且 。
平稳时间序列的定义与性质
两种平稳性定义
严平稳 (Strict Stationarity):条件最苛刻。要求序列 所有统计性质 都不随时间推移而改变。即对于任意正整数 和任意时间点 ,以及任意时间平移 ,其联合分布保持不变: 这被称为“分布平稳”。在实际中,由于我们无法获知真实分布,严平稳的验证极其困难。
宽平稳 (Weak Stationarity):条件更宽松实用。只要求序列的 低阶矩(一阶和二阶矩) 平稳。具体定义为,如果序列 满足:
- 均值函数为常数:
- 方差存在且为常数:,且
- 自协方差函数仅依赖于时间间隔:,其中 。即 。 则称 为宽平稳序列。宽平稳也称为二阶矩平稳或协方差平稳。
严平稳与宽平稳的关系
- 一般情况:严平稳(且低阶矩存在)可以推出宽平稳,反之则不成立。因为宽平稳只约束了低阶矩,而严平稳约束了整个分布。
- 特例:
- 不存在低阶矩的严平稳序列(如服从柯西分布)不是宽平稳序列。
- 对于服从多元正态分布的序列,宽平稳与严平稳等价。因为正态分布完全由其一阶和二阶矩决定。
平稳序列的统计性质
由宽平稳的定义,可以直接推导出其核心性质:
- 常数均值:。
- 常数方差:。
- 自协方差/自相关系数仅依赖于时间间隔:
- 自协方差函数:
- 自相关系数函数: 其中 为延迟阶数 (lag)。这意味着, 与 的相关性,只与它们相隔的期数 有关,而与具体的起始时间 无关。
自相关系数 的性质
- 规范性:,且 。
- 对称性:。
- 非负定性:由自相关系数组成的自相关矩阵是半正定矩阵。
- 非唯一性:一个平稳序列对应唯一的自相关函数,但一个自相关函数可能对应多个不同的平稳序列。这为后续模型识别带来一定挑战。
为何要求平稳性?——平稳性的意义
时间序列数据结构特殊:每个随机变量(每个时点)通常只有一个观测值。这与横截面数据(每个变量有多个独立样本)形成鲜明对比。
如果不假设平稳性,意味着我们需要用仅有的一个观测值 去估计该时点分布的均值 和方差 ,这显然是不可能的,参数个数远多于样本数。
平稳性假设(尤其是宽平稳)通过要求 和 ,将需要估计的多个参数( 和 )缩减为少数几个常数参数( 和 )。这使得我们可以利用序列所有时点的观测值共同来估计这些参数,例如:
- 均值估计:
- 自协方差估计:
平稳性的意义在于:它极大地减少了随机变量的个数,增加了用于估计每个特征统计量的有效样本容量,从而简化了分析难度,并提高了估计的精度和可靠性。它是经典时间序列分析方法得以实施的关键前提。
平稳性的检验:图检验方法
在实际分析中,我们拿到数据后的第一步就是进行平稳性检验。最直观的方法是图检验。
1. 时序图检验
将序列值 against 时间 绘制成图。
- 平稳序列的时序图特征:序列始终在一个常数值(均值)附近随机波动,且波动的幅度(方差)大致恒定,没有明显的趋势性(持续上升或下降)或周期性(规律性的起伏)。
- 非平稳序列的时序图特征:
- 明显趋势:如持续增长的身高数据、逐年上升的GDP数据。
- 明显周期:如月度气温数据、季度销售额数据。
- 方差非恒定:波动幅度随时间逐渐扩大或缩小(异方差)。
2. 自相关图检验
绘制自相关系数 随延迟阶数 变化的图形(通常包含置信区间)。
- 平稳序列的自相关图特征:通常具有 短期相关性。自相关系数 会随着 的增大而 快速衰减至0附近,并很快落入随机区间(置信带)内。
- 非平稳序列的自相关图特征:
- 趋势序列:自相关系数衰减速度非常慢,甚至长期保持较高正值。
- 周期序列:自相关系数呈周期性波动,不会衰减至0。
- 异方差序列:可能表现出不规则的相关图模式。
Python 实战:平稳性特征与检验
让我们通过 Python 来模拟一个平稳的 AR(1) 过程,并计算其特征统计量,同时进行单位根检验(一种更严格的平稳性统计检验)。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller, acf
from statsmodels.graphics.tsaplots import plot_acf
# 设置随机种子,确保结果可复现
np.random.seed(42)
n = 200
# 1. 模拟一个平稳的 AR(1) 过程: X_t = 0.6 * X_{t-1} + ε_t, 其中 ε_t ~ N(0,1)
eps = np.random.normal(0, 1, n) # 生成白噪声
x = np.zeros(n)
for t in range(1, n):
x[t] = 0.6 * x[t - 1] + eps[t] # AR(1) 模型递推
# 2. 绘制时序图
plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
plt.plot(x)
plt.title('平稳 AR(1) 序列时序图')
plt.xlabel('时间 t')
plt.ylabel('X_t')
plt.axhline(y=np.mean(x), color='r', linestyle='--', label=f'均值 ≈ {np.mean(x):.2f}')
plt.legend()
# 3. 计算样本自相关系数 (ACF) 并绘制自相关图
plt.subplot(1, 2, 2)
plot_acf(x, lags=20, alpha=0.05, title='平稳 AR(1) 序列自相关图 (ACF)') # alpha=0.05 给出95%置信区间
plt.xlabel('延迟阶数 k')
plt.tight_layout()
plt.show()
# 4. 定量计算:前5阶样本自相关系数
autocorr = acf(x, nlags=5)
print("前 5 阶样本自相关系数 (ACF):")
for k, rho in enumerate(autocorr):
print(f" ρ({k}) = {rho:.4f}")
# 5. 进行 Augmented Dickey-Fuller (ADF) 单位根检验
# 原假设 H0: 序列具有单位根(非平稳)
# 备择假设 H1: 序列没有单位根(平稳)
adf_res = adfuller(x)
print("\nADF 单位根检验结果:")
print(f" 检验统计量 (ADF Statistic): {adf_res[0]:.4f}")
print(f" p-value: {adf_res[1]:.4e}")
print(f" 临界值: 1%={adf_res[4]['1%']:.4f}, 5%={adf_res[4]['5%']:.4f}, 10%={adf_res[4]['10%']:.4f}")
# 判断准则:若 p-value < 显著性水平 (如0.05),则拒绝原假设,认为序列平稳。
if adf_res[1] < 0.05:
print(" 结论: 在5%显著性水平下,拒绝原假设,序列是平稳的。")
else:
print(" 结论: 在5%显著性水平下,无法拒绝原假设,序列可能是非平稳的。")运行上述代码,我们将得到以下输出和图表:
前 5 阶样本自相关系数 (ACF):
ρ(0) = 1.0000
ρ(1) = 0.5362
ρ(2) = 0.2817
ρ(3) = 0.1504
ρ(4) = 0.0603
ρ(5) = 0.1331
ADF 单位根检验结果:
检验统计量 (ADF Statistic): -7.6523
p-value: 1.7762e-11
临界值: 1%=-3.4636, 5%=-2.8762, 10%=-2.5746
结论: 在5%显著性水平下,拒绝原假设,序列是平稳的。结果解读:
- 时序图:序列围绕一个固定的均值(图中红线)上下随机波动,没有明显的趋势或周期,符合平稳序列的直观特征。
- 自相关图:自相关系数 随着延迟阶数 的增加而迅速衰减。从第2阶开始,ACF值已变得较小,并且很快落入蓝色阴影区域(95%置信区间)内,表明相关性迅速消失,呈现典型的平稳序列“短期相关”特征。
- ACF数值: 体现了 AR(1) 模型的一阶自相关,之后各阶系数快速减小。
- ADF检验:p-value 远小于 0.05,且检验统计量 (-7.65) 远小于 5% 临界值 (-2.88),因此我们以很高的置信度拒绝“存在单位根”的原假设,统计上确认该序列是平稳的。
注:ADF检验是比图检验更严格的统计检验方法,后续课程会详细讲解。本节重点掌握图检验的直观判断。
📝 动手练一练
- 观察与判断:尝试修改上面代码中 AR(1) 模型的系数。将
0.6改为1.01或0.99,重新运行代码,观察时序图和自相关图发生了怎样的变化?ADF检验的结论是否改变?这说明了什么? - 实战应用:从
pandas-datasets库中加载airline数据集(pd.read_csv('https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv', header=0, index_col=0, parse_dates=True))。绘制其时序图和自相关图,根据本节所学,直观判断该序列是否平稳,并说明理由。
参考答案:
- 当系数改为
1.01(大于1)时,序列通常呈现爆炸性增长趋势,时序图有明显上升趋势,自相关图衰减极慢,ADF检验 p-value 会很大,结论为非平稳。这说明了模型参数对平稳性的关键影响:对于 AR(1) 模型 ,保持平稳性的一个必要条件是 。 airline数据集(航空乘客数)的时序图显示其既有长期增长趋势,又有明显的年度周期性。自相关图衰减缓慢且呈周期性波动。因此,该序列是典型的非平稳序列。
本章小结
本节我们深入探讨了时间序列分析的首要步骤——平稳性检验。我们从描述序列的基础工具(特征统计量)出发,明确了严平稳与宽平稳的数学定义,推导了平稳序列的核心性质(常数均值、常数方差、自相关仅依赖于时间间隔),并深刻理解了平稳性假设对于克服时间序列数据“样本量少”困境的重大意义。最后,我们掌握了通过时序图和自相关图进行平稳性检验的直观方法,并用 Python 进行了实战演练。
行动清单:
- 拿到数据先看图:养成习惯,对任何时间序列数据,首先绘制其时序图和自相关图,进行初步的平稳性判断。
- 理解统计量含义:在后续建模中,当看到
acf、pacf图或相关检验输出时,能联系本节知识,理解其背后反映的序列平稳性及相关结构信息。 - 为下一节做准备:思考一个问题:如果一个序列既是平稳的,同时其不同期之间又毫无相关性(即自相关系数全部接近0),这样的序列还有研究价值吗?我们下节“纯随机性检验”将解答这个问题。
— 小象教研组
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加顾问免费领取;想学什么,直接告诉顾问
微信扫码添加顾问