📑 查看全课大纲(第 12 / 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)
季节效应分析与综合波动分析
约 63 分钟
指数平滑法与确定性综合分析
小象实战讲义 · 时间序列分析
在上节课中,我们学习了非平稳序列确定性分析中的长期趋势拟合方法。本节课将深入探讨另外两种核心的确定性分析方法:指数平滑法和确定性综合分析。指数平滑法通过赋予近期观测值更高权重来捕捉序列的动态变化,而确定性综合分析则系统性地分解序列中的趋势、季节和随机成分,为商业预测和政策分析提供有力工具。学完本节,你将能够运用指数平滑模型进行短期预测,并能对复杂的时间序列进行完整的确定性分解与重构。
💡 核心导读
- 指数平滑的基本思想:近期观测对当前影响更大,权重随时间间隔呈指数衰减
- 简单指数平滑:适用于无趋势、无季节性的平稳序列,只能做一期有效预测
- Holt两参数指数平滑:引入趋势项,适用于含线性趋势的序列
- 季节效应分析:通过季节指数量化周期性波动,进行季节调整
- 确定性综合分析:将序列分解为趋势、季节和随机成分的加乘组合
- X-11过程:美国国情调查局开发的标准化季节调整方法
指数平滑法:从移动平均到指数加权
指数平滑的基本原理
移动平均法对窗口内的所有观测值赋予相同权重,这在实际应用中存在明显局限:近期信息通常比远期信息更具预测价值。指数平滑法正是为了解决这一问题而提出的。
核心思想:各期权重随时间间隔增大而呈指数衰减。设平滑系数为 (),则第 期的平滑值 可表示为:
权重序列 构成一个几何级数,满足 。
简单指数平滑(SES)
简单指数平滑适用于无明显趋势和季节性的序列。其递推公式为:
其中 是第 期的平滑值, 是平滑系数。
参数确定经验:
- 变化缓慢的序列: 取较小值(如 0.05-0.2)
- 变化迅速的序列: 取较大值(如 0.2-0.3)
- 经验表明 在 0.05-0.3 之间修匀效果较好
初始值设定:最简单的方法是令 。
预测特性:简单指数平滑的 期预测值恒等于最后一期的平滑值:
这意味着简单指数平滑只适合做一期预测,多期预测会失去意义。
Holt两参数指数平滑
当序列存在线性趋势时,简单指数平滑会产生系统性滞后。Holt两参数指数平滑通过引入趋势项解决这一问题。
模型结构:
- 水平方程:
- 趋势方程:
其中 是第 期的趋势估计值, 是趋势平滑系数。
初始值设定:
- 水平初始值:
- 趋势初始值:(用初始区间内已有观测估计平均增量, 为初始区间长度;初值只能基于已观测样本,不能引用未来的 )
预测公式: 期预测值为:
当 时序列呈递增趋势, 时呈递减趋势。
季节效应分析与确定性综合分析
季节指数的计算与解释
季节效应是指序列中固定周期的规律性波动。季节指数 用于量化第 个季节相对于平均水平的偏离程度。
计算步骤:
- 计算周期内各期平均数:
- 计算总平均数:
- 计算季节指数:
解释:
- :该季节的值通常高于平均水平
- :该季节的值通常低于平均水平
- :该季节无明显季节效应
确定性综合分析模型
当序列同时受到趋势、季节和随机因素影响时,需要采用综合分析模型。常用模型包括:
加法模型:
- 趋势、季节、随机三者相互独立
- 季节波动的振幅不随趋势变化
乘法模型:
- 三者相互影响
- 季节波动的振幅随趋势变化
混合模型:
- A类:
- B类:
模型选择依据:观察时序图中季节波动的振幅是否随趋势变化
- 振幅恒定 → 加法模型
- 振幅变化 → 乘法模型或混合模型
X-11过程:标准化的季节调整方法
X-11过程是美国国情调查局开发的季节调整程序,其核心是通过多次移动平均迭代提取各成分。
方法特色:
- 使用多次短期中心移动平均消除随机波动
- 使用周期移动平均消除趋势
- 使用交易周期移动平均消除交易日影响
- 共进行11次移动平均操作(故名X-11)
优势:相比简单的确定性分析,X-11过程能更干净地分离各成分,减少估计偏差。
Python实战:指数平滑与季节分解
"""
时间序列分析 4.2 课时配套实战代码
内容:指数平滑法 (简单指数平滑、Holt 线性趋势模型与 Holt-Winters 加法季节模型)
"""
import numpy as np
import pandas as pd
from statsmodels.tsa.api import SimpleExpSmoothing, Holt, ExponentialSmoothing
np.random.seed(42)
n_periods = 60 # 5 年月度数据
dates = pd.date_range(start='2019-01-01', periods=n_periods, freq='ME')
# 生成具备趋势与 12 周期季节性的序列
trend = 0.4 * np.arange(n_periods) + 15.0
season = np.sin(2 * np.pi * np.arange(n_periods) / 12) * 3.0
noise = np.random.normal(0, 0.5, n_periods)
data = pd.Series(trend + season + noise, index=dates, name='traffic')
train = data[:-6]
test = data[-6:]
# 1. 简单指数平滑 (SES)
ses_fit = SimpleExpSmoothing(train).fit(optimized=True)
# 2. Holt 线性趋势模型
holt_fit = Holt(train).fit(optimized=True)
# 3. Holt-Winters 季节模型 (加法趋势 + 加法季节)
hw_fit = ExponentialSmoothing(train, trend='add', seasonal='add', seasonal_periods=12).fit(optimized=True)
# 4. 外推 6 期预测并评估 RMSE
ses_pred = ses_fit.forecast(6)
holt_pred = holt_fit.forecast(6)
hw_pred = hw_fit.forecast(6)
ses_rmse = np.sqrt(np.mean((ses_pred.values - test.values) ** 2))
holt_rmse = np.sqrt(np.mean((holt_pred.values - test.values) ** 2))
hw_rmse = np.sqrt(np.mean((hw_pred.values - test.values) ** 2))
print(f"训练样本数: {len(train)}, 测试样本数: {len(test)}")
print(f"Holt-Winters 优化平滑参数:")
print(f" alpha (水平平滑): {hw_fit.params['smoothing_level']:.4f}")
print(f" beta (趋势平滑): {hw_fit.params['smoothing_trend']:.4f}")
print(f" gamma (季节平滑): {hw_fit.params['smoothing_seasonal']:.4f}")
print("\n各模型 6 步预测 RMSE 比较:")
print(f" 简单指数平滑 (SES) RMSE: {ses_rmse:.4f}")
print(f" Holt 线性趋势模型 RMSE: {holt_rmse:.4f}")
print(f" Holt-Winters 加法模型 RMSE: {hw_rmse:.4f}")
print(f"Holt-Winters 显著优于基准: {hw_rmse < min(ses_rmse, holt_rmse)}")运行结果:
训练样本数: 54, 测试样本数: 6
Holt-Winters 优化平滑参数:
alpha (水平平滑): 0.0000
beta (趋势平滑): 0.0000
gamma (季节平滑): 0.0000
各模型 6 步预测 RMSE 比较:
简单指数平滑 (SES) RMSE: 2.4001
Holt 线性趋势模型 RMSE: 1.9617
Holt-Winters 加法模型 RMSE: 0.5077
Holt-Winters 显著优于基准: True📝 动手练一练
指数平滑系数分析 在简单指数平滑中,当 和 时,分别计算前5期观测值 的平滑序列(设 )。比较两种系数下平滑序列的波动性差异。
参考答案: 时: 时: 大 值使平滑序列更敏感,波动更大;小 值修匀效果更强。
季节指数计算 某产品近三年季度销售额(万元)如下:
年份 Q1 Q2 Q3 Q4 2021 120 150 180 210 2022 130 160 190 220 2023 140 170 200 230计算各季度的季节指数,并解释其含义。
参考答案: 季度平均:Q1=130, Q2=160, Q3=190, Q4=220 总平均:175 季节指数:Q1=0.743, Q2=0.914, Q3=1.086, Q4=1.257 第四季度销售额显著高于平均水平(指数>1),第一季度最低。
本章小结
本节系统介绍了非平稳序列确定性分析的两大核心方法:指数平滑法和确定性综合分析。
核心要点回顾:
指数平滑法通过指数衰减权重赋予近期观测更高重要性,包括:
- 简单指数平滑(SES):适合平稳序列,仅能做一期有效预测
- Holt两参数模型:引入趋势项,适合线性趋势序列
- Holt-Winters模型:同时考虑趋势和季节,适合复杂序列
季节效应分析通过季节指数量化周期性波动,季节指数 反映第 季节相对于平均水平的偏离程度。
确定性综合分析将序列分解为趋势、季节和随机成分的组合,模型选择取决于季节振幅是否随趋势变化。
X-11过程是标准化的季节调整方法,通过多次移动平均迭代更干净地分离各成分。
行动清单:
- 对业务数据尝试三种指数平滑模型,比较预测精度
- 计算月度/季度数据的季节指数,识别业务周期规律
- 使用
seasonal_decompose对实际序列进行加法/乘法分解 - 根据分解结果判断适用模型类型(加法/乘法/混合)
确定性分析方法虽然理论基础相对简单,但在商业预测、经济分析和政策制定中应用广泛。其优势在于直观易懂、计算高效,能快速提取序列的主要特征。然而,这些方法将无法解释的部分都归为随机波动,可能忽略序列中潜在的随机性结构信息,这为下节课要学习的随机性建模方法(ARIMA等)埋下了伏笔。
— 小象教研组
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加顾问免费领取;想学什么,直接告诉顾问
微信扫码添加顾问