【数学建模】(时间序列模型)ARIMA时间序列模型
ARIMA时间序列模型详解及常见时间序列模型概览
文章目录
- ARIMA时间序列模型详解及常见时间序列模型概览
- 1 引言
- 2 ARIMA模型的基本概念
- 3 ARIMA模型的组成部分详解
- 3.1 AR模型 (自回归模型)
- 3.2 MA模型 (移动平均模型)
- 3 I (差分)
- 4 ARIMA模型的建模步骤
- 5 Python实现ARIMA模型
- 6 常见时间序列模型概览
- 1. 简单时间序列模型
- 2. 指数平滑模型
- 3. ARIMA族模型
- 4. 状态空间模型
- 5. 机器学习和深度学习模型
- 7 ARIMA模型的优缺点
- 优点
- 缺点
- 8 如何选择合适的时间序列模型
- 9 结论
- 参考资料
1 引言
时间序列分析在数据科学中占据重要地位,广泛应用于金融、经济、气象等领域。本文将详细介绍ARIMA模型的基本原理和应用,并简要概述其他常见的时间序列模型,帮助读者了解时间序列分析的全貌。
2 ARIMA模型的基本概念
ARIMA模型全称为自回归差分移动平均模型(AutoRegressive Integrated Moving Average),由三部分组成:
- AR (AutoRegressive): 自回归部分
- I (Integrated): 差分部分
- MA (Moving Average): 移动平均部分
通常表示为ARIMA(p,d,q),其中:
- p: 自回归项数
- d: 差分次数
- q: 移动平均项数
ARIMA模型的基本思想是利用数据本身的历史信息来预测未来。一个时间点上的标签值既受过去一段时间内的标签值影响,也受过去一段时间内的偶然事件的影响,这就是说,ARIMA模型假设:标签值是围绕着时间的大趋势而波动的,其中趋势是受历史标签影响构成的,波动是受一段时间内的偶然事件影响构成的,且大趋势本身不一定是稳定的。
简而言之,ARIMA模型就是试图通过数据的自相关性和差分的方式,提取出隐藏在数据背后的时间序列模式,然后用这些模式来预测未来的数据。其中:
-
AR部分用于处理时间序列的自回归部分,它考虑了过去若干时期的观测值对当前值的影响。
-
I部分用于使非平稳时间序列达到平稳,通过一阶或者二阶等差分处理,消除了时间序列中的趋势和季节性因素。
-
MA部分用于处理时间序列的移动平均部分,它考虑了过去的预测误差对当前值的影响。
结合这三部分,ARIMA模型既可以捕捉到数据的趋势变化,又可以处理那些有临时、突发的变化或者噪声较大的数据。所以,ARIMA模型在很多时间序列预测问题中都有很好的表现。
3 ARIMA模型的组成部分详解
3.1 AR模型 (自回归模型)
AR模型,即自回归模型,其优势是对于具有较长历史趋势的数据,AR模型可以捕获这些趋势,并据此进行预测。但是AR模型不能很好地处理某些类型的时间序列数据,例如那些有临时、突发的变化或者噪声较大的数据。AR模型相信“历史决定未来”,因此很大程度上忽略了现实情况的复杂性、也忽略了真正影响标签的因子带来的不可预料的影响。
AR§模型假设当前值与过去p个时间点的值线性相关。数学表达式为:
X t = c + ϕ 1 X t − 1 + ϕ 2 X t − 2 + . . . + ϕ p X t − p + ε t X_t = c + \phi_1 X_{t-1} + \phi_2 X_{t-2} + ... + \phi_p X_{t-p} + \varepsilon_t Xt=c+ϕ1Xt−1+ϕ2Xt−2+...+ϕpXt−p+εt
其中:
- X t X_t Xt 是t时刻的值
- c c c 是常数项
- ϕ 1 , ϕ 2 , . . . , ϕ p \phi_1, \phi_2, ..., \phi_p ϕ1,ϕ2,...,ϕp 是模型参数
- ε t \varepsilon_t εt 是白噪声
3.2 MA模型 (移动平均模型)
相反地,MA模型,即移动平均模型,可以更好地处理那些有临时、突发的变化或者噪声较大的时间序列数据。但是对于具有较长历史趋势的数据,MA模型可能无法像AR模型那样捕捉到这些趋势。MA模型相信“时间序列是相对稳定的,时间序列的波动是由偶然因素影响决定的”,但现实中的时间序列很难一直维持“稳定”这一假设。
(P.S. ARIMA模型是一种结合了AR模型和MA模型优点的模型,可以处理更复杂的时间序列问题。参考资料:时间序列模型(四):ARIMA模型)
MA(q)模型假设当前值与过去q个预测误差项线性相关。数学表达式为:
X t = μ + ε t + θ 1 ε t − 1 + θ 2 ε t − 2 + . . . + θ q ε t − q X_t = \mu + \varepsilon_t + \theta_1 \varepsilon_{t-1} + \theta_2 \varepsilon_{t-2} + ... + \theta_q \varepsilon_{t-q} Xt=μ+εt+θ1εt−1+θ2εt−2+...+θqεt−q
其中:
- μ \mu μ 是期望值
- ε t \varepsilon_t εt 是白噪声
- θ 1 , θ 2 , . . . , θ q \theta_1, \theta_2, ..., \theta_q θ1,θ2,...,θq 是模型参数
3 I (差分)
差分操作用于使非平稳时间序列转化为平稳序列(P.S. GNSS中的周跳检测)。d阶差分定义为:
∇ d X t = ( 1 − B ) d X t \nabla^d X_t = (1-B)^d X_t ∇dXt=(1−B)dXt
其中B是后移算子, B X t = X t − 1 B X_t = X_{t-1} BXt=Xt−1。
4 ARIMA模型的建模步骤
- 平稳性检验:使用ADF检验等方法检验时间序列是否平稳
- 差分处理:如果序列非平稳,进行差分直到序列平稳
- 模型识别:通过ACF和PACF图确定合适的p、q值
- 模型拟合:估计模型参数
- 模型诊断:检验残差是否为白噪声
- 模型预测:使用拟合好的模型进行预测
5 Python实现ARIMA模型
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf# 加载数据
data = pd.read_csv('data.csv', index_col='date', parse_dates=True)
ts = data['value']# 平稳性检验
def test_stationarity(timeseries):# ADF检验dftest = adfuller(timeseries, autolag='AIC')dfoutput = pd.Series(dftest[0:4], index=['Test Statistic','p-value','#Lags Used','Number of Observations Used'])for key, value in dftest[4].items():dfoutput['Critical Value (%s)'%key] = valueprint(dfoutput)# 差分处理
ts_diff = ts.diff().dropna()# 模型拟合
model = ARIMA(ts, order=(1, 1, 1)) # ARIMA(p,d,q)
model_fit = model.fit()
print(model_fit.summary())# 模型预测
forecast = model_fit.forecast(steps=10) # 预测未来10个时间点
6 常见时间序列模型概览
除了ARIMA模型外,时间序列分析还有许多其他模型,以下是一些常见的时间序列模型:
1. 简单时间序列模型
- 简单平均模型:使用历史数据的平均值作为预测值
- 朴素模型(Naive Method):使用最近一期的观测值作为预测值
- 季节性朴素模型:使用上一个季节周期对应时间点的值作为预测值
- 移动平均模型:使用过去n个时间点的平均值作为预测值
2. 指数平滑模型
-
简单指数平滑(SES):适用于无趋势、无季节性的数据
y ^ t + 1 = α y t + ( 1 − α ) y ^ t \hat{y}_{t+1} = \alpha y_t + (1-\alpha)\hat{y}_t y^t+1=αyt+(1−α)y^t -
Holt线性趋势模型:适用于有趋势、无季节性的数据
KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲ \hat{y}_{t+h} … -
Holt-Winters季节性模型:适用于有趋势、有季节性的数据
- 加法形式和乘法形式
3. ARIMA族模型
-
SARIMA:季节性ARIMA,处理具有季节性的时间序列
S A R I M A ( p , d , q ) ( P , D , Q ) s SARIMA(p,d,q)(P,D,Q)_s SARIMA(p,d,q)(P,D,Q)s -
ARIMAX:带外生变量的ARIMA模型
X t = c + ϕ 1 X t − 1 + . . . + ϕ p X t − p + β 1 Z 1 , t + . . . + β k Z k , t + ε t + θ 1 ε t − 1 + . . . + θ q ε t − q X_t = c + \phi_1 X_{t-1} + ... + \phi_p X_{t-p} + \beta_1 Z_{1,t} + ... + \beta_k Z_{k,t} + \varepsilon_t + \theta_1 \varepsilon_{t-1} + ... + \theta_q \varepsilon_{t-q} Xt=c+ϕ1Xt−1+...+ϕpXt−p+β1Z1,t+...+βkZk,t+εt+θ1εt−1+...+θqεt−q -
VARIMA:向量ARIMA,处理多变量时间序列
-
GARCH:广义自回归条件异方差模型,用于建模波动性
σ t 2 = ω + ∑ i = 1 p α i ε t − i 2 + ∑ j = 1 q β j σ t − j 2 \sigma_t^2 = \omega + \sum_{i=1}^{p} \alpha_i \varepsilon_{t-i}^2 + \sum_{j=1}^{q} \beta_j \sigma_{t-j}^2 σt2=ω+i=1∑pαiεt−i2+j=1∑qβjσt−j2
4. 状态空间模型
- 卡尔曼滤波:递归估计动态系统状态的算法
- 结构时间序列模型:将时间序列分解为趋势、季节性和不规则成分
5. 机器学习和深度学习模型
- Prophet:Facebook开发的时间序列预测工具,适合处理具有强季节性的数据
- LSTM (长短期记忆网络):一种特殊的RNN,能够学习长期依赖关系
- GRU (门控循环单元):LSTM的简化版本,计算效率更高
- Transformer:基于注意力机制的模型,近年来在时间序列预测中表现出色
- N-BEATS:纯深度学习方法,不依赖于传统的时间序列分解
7 ARIMA模型的优缺点
优点
- 理论基础扎实,模型简单易懂
- 适用于大多数线性时间序列问题
- 预测短期趋势效果较好
- 模型解释性强
缺点
- 只适用于平稳或可通过差分转化为平稳的时间序列
- 对非线性关系的建模能力有限
- 需要较长的历史数据才能得到较好的效果
- 不适合处理具有长期记忆特性的序列
8 如何选择合适的时间序列模型
选择时间序列模型时,需要考虑以下因素:
- 数据特性:是否存在趋势、季节性、周期性
- 预测时间范围:短期预测和长期预测适合的模型不同
- 数据量:深度学习模型通常需要更多的数据
- 解释性需求:是否需要理解模型的内部机制
- 计算资源:复杂模型需要更多的计算资源
9 结论
ARIMA作为经典的时间序列分析模型,在许多场景下仍然表现良好。随着机器学习和深度学习的发展,时间序列分析工具箱不断丰富,为不同的应用场景提供了更多选择。在实际应用中,应根据具体问题特点选择合适的模型,有时候甚至可以将多种模型结合使用,以获得更好的预测效果。
参考资料
- Box, G. E. P., & Jenkins, G. M. (1976). Time Series Analysis: Forecasting and Control.
- Hyndman, R. J., & Athanasopoulos, G. (2018). Forecasting: Principles and Practice.
- statsmodels官方文档: https://www.statsmodels.org/
- 时间序列模型(四):ARIMA模型
希望这篇文章对您了解ARIMA和其他时间序列模型有所帮助!如有任何问题,欢迎在评论区留言交流。