Skip to content

7.6 小结和本章复习

"Prediction is very difficult, especially about the future.""预测非常困难,特别是对未来的预测。"— Niels Bohr, Nobel Prize in Physics (诺贝尔物理学奖得主)

时间序列分析与事件研究:从理论到实践的完整掌握

难度重要性


本章回顾

完成本章后,你已经掌握了:

核心概念

  • 时间序列数据的基本特征:趋势、季节性、周期、随机波动
  • 平稳性(Stationarity)的概念和检验方法(ADF、KPSS)
  • 自相关(ACF)和偏自相关(PACF)的解读
  • 时间序列分解:加法模型 vs 乘法模型
  • ARIMA 模型族:AR、MA、ARMA、ARIMA、SARIMA
  • Box-Jenkins 建模流程:识别、估计、诊断、预测
  • 事件研究方法:异常收益(AR)、累积异常收益(CAR)

技术技能

  • 使用 pandas 处理时间序列数据
  • 使用 statsmodels 进行平稳性检验
  • 绘制 ACF/PACF 图识别模型阶数
  • 建立和诊断 ARIMA 模型
  • 进行时间序列预测和预测区间计算
  • 实施完整的事件研究分析
  • 计算并检验异常收益的统计显著性

实战应用

  • GDP、CPI、失业率等宏观经济数据的分析
  • 股票收益率的时间序列建模
  • 政策效应的事件研究评估
  • 并购公告对股价影响的实证分析

知识体系总结

时间序列分析全景图

时间序列分析
├── 1️⃣ 基础概念
│   ├── 平稳性
│   │   ├── 严平稳 vs 弱平稳
│   │   ├── 单位根检验(ADF, KPSS, PP)
│   │   └── 差分转换
│   ├── 自相关
│   │   ├── ACF(自相关函数)
│   │   ├── PACF(偏自相关函数)
│   │   └── Ljung-Box 检验
│   └── 白噪声检验

├── 2️⃣ 时间序列分解
│   ├── 经典分解
│   │   ├── 加法模型:Y = T + S + R
│   │   └── 乘法模型:Y = T × S × R
│   ├── STL 分解(Seasonal-Trend Loess)
│   ├── X-13ARIMA-SEATS(季节调整)
│   └── HP 滤波(趋势提取)

├── 3️⃣ ARIMA 模型族
│   ├── AR(p):自回归模型
│   │   └── y_t = φ₁y_{t-1} + ... + φₚy_{t-p} + ε_t
│   ├── MA(q):移动平均模型
│   │   └── y_t = ε_t + θ₁ε_{t-1} + ... + θ_qε_{t-q}
│   ├── ARMA(p,q):组合模型
│   ├── ARIMA(p,d,q):差分后 ARMA
│   │   └── Box-Jenkins 流程
│   └── SARIMA(p,d,q)(P,D,Q)_s:季节性 ARIMA

├── 4️⃣ 事件研究方法
│   ├── 时间窗口设计
│   │   ├── 估计窗口(Estimation Window)
│   │   ├── 事件窗口(Event Window)
│   │   └── 事后窗口(Post-Event Window)
│   ├── 正常收益模型
│   │   ├── 市场模型(Market Model)⭐
│   │   ├── 均值调整模型
│   │   └── 市场调整模型
│   ├── 异常收益计算
│   │   ├── AR(Abnormal Return)
│   │   └── CAR(Cumulative AR)
│   ├── 统计检验
│   │   ├── 单日 AR 的 t 检验
│   │   ├── CAR 的显著性检验
│   │   └── 横截面检验(AAR, CAAR)
│   └── 多事件研究

└── 5️⃣ 高级专题
    ├── 向量自回归(VAR)
    ├── 脉冲响应函数(IRF)
    ├── Granger 因果检验
    ├── 协整(Cointegration)
    ├── 误差修正模型(VECM)
    └── 断点检验(Structural Breaks)

核心公式速查表

平稳性与自相关

概念公式说明
弱平稳, , 均值、方差不变,自协方差只依赖滞后
ACF自相关函数
一阶差分消除趋势
ADF 检验H₀: γ = 0(单位根)

ARIMA 模型

模型公式ACFPACF
AR(p)指数衰减p 阶截尾
MA(q)q 阶截尾指数衰减
ARMA(p,q)AR + MA逐渐衰减逐渐衰减
ARIMA(p,d,q)取决于 ARMA取决于 ARMA
SARIMA季节滞后显著季节滞后显著

信息准则

准则公式特点
AIC偏向复杂模型
BIC惩罚参数更严格
HQIC介于 AIC 和 BIC 之间

选择原则:值越小越好

事件研究

概念公式说明
市场模型估计正常收益
异常收益实际 - 预期
CAR累积异常收益
AR t 检验H₀: AR = 0
CAR t 检验H₀: CAR = 0
AAR平均异常收益
CAAR平均累积异常收益

️ Python 代码速查

时间序列基础

python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller, kpss, acf, pacf
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.arima.model import ARIMA

# 1. 读取时间序列数据
ts = pd.read_csv('data.csv', index_col='date', parse_dates=True)

# 2. 平稳性检验
adf_result = adfuller(ts['value'], autolag='AIC')
print(f"ADF 统计量: {adf_result[0]:.4f}, p-value: {adf_result[1]:.4f}")

# 3. 差分
ts_diff = ts.diff().dropna()

# 4. ACF/PACF 图
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
plot_acf(ts, lags=40, ax=axes[0])
plot_pacf(ts, lags=40, ax=axes[1])
plt.show()

ARIMA 建模

python
# 1. 拟合 ARIMA 模型
model = ARIMA(ts, order=(1, 1, 1))
results = model.fit()

# 2. 模型摘要
print(results.summary())

# 3. 诊断
results.plot_diagnostics(figsize=(14, 10))
plt.show()

# 4. 预测
forecast = results.get_forecast(steps=12)
forecast_mean = forecast.predicted_mean
forecast_ci = forecast.conf_int()

# 5. 可视化预测
fig, ax = plt.subplots(figsize=(14, 6))
ts.plot(ax=ax, label='历史数据')
forecast_mean.plot(ax=ax, label='预测', color='red')
ax.fill_between(forecast_ci.index,
                forecast_ci.iloc[:, 0],
                forecast_ci.iloc[:, 1],
                alpha=0.3, color='red')
ax.legend()
plt.show()

自动 ARIMA

python
from pmdarima import auto_arima

# 自动选择最优 ARIMA
auto_model = auto_arima(ts,
                       start_p=0, start_q=0,
                       max_p=5, max_q=5,
                       seasonal=True, m=12,  # 月度数据
                       d=None,  # 自动确定差分阶数
                       trace=True,
                       stepwise=True,
                       information_criterion='aic')

print(auto_model.summary())

事件研究

python
# 1. 估计市场模型
X = sm.add_constant(market_returns)
market_model = sm.OLS(stock_returns, X).fit()
alpha, beta = market_model.params

# 2. 计算异常收益
normal_returns = alpha + beta * market_returns
abnormal_returns = stock_returns - normal_returns

# 3. 计算 CAR
car = abnormal_returns.cumsum()

# 4. t 检验
sigma = np.sqrt(market_model.mse_resid)
t_stat = car.iloc[-1] / (sigma * np.sqrt(len(car)))
print(f"CAR t 统计量: {t_stat:.4f}")

10 道高难度练习题

练习 1:平稳性检验与差分 ⭐⭐

题目

给定中国月度 CPI 同比增长率数据(2010-2023),完成以下任务:

  1. 对原始 CPI 序列进行 ADF 和 KPSS 检验,判断是否平稳
  2. 如果非平稳,进行一阶差分,再次检验平稳性
  3. 绘制原始序列和差分后序列的时间序列图、ACF、PACF
  4. 解释为什么 CPI 同比增长率可能是非平稳的

数据生成

python
import numpy as np
import pandas as pd

np.random.seed(2024)
n = 168  # 14 年 × 12 月
dates = pd.date_range('2010-01', periods=n, freq='M')

# 模拟 CPI:趋势 + 季节性 + 随机波动
trend = 2.5 + 0.002 * np.arange(n)
seasonal = 0.5 * np.sin(2 * np.pi * np.arange(n) / 12)
random = np.random.normal(0, 0.3, n)
cpi = trend + seasonal + random

ts_cpi = pd.Series(cpi, index=dates, name='CPI 同比增长率 (%)')

要求

  • 使用 adfuller()kpss() 进行检验
  • 绘制 4×3 的子图(原始 vs 差分;时间序列、ACF、PACF)
  • 撰写完整的分析报告(200 字)

提示

  • ADF 检验的 H₀ 是单位根(非平稳)
  • KPSS 检验的 H₀ 是平稳
  • 平稳的标准:ADF p < 0.05 且 KPSS p > 0.05

练习 2:ARIMA 模型识别与估计 ⭐⭐⭐

题目

使用 Box-Jenkins 方法为美国月度失业率建立 ARIMA 模型:

  1. 绘制 ACF 和 PACF,初步判断可能的 p, d, q
  2. 估计至少 5 个候选模型(如 ARIMA(1,1,0), ARIMA(0,1,1), ARIMA(1,1,1) 等)
  3. 使用 AIC、BIC 比较模型,选择最优模型
  4. 对最优模型进行残差诊断(Ljung-Box 检验、正态性检验)
  5. 使用最优模型预测未来 12 个月

数据生成

python
np.random.seed(123)
n = 240  # 20 年月度数据

# 生成 ARIMA(1,1,1) 数据
phi, theta = 0.6, -0.4
y = np.zeros(n)
epsilon = np.random.normal(0, 0.2, n)

for t in range(1, n):
    if t == 1:
        y[t] = y[t-1] + epsilon[t] + theta * epsilon[t-1]
    else:
        y[t] = y[t-1] + phi * (y[t-1] - y[t-2]) + epsilon[t] + theta * epsilon[t-1]

y = y + 5.0  # 基准失业率 5%
dates = pd.date_range('2004-01', periods=n, freq='M')
unemployment = pd.Series(y, index=dates, name='失业率 (%)')

评分标准(满分 100):

  • 平稳性检验和差分(20 分)
  • ACF/PACF 分析(15 分)
  • 模型估计与比较(30 分)
  • 残差诊断(20 分)
  • 预测与可视化(15 分)

练习 3:季节性 ARIMA(SARIMA)建模 ⭐⭐⭐⭐

题目

航空公司月度乘客数据通常具有强季节性。请完成:

  1. 使用 STL 分解提取趋势、季节性、残差成分
  2. 对季节调整后的序列建立 ARIMA 模型
  3. 建立 SARIMA 模型(包含季节成分)
  4. 比较 ARIMA 和 SARIMA 的预测表现(RMSE、MAE)
  5. 可视化两种模型的预测结果

数据生成

python
np.random.seed(42)
n = 144  # 12 年月度数据
dates = pd.date_range('2010-01', periods=n, freq='M')

# 趋势 + 季节性 + 随机
trend = 100 + 2 * np.arange(n)
seasonal = 30 * np.sin(2 * np.pi * np.arange(n) / 12) + 15 * np.cos(2 * np.pi * np.arange(n) / 12)
random = np.random.normal(0, 10, n)
passengers = trend + seasonal + random

ts_passengers = pd.Series(passengers, index=dates, name='乘客数(千人)')

要求

  • 使用 seasonal_decompose() 或 STL
  • SARIMA 参数形式:SARIMA(p,d,q)(P,D,Q)₁₂
  • 训练集:前 10 年;测试集:后 2 年
  • 绘制预测对比图

练习 4:事件研究 - 盈利公告的市场反应 ⭐⭐⭐

题目

某科技公司在 2023-08-15 发布季度盈利报告,业绩超预期。请评估:

  1. 使用市场模型估计正常收益(估计窗口:事件前 250-11 天)
  2. 计算事件窗口(-10, +10)的异常收益(AR)
  3. 计算累积异常收益(CAR)
  4. 进行统计显著性检验(单日 AR 和 CAR)
  5. 分析:盈利公告前是否有信息泄露?公告后市场反应如何?

数据生成

python
np.random.seed(2023)
n = 300
dates = pd.bdate_range('2022-10-01', periods=n)

# 市场收益
market_returns = np.random.normal(0.0003, 0.012, n)

# 股票收益(市场模型:alpha=0.0005, beta=1.3)
alpha, beta = 0.0005, 1.3
epsilon = np.random.normal(0, 0.018, n)
stock_returns = alpha + beta * market_returns + epsilon

# 事件日(第 250 天)添加异常收益
event_idx = 250
stock_returns[event_idx] += 0.08  # 公告日 +8%
stock_returns[event_idx - 1] += 0.02  # 前一天 +2%(信息泄露?)
stock_returns[event_idx + 1] += 0.03  # 后一天 +3%(持续反应)

stock_ret_series = pd.Series(stock_returns, index=dates)
market_ret_series = pd.Series(market_returns, index=dates)
event_date = dates[event_idx]

要求

  • 完整的事件研究流程
  • 可视化 AR 和 CAR
  • 撰写分析报告(300 字)

练习 5:多事件研究 - 并购公告的横截面分析 ⭐⭐⭐⭐

题目

分析 50 个并购公告事件,计算平均异常收益(AAR)和平均累积异常收益(CAAR):

  1. 对 50 个事件分别进行事件研究
  2. 计算每个交易日的 AAR
  3. 计算 CAAR 并进行横截面 t 检验
  4. 按并购类型(横向并购 vs 纵向并购)分组分析
  5. 检验:目标公司和收购公司的 CAAR 是否显著不同?

数据生成

python
np.random.seed(2024)
n_events = 50
n_days = 300

# 生成 50 个并购事件
events_data = []
for event_id in range(1, n_events + 1):
    market_ret = np.random.normal(0.0005, 0.015, n_days)
    alpha = np.random.normal(0.0003, 0.0001)
    beta = np.random.normal(1.1, 0.2)
    epsilon = np.random.normal(0, 0.012, n_days)
    stock_ret = alpha + beta * market_ret + epsilon

    # 事件效应(目标公司:+15% ± 5%)
    event_idx = 250
    event_effect = np.random.normal(0.15, 0.05)
    stock_ret[event_idx] += event_effect
    stock_ret[event_idx + 1] += event_effect * 0.3

    # 保存数据
    for t in range(n_days):
        events_data.append({
            'event_id': f'MA_{event_id:02d}',
            'day': t,
            'event_time': t - event_idx,
            'stock_return': stock_ret[t],
            'market_return': market_ret[t],
            'type': 'Target' if event_id <= 25 else 'Acquirer'
        })

events_df = pd.DataFrame(events_data)

评分标准(满分 100):

  • 单事件研究实现(30 分)
  • AAR 和 CAAR 计算(20 分)
  • 统计检验(20 分)
  • 分组分析(20 分)
  • 可视化与报告(10 分)

练习 6:预测评估与模型比较 ⭐⭐⭐

题目

比较 5 种时间序列预测方法在预测中国季度 GDP 增长率上的表现:

  1. 朴素预测(Naive Forecast):
  2. 移动平均(MA):
  3. 指数平滑(Exponential Smoothing)
  4. ARIMA 模型
  5. SARIMA 模型

评估指标

  • MAE(平均绝对误差)
  • RMSE(均方根误差)
  • MAPE(平均绝对百分比误差)

数据生成

python
np.random.seed(2024)
n = 60  # 15 年季度数据
dates = pd.date_range('2009-Q1', periods=n, freq='Q')

# GDP 增长率(带季节性)
trend = 6.5 - 0.02 * np.arange(n)
seasonal = 0.5 * np.sin(2 * np.pi * np.arange(n) / 4)
ar_component = np.zeros(n)
ar_component[0] = np.random.normal(0, 0.3)
for t in range(1, n):
    ar_component[t] = 0.6 * ar_component[t-1] + np.random.normal(0, 0.3)

gdp_growth = trend + seasonal + ar_component
ts_gdp = pd.Series(gdp_growth, index=dates, name='GDP 增长率 (%)')

要求

  • 训练集:前 80%;测试集:后 20%
  • 实现所有 5 种方法
  • 绘制误差对比柱状图
  • 撰写模型选择建议

练习 7:结构性断点检测 ⭐⭐⭐⭐

题目

2008 年金融危机对经济时间序列造成结构性断点。请:

  1. 使用 Chow Test 检验 2008 年是否存在结构性断点
  2. 使用 Bai-Perron 方法检测未知断点位置
  3. 对断点前后分别建立 ARIMA 模型
  4. 比较:全样本单一模型 vs 断点分段模型的预测表现

数据生成

python
np.random.seed(2024)
n = 200
dates = pd.date_range('2000-01', periods=n, freq='M')

# 前 100 个月:高增长
growth_pre = 0.8 + np.random.normal(0, 0.2, 100)

# 后 100 个月:低增长(结构性断点)
growth_post = 0.2 + np.random.normal(0, 0.15, 100)

growth = np.concatenate([growth_pre, growth_post])
ts_growth = pd.Series(growth, index=dates, name='经济增长率 (%)')

要求

  • 实现 Chow Test
  • 使用 ruptures 库进行断点检测
  • 可视化断点位置
  • 比较模型的 AIC、BIC

练习 8:向量自回归(VAR)与 Granger 因果检验 ⭐⭐⭐⭐⭐

题目

研究货币供应量(M2)和通货膨胀(CPI)之间的动态关系:

  1. 建立 VAR 模型:
  2. 选择最优滞后阶数(AIC、BIC)
  3. 进行 Granger 因果检验:M2 → CPI? CPI → M2?
  4. 绘制脉冲响应函数(IRF):M2 冲击对 CPI 的影响
  5. 进行方差分解(Variance Decomposition)

数据生成

python
from statsmodels.tsa.api import VAR

np.random.seed(2024)
n = 200
dates = pd.date_range('2005-01', periods=n, freq='M')

# 生成 VAR(2) 数据
A1 = np.array([[0.5, 0.1], [0.3, 0.4]])
A2 = np.array([[0.2, 0.05], [0.1, 0.2]])
Sigma = np.array([[1, 0.3], [0.3, 1]])

data = np.zeros((n, 2))
data[0] = np.random.multivariate_normal([0, 0], Sigma)
data[1] = np.random.multivariate_normal([0, 0], Sigma)

for t in range(2, n):
    data[t] = (A1 @ data[t-1] + A2 @ data[t-2] +
               np.random.multivariate_normal([0, 0], Sigma))

df_var = pd.DataFrame(data, index=dates, columns=['M2_growth', 'CPI_growth'])

要求

  • 使用 statsmodels.tsa.api.VAR
  • Granger 因果检验使用 grangercausalitytests()
  • IRF 图展示 10 期响应
  • 方差分解表格

练习 9:协整检验与误差修正模型(VECM)⭐⭐⭐⭐⭐

题目

研究长期利率和短期利率之间的协整关系:

  1. 检验两个利率序列是否都是 I(1)(单位根)
  2. 使用 Engle-Granger 两步法检验协整关系
  3. 使用 Johansen 检验确定协整向量个数
  4. 建立向量误差修正模型(VECM)
  5. 解释协整关系的经济含义

数据生成

python
np.random.seed(2024)
n = 200
dates = pd.date_range('2005-01', periods=n, freq='M')

# 生成协整的两个序列
# 短期利率(随机游走)
short_rate = np.cumsum(np.random.normal(0, 0.1, n)) + 2.0

# 长期利率(与短期利率协整,长期关系:long = 1.5 * short)
long_rate = 1.5 * short_rate + np.random.normal(0, 0.2, n)

df_rates = pd.DataFrame({
    'short_rate': short_rate,
    'long_rate': long_rate
}, index=dates)

提示

  • 使用 coint() 进行 Engle-Granger 检验
  • 使用 statsmodels.tsa.vector_ar.vecm 中的 coint_johansen()
  • VECM 公式:

练习 10:综合案例 - 股票收益率的完整分析 ⭐⭐⭐⭐⭐

题目

作为量化分析师,对腾讯控股(0700.HK)进行全面的时间序列分析:

任务 A:描述性分析

  1. 计算日收益率、对数收益率
  2. 绘制收益率的时间序列图、直方图、QQ 图
  3. 检验收益率的正态性(Jarque-Bera 检验)
  4. 计算滚动波动率(20 日窗口)

任务 B:平稳性与相关性

  1. 检验收益率和绝对收益率的平稳性
  2. 检验收益率的自相关性(Ljung-Box 检验)
  3. 检验收益率平方的自相关性(ARCH 效应检验)

任务 C:ARIMA 建模

  1. 对收益率建立 ARIMA 模型
  2. 进行残差诊断
  3. 预测未来 5 个交易日的收益率

任务 D:事件研究

  1. 选择一个重大事件(如季报发布、重大合作公告)
  2. 进行完整的事件研究分析
  3. 评估事件对股价的影响

任务 E:风险管理

  1. 计算 Value at Risk (VaR)(95% 和 99% 置信水平)
  2. 进行回测(Backtesting)
  3. 计算 Expected Shortfall (ES)

数据生成

python
np.random.seed(2024)
n = 500
dates = pd.bdate_range('2022-01-01', periods=n)

# 模拟股票价格(带 GARCH 效应)
returns = np.zeros(n)
sigma2 = np.zeros(n)
sigma2[0] = 0.01

# GARCH(1,1) 参数
omega, alpha, beta = 0.00001, 0.1, 0.85

for t in range(1, n):
    sigma2[t] = omega + alpha * returns[t-1]**2 + beta * sigma2[t-1]
    returns[t] = np.sqrt(sigma2[t]) * np.random.normal(0, 1)

# 转为价格
prices = 100 * np.exp(np.cumsum(returns))

df_stock = pd.DataFrame({
    'price': prices,
    'return': returns
}, index=dates)

# 添加一个事件(第 300 天)
event_idx = 300
df_stock.loc[df_stock.index[event_idx], 'return'] += 0.05

评分标准(满分 100):

  • 任务 A:描述性分析(15 分)
  • 任务 B:平稳性与相关性(15 分)
  • 任务 C:ARIMA 建模(20 分)
  • 任务 D:事件研究(25 分)
  • 任务 E:风险管理(15 分)
  • 代码质量与报告(10 分)

经典文献推荐

必读教材

  1. Box, G. E. P., Jenkins, G. M., Reinsel, G. C., & Ljung, G. M. (2015). Time Series Analysis: Forecasting and Control (5th ed.). Wiley.

    • 时间序列分析的圣经
    • ARIMA 方法的权威著作
  2. Hamilton, J. D. (1994). Time Series Analysis. Princeton University Press.

    • 研究生级别教材
    • 涵盖 VAR、协整、状态空间模型
  3. Enders, W. (2014). Applied Econometric Time Series (4th ed.). Wiley.

    • 经济学视角的时间序列
    • 配有大量实证案例
  4. Hyndman, R. J., & Athanasopoulos, G. (2021). Forecasting: Principles and Practice (3rd ed.). OTexts.

事件研究方法

  1. MacKinlay, A. C. (1997). "Event Studies in Economics and Finance." Journal of Economic Literature, 35(1), 13-39.

    • 事件研究方法的权威综述
    • 必读文献
  2. Kothari, S. P., & Warner, J. B. (2007). "Econometrics of Event Studies." In Handbook of Corporate Finance: Empirical Corporate Finance, 3-36.

    • 方法论详细讨论
    • 统计推断的陷阱

奠基性论文

  1. Dickey, D. A., & Fuller, W. A. (1979). "Distribution of the Estimators for Autoregressive Time Series with a Unit Root." Econometrica, 47(4), 1057-1072.

    • ADF 检验的原始论文
  2. Engle, R. F., & Granger, C. W. J. (1987). "Co-integration and Error Correction: Representation, Estimation, and Testing." Econometrica, 55(2), 251-276.

    • 协整理论(诺贝尔奖研究)
  3. Fama, E. F., Fisher, L., Jensen, M. C., & Roll, R. (1969). "The Adjustment of Stock Prices to New Information." International Economic Review, 10(1), 1-21.

    • 事件研究方法的开山之作

Python 实践

  1. McKinney, W. (2017). Python for Data Analysis (2nd ed.). O'Reilly.

    • pandas 作者的官方指南
    • 时间序列数据处理
  2. VanderPlas, J. (2016). Python Data Science Handbook. O'Reilly.


学习路径建议

初级路径(1-2 个月)

目标:掌握时间序列基础和简单 ARIMA

学习内容

  1. 时间序列基础概念(平稳性、ACF/PACF)
  2. 单位根检验(ADF、KPSS)
  3. 简单 ARIMA 建模(AR、MA、ARMA)
  4. Box-Jenkins 流程

推荐资源

  • Enders (2014): Chapters 1-2
  • Hyndman & Athanasopoulos (2021): Chapters 2, 8, 9

练习:练习 1, 2, 3, 6


中级路径(3-4 个月)

目标:独立完成时间序列预测和事件研究

学习内容

  1. SARIMA 建模
  2. 模型诊断与选择
  3. 事件研究方法
  4. 多事件研究与横截面检验

推荐资源

  • Box & Jenkins (2015): Chapters 5-7
  • MacKinlay (1997)

练习:练习 3, 4, 5, 7


高级路径(5-6 个月)

目标:掌握 VAR、协整、VECM

学习内容

  1. 向量自回归(VAR)
  2. Granger 因果检验
  3. 脉冲响应函数(IRF)
  4. 协整与误差修正模型(VECM)
  5. 结构性断点检测

推荐资源

  • Hamilton (1994): Chapters 10-11, 19-20
  • Lütkepohl (2005): New Introduction to Multiple Time Series Analysis

练习:练习 7, 8, 9, 10


实战路径(持续)

目标:应用于真实研究项目

项目建议

  1. 复现经典论文(如 Fama et al. 1969)
  2. 分析真实宏观经济数据(GDP、CPI、失业率)
  3. 研究股票市场的事件效应(并购、盈利公告)
  4. 参加 Kaggle 时间序列竞赛

数据来源

  • FRED(美联储经济数据):https://fred.stlouisfed.org/
  • CSMAR(国泰安数据库):中国股票、财务数据
  • Yahoo Finance:全球股票数据
  • Quandl:金融和经济数据

常见陷阱与注意事项

陷阱 1:伪回归(Spurious Regression)

问题:两个非平稳序列可能显示高相关性,但实际无因果关系

示例

python
# 两个独立的随机游走
y1 = np.cumsum(np.random.randn(100))
y2 = np.cumsum(np.random.randn(100))

# 回归:R² 很高,但毫无意义!
import statsmodels.api as sm
X = sm.add_constant(y1)
model = sm.OLS(y2, X).fit()
print(f"R² = {model.rsquared:.4f}")  # 可能 > 0.5!

解决

  • 始终检验平稳性
  • 使用差分或协整分析

陷阱 2:过度差分(Over-differencing)

问题:不必要的差分会引入 MA 成分

检验

  • 用 ADF 和 KPSS 联合检验
  • 如果 ADF 拒绝单位根且 KPSS 不拒绝平稳,则已平稳

陷阱 3:忽略结构性断点

问题:政策变化、危机等导致参数改变

检验

  • Chow Test
  • Bai-Perron 断点检测

陷阱 4:事件研究中的偏差

问题 A:事件聚集(Event Clustering)

  • 多个事件集中在同一时期(如金融危机期间的并购潮)
  • 解决:使用日历时间组合(calendar-time portfolio)

问题 B:事件预期(Event Anticipation)

  • 市场提前知道事件(如政策传闻)
  • 解决:扩大事件窗口,检验事件前的 AR

问题 C:长期事件研究的偏差

  • 长期 CAR 受到复合收益和偏度的影响
  • 解决:使用 BHAR(Buy-and-Hold Abnormal Returns)

下一步学习建议

完成本章后,你可以继续学习:

  1. Module 8: 面板数据分析

    • 固定效应、随机效应
    • 双向固定效应
    • 动态面板模型
  2. Module 9: 双重差分(DID)

    • 因果推断的核心方法
    • 平行趋势假设检验
    • 事件研究设计
  3. Module 10: 工具变量(IV)与两阶段最小二乘(2SLS)

    • 内生性问题
    • 工具变量选择
    • 过度识别检验
  4. 高级时间序列

    • GARCH 模型(波动率建模)
    • 状态空间模型(Kalman Filter)
    • 机器学习方法(LSTM、Prophet)

结语

时间序列分析是经济学、金融学实证研究的核心工具。通过本章的学习,你已经掌握了:

理论基础:平稳性、自相关、ARIMA 理论 建模技能:Box-Jenkins 流程、模型诊断 预测能力:时间序列预测和评估 因果推断:事件研究方法 Python 实现:statsmodels、pandas 的熟练应用

记住核心理念

"Time series analysis is not just about forecasting the future; it's about understanding the dynamics that drive the data."

"时间序列分析不仅仅是预测未来,更是理解驱动数据的动态机制。"

继续深入学习,将时间序列方法应用于你的研究领域,你将能够:

  • 发表高质量的学术论文
  • 为政策制定提供实证支持
  • 在金融行业进行量化分析
  • 解决复杂的实际问题

时间序列分析:理解过去,预测未来,评估因果!


祝你在时间序列分析的旅程中不断进步!

基于 MIT 许可证发布。内容版权归作者所有。