📑 查看全课大纲(第 1 / 20 节)

时间序列分析简介

约 57 分钟

📺 正在播放小象官方高清录播(支持倍速与清晰度调节)

小象实战讲义 · 时间序列分析

欢迎来到《时间序列分析》课程的第一讲。本节课将为你打开时间序列世界的大门,让你理解为什么我们需要专门的方法来处理按时间顺序排列的数据,以及这门学科如何从古埃及的尼罗河水位记录发展到今天复杂的金融预测模型。学完本节,你将能清晰区分时间序列数据与截面数据,理解描述性分析与统计性分析的根本差异,并为后续的建模学习奠定坚实的思维基础。

💡 核心导读

  • 时间序列的本质:理解随机序列与观察值序列的关系,掌握“由现象推断本质”的统计思想。
  • 两大分析范式:区分描述性时序分析(直观绘图、寻找周期/趋势)与统计时序分析(建模、预测)。
  • 时序 vs. 回归:明确时间序列分析诞生的原因——解决回归模型无法处理的序列自相关问题。
  • 主流方法演进:了解时域分析方法从 AR 模型到 ARIMA,再到 ARCH/GARCH 及多元协整的发展脉络。
  • 实战工具:认识本课程将使用的 Python 现代化时序分析工具栈。

什么是时间序列?

从古埃及到现代统计

时间序列分析的历史源远流长。早在约7000年前,古埃及人就开始系统地记录尼罗河每日的涨落情况。这些按时间顺序排列的记录,构成了人类历史上最早的时间序列数据之一。通过对这一序列的长期观察,他们发现了尼罗河泛滥的规律(每年6月17日至10月为泛滥期),从而掌握了农业生产的节奏,促进了文明的繁荣。

这个例子揭示了时间序列分析的核心:按照时间的顺序,把随机事件变化发展的过程记录下来,就构成了一个时间序列。对时间序列进行观察、研究,找寻它变化发展的规律,并预测其未来走势,就是时间序列分析。

随机序列与观察值序列:现象与本质

在数学上,我们严格区分两个概念:

  • 随机序列:按时间顺序排列的一组随机变量,记为 {X1,X2,,Xt,}\{X_1, X_2, \dots, X_t, \dots\}。它代表了数据生成过程的“本质”或“总体”。
  • 观察值序列:随机序列的一个具体实现,即我们实际观测到的一组有序数据,记为 {x1,x2,,xn}\{x_1, x_2, \dots, x_n\}。它代表了我们可以触摸到的“现象”。

两者的关系蕴含了统计学的基本思想:

  1. 观察值序列是随机序列的一个实现。我们只能获得具体的观测数据。
  2. 我们研究的目的是揭示随机序列的性质。我们关心的是数据背后的生成机制和规律。
  3. 实现的手段是通过观察值序列的性质进行推断。我们利用有限的样本(现象)去推断无限的整体(本质),即“由部分推及总体”。

案例:高校招生人数 假设我们想研究全国高校招生人数的发展规律。

  • 每年的招生人数本身是一个随机变量,所有年份的招生人数构成的集合 {X1999,X2000,,X2008}\{X_{1999}, X_{2000}, \dots, X_{2008}\} 就是一个随机序列
  • 通过统计,我们实际得到的数据 [159.7, 220.6, 268.3, 320.5, 382.2, 447.3, 504.5, 546.1, 565.9, 607.7](单位:万人)则是一个长度为10的观察值序列
  • 我们绘制其时序图,观察到明显的上升趋势。这个基于观察值序列得出的“上升趋势”结论,就是我们对其背后随机序列性质的一种推断。

时间序列数据 vs. 截面数据

理解时间序列,必须将其与统计学中另一大类数据——截面数据——区分开来。

特征时间序列数据截面数据
核心同一主体在不同时间点上的观测。不同主体在同一时间点上的观测。
示例北京市1999-2008年每年的人口。2017年2月全国72个城市各自的粮食产量。
关注点序列自身的动态演变、前后期的关联(自相关)。不同个体之间的差异、变量间的解释关系。
经典模型AR, MA, ARIMA, GARCH 等时序模型。多元线性回归模型。

为什么需要专门的时间序列模型? 经典的多元线性回归模型要求数据满足“无自相关”、“无异方差”、“无多重共线性”等假设。对于截面数据(如不同城市的人口),自相关的可能性较低。然而,对于时间序列数据(如北京市连续多年的人口),前后期的值天然地存在强烈的关联(自相关)。这种自相关会破坏回归模型的基本假设,导致参数估计失效。因此,时间序列分析方法的诞生,正是为了处理回归模型所无法妥善解决的、具有自相关性的序列数据。

时间序列分析方法论

根据分析目标的深度和手段的复杂性,时间序列分析方法主要分为两大类:描述性时序分析和统计时序分析。

描述性时序分析:直观的起点

描述性时序分析是指通过直观的数据比较或绘图观测,直接寻找序列中蕴含的发展规律。其特点是操作简单、直观有效,通常是进行深入统计分析的第一步。

历史案例中的智慧:

  1. 中国古代的农业周期:《史记》记载了“六岁穰,六岁旱,十二岁一大饥”的农业规律。范蠡据此提出“平粜法”,通过在丰年储粮、灾年放粮来稳定粮价。这是基于对农业生产时间序列的观察得出的描述性规律。
  2. 欧洲的小麦价格周期:经济学家贝弗里奇(Beveridge)对1500-1869年的小麦价格指数绘制时序图,清晰地观察到了一个约13年的周期。
  3. 太阳黑子活动:德国天文学家施瓦尔通过时序图发现太阳黑子活动具有约11年的周期,后来被证实与地球气候及农业生产周期相关联。

方法与局限: 描述性分析的核心是分解思想。一个复杂的时间序列通常可以被视为几种简单成分的叠加:

  • 趋势成分(T):长期上升或下降的方向。
  • 季节/周期成分(S):固定周期的重复波动。
  • 随机/不规则成分(I):无法由趋势和周期解释的随机波动。

通过移动平均、季节性分解等方法,可以将这些成分分离出来进行观察。然而,描述性分析的局限性在于它只能展示非常明显的规律性。对于金融资产价格、心理学测量值等随机性极强的序列,仅凭观察很难总结出可靠规律并进行预测。

统计时序分析:模型的威力

当描述性分析无能为力时,我们需要借助数理统计方法,通过构建数学模型来揭示序列内部更复杂的统计规律。统计时序分析又主要分为两个学派:频域分析和时域分析。

1. 频域分析方法

  • 原理:假设任何无趋势的时间序列都可以分解成若干不同频率的周期波动。就像白光可以分解为七色光一样,复杂的序列被视为多个不同频率的简单周期波的叠加。
  • 发展:早期借助傅里叶分析,现代则采用最大熵谱估计等方法。
  • 特点:是一种强大的动态数据分析方法,但理论复杂、结果抽象(通常以“谱密度图”呈现),在实际应用中有一定局限性。

2. 时域分析方法(本课程核心)

  • 原理:认为事件发展具有“惯性”,即序列当前的值与其过去的值之间存在某种统计上的相关关系。我们的目标就是找出这种相关关系的规律。
  • 目的:拟合出适当的数学模型来描述这种规律,并利用模型进行预测。
  • 特点理论基础扎实、操作步骤规范、结果易于解释,是当前时间序列分析的主流方法。

时域分析的标准五步流程:

  1. 考察序列特征:通过绘图、计算自相关函数等,初步判断序列的平稳性、周期性等。
  2. 选择拟合模型:根据序列特征,从 AR、MA、ARMA、ARIMA 等模型族中选择合适的模型形式。
  3. 确定模型口径:即确定模型的具体阶数(如 AR(1) 还是 AR(2)?)并估计模型参数。
  4. 检验与优化模型:检验模型残差是否为白噪声、参数是否显著等,并对模型进行优化。
  5. 推断与预测:利用拟合好的模型推断序列的统计性质,或预测其未来走势。

时域分析方法的发展脉络

时域分析方法的发展大致经历了三个阶段:

1. 基础阶段(1920s-1930s)

  • G. U. Yule:1927年提出用自回归(AR)模型来拟合时间序列,即用序列过去的值来线性回归当前值。例如,AR(1)模型为: Xt=ϕ1Xt1+εt,εtWN(0,σ2)X_t = \phi_1 X_{t-1} + \varepsilon_t, \quad \varepsilon_t \sim WN(0, \sigma^2)
  • G. T. Walker:1931年利用Yule的方法进行研究,推导出著名的Yule-Walker方程,建立了AR模型系数与序列自相关函数之间的理论联系。

2. 核心阶段(1970s)

  • G. E. P. Box 和 G. M. Jenkins:1970年出版经典著作《Time Series Analysis: Forecasting and Control》,系统阐述了ARIMA模型的识别、估计、检验和预测的全套方法。ARIMA模型成为时域分析的核心,因此也常被称为Box-Jenkins模型。
  • ARIMA模型的实质:是差分整合移动平均自回归模型。其核心思想是,对于非平稳序列,先通过差分(I) 使其变为平稳序列,再对平稳序列拟合ARMA模型。ARIMA(p,d,q)模型的一般形式(使用滞后算子BBBXt=Xt1B X_t = X_{t-1})为: Φ(B)(1B)dXt=Θ(B)εt\Phi(B)(1-B)^d X_t = \Theta(B) \varepsilon_t 其中,Φ(B)=1ϕ1BϕpBp\Phi(B)=1-\phi_1 B - \dots - \phi_p B^p 为自回归多项式,Θ(B)=1+θ1B++θqBq\Theta(B)=1+\theta_1 B + \dots + \theta_q B^q 为移动平均多项式。

3. 完善阶段(1980s-至今)

  • 异方差场合:Robert F. Engle(1982)提出ARCH模型,用于刻画金融时间序列波动率的聚类现象(即大的波动后面跟着大的波动)。随后Bollerslev(1985)提出更通用的GARCH模型。例如,GARCH(1,1)模型为: Xt=μt+εt,εt=σtzt,zti.i.d.N(0,1)σt2=ω+αεt12+βσt12\begin{aligned} X_t &= \mu_t + \varepsilon_t, \quad \varepsilon_t = \sigma_t z_t, \quad z_t \sim i.i.d. N(0,1) \\ \sigma_t^2 &= \omega + \alpha \varepsilon_{t-1}^2 + \beta \sigma_{t-1}^2 \end{aligned}
  • 多变量场合:Clive Granger(1987)提出协整理论,用于分析多个非平稳时间序列之间是否存在长期均衡关系,并建立了误差修正模型(ECM)
  • 非线性场合:发展了如门限自回归、双线性模型等,用于处理更复杂的非线性动态关系。

实战工具:Python 现代化时序分析栈

本课程将使用 Python 作为主要的实战工具。Python 拥有强大且活跃的科学计算和统计分析生态,其时间序列分析库已经非常成熟和完善。以下是我们将用到的核心库及其对应功能:

分析任务历史课程工具 (R)本课程工具 (Python)
平稳性/单位根检验adf.test(), pp.test()statsmodels.tsa.stattools.adfuller, kpss
白噪声检验Box.test()statsmodels.stats.diagnostic.acorr_ljungbox
自相关/偏自相关acf(), pacf()statsmodels.tsa.stattools.acf, pacf
ARIMA 建模arima()statsmodels.tsa.arima.model.ARIMApmdarima
GARCH 建模garch() (多个包)arch.arch_model
协整检验ca.jo() (urca包)statsmodels.tsa.stattools.coint

下面,让我们通过一个简单的 Python 示例,模拟一个平稳的 AR(1) 过程,并计算其特征根,直观感受一下平稳时间序列的生成与性质。

"""
时间序列分析 1.1 课时配套实战演示
内容:平稳时序 AR(1) 模拟与特征方程根求解
"""

import numpy as np
import pandas as pd

# 固定随机种子,确保结果可复现
np.random.seed(42)

# 1. 模拟一阶自回归过程 AR(1): x_t = 0.8 * x_{t-1} + eps_t
n = 100  # 序列长度
eps = np.random.normal(0, 1, n)  # 生成白噪声扰动项 eps_t ~ N(0,1)
x = np.zeros(n)
x[0] = eps[0]  # 初始化
for t in range(1, n):
    x[t] = 0.8 * x[t - 1] + eps[t]  # AR(1) 递推公式

# 2. 构建 pandas 时间序列 (月度频率),便于后续分析
dates = pd.date_range(start="2020-01-01", periods=n, freq="ME")  # ME 表示月末
ts = pd.Series(x, index=dates, name="AR1_Simulation")

# 3. 求解 AR 模型的特征方程,判断平稳性
# AR(1) 模型的特征方程为: 1 - 0.8*B = 0, 根为 1/0.8=1.25 > 1,满足平稳条件。
# 此处额外演示一个二阶特征多项式:1 - B + 0.5*B^2 = 0 的求解
poly_coeffs = [0.5, -1.0, 1.0]  # 对应 0.5*z^2 - z + 1 = 0
roots = np.roots(poly_coeffs)
root_magnitudes = np.abs(roots)

# 打印关键结果
print("=== 平稳时间序列 AR(1) 模拟结果 ===")
print(f"生成的时序样本均值: {ts.mean():.4f}")
print(f"生成的时序样本方差: {ts.var():.4f}")
print(f"时序序列前 5 项数据: {np.round(ts.values[:5], 4).tolist()}")
print(f"\n=== 特征方程与平稳性判据 ===")
print(f"二阶特征多项式 '1 - B + 0.5*B^2 = 0' 的根: {roots.tolist()}")
print(f"特征根的模长: {np.round(root_magnitudes, 4).tolist()}")
print(f"所有特征根模长均大于 1 (平稳性判据): {bool(np.all(root_magnitudes > 1))}")

运行上述代码,你将得到以下输出,它验证了我们模拟的序列具有有限的均值和方差,并且演示的特征多项式满足平稳性条件(根在单位圆外)。

=== 平稳时间序列 AR(1) 模拟结果 ===
生成的时序样本均值: -0.4927
生成的时序样本方差: 2.1431
时序序列前 5 项数据: [0.4967, 0.2591, 0.855, 2.207, 1.5315]

=== 特征方程与平稳性判据 ===
二阶特征多项式 '1 - B + 0.5*B^2 = 0' 的根: [(0.9999999999999998+0.9999999999999998j), (0.9999999999999998-0.9999999999999998j)]
特征根的模长: [1.4142, 1.4142]
所有特征根模长均大于 1 (平稳性判据): True

📝 动手练一练

  1. 概念辨析:假设你获得了某只股票2023年全年的每日收盘价数据。同时,你也获得了2023年12月31日当天,沪深两市所有上市公司的总市值数据。请问,哪一组是时间序列数据,哪一组是截面数据?为什么?
  2. 模型思想:回顾课程中提到的 AR(1) 模型 Xt=0.8Xt1+εtX_t = 0.8X_{t-1} + \varepsilon_t。如果 εt\varepsilon_t 在某个时刻突然有一个较大的正冲击(取值很大),这个冲击会对未来几期的 XtX_t 产生怎样的影响?请用语言描述其传播过程。

参考答案:

  1. 某只股票2023年全年的每日收盘价是时间序列数据,因为它是同一主体(该股票)在不同时间点(每日)的观测。2023年12月31日所有上市公司的总市值是截面数据,因为它是不同主体(各公司)在同一时间点(2023年末)的观测。
  2. Xt=0.8Xt1+εtX_t = 0.8X_{t-1} + \varepsilon_t 模型中,系数 0.80.8 意味着“惯性”或“记忆”。如果 tt 时刻的扰动 εt\varepsilon_t 很大,会直接导致 XtX_t 大幅上升。到了 t+1t+1 时刻,Xt+1X_{t+1} 的计算会依赖于 0.8Xt0.8 * X_t,因此 tt 时刻的冲击有 0.80.8 的比例传递到 t+1t+1 期,导致 Xt+1X_{t+1} 也升高。同理,到 t+2t+2 期,冲击的影响衰减为 0.820.8^2 倍。这个过程会持续下去,但影响逐期衰减,最终消失。这形象地展示了时间序列中“冲击的持久性”效应。

本章小结

本节作为课程的导论,为我们搭建了时间序列分析的宏观知识框架:

  • 定义了时间序列:明确了随机序列(本质)与观察值序列(现象)的区别与联系,巩固了“由部分推总体”的统计思想。
  • 区分了数据类型:深刻理解了时间序列数据(动态、自相关)与截面数据(静态、个体差异)的根本不同,并由此引出专门时序模型的必要性。
  • 梳理了方法论:掌握了描述性时序分析(直观、局限)和统计时序分析(建模、预测)两大范式,并明确本课程将以时域分析方法为核心。
  • 回顾了发展史:从 Yule 的 AR 模型,到 Box-Jenkins 的 ARIMA 体系,再到 Engle 的 ARCH/GARCH 和 Granger 的协整理论,看到了时域分析如何一步步完善以解决更复杂的实际问题。
  • 引入了实战工具:认识了以 statsmodelsarch 库为核心的 Python 现代化时序分析工具栈,并完成了第一个平稳序列的模拟实验。

行动清单 为了巩固本节知识,建议你立即做以下两件事:

  1. 观察生活:在身边(如天气APP、股票软件、运动健康数据)找一个时间序列数据,尝试用 pandas 读取并绘制其时序图,观察是否存在趋势或周期。
  2. 运行代码:在 Python 环境中完整运行本节提供的实战演示代码,尝试修改 AR(1) 模型中的系数(如改为 1.1),重新运行并观察序列图像和特征根的变化,直观感受“平稳”与“非平稳”的差异。

— 小象教研组

配套学习资源与课件
  • 第1章课件:时间序列分析简介
    下载
  • 时间序列分析推荐书籍(打包)(经典时序分析参考书合集)
    下载
  • 课程配套数据集(全课程实战数据)
    下载
🎁 免费学习资源

领取《小象 11GB VIP 课件资料包与大厂真题手册》

包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。

  • 完整 Python / 数据分析 Jupyter 实战源码
  • 大厂真实业务数据集与练习题
  • 微信扫码添加顾问免费领取;想学什么,直接告诉顾问
微信二维码:扫码添加课程顾问微信扫码添加顾问