摘要: 本系列旨在普及那些深度学习路上必经的核心概念,文章内容都是博主用心学习收集所写,欢迎大家三联支持!本系列会一直更新,核心概念系列会一直更新!欢迎大家订阅
传统时间序列系列模型
以下是一些常见传统时序建模方法。
ARIMA模型
AR MA 模型介绍
我们首先捋清楚下面四个。
AR(自回归)模型是一种仅使用过去观测值来预测未来观测值的模型。它基于一个假设,即当前观测值与过去观测值之间存在一种线性关系,可以用来描述时间序列数据的自相关性。AR模型的阶数表示过去的观测值对当前观测值的影响程度,例如AR(1)表示只考虑一个过去观测值的影响。
MA(移动平均)模型是一种把一个时间序列看作是过去若干期噪声的加权平均,即当前的观察值是由过去的白噪声通过一定的线性组合得到的。基本思想是:大部分时候时间序列应当是相对稳定的。在稳定的基础上,每个时间点上的标签值受过去一段时间内、不可预料的各种偶然事件影响而波动。即在一段时间内,时间序列应该是围绕着某个均值上下波动的序列,时间点上的标签值会围绕着某个均值移动,因此模型才被称为“移动平均模型 Moving Average Model”. MA模型的阶数表示考虑过去的预测误差的数量,例如MA(1)表示只考虑一个过去的预测误差。
ARMA(自回归移动平均)模型是AR和MA模型的结合。它综合考虑了过去观测值和过去的白噪声序列对当前观测值的影响。ARMA模型的阶数分别表示AR部分和MA部分的阶数,例如ARMA(1,1)表示考虑一个过去观测值和一个过去的预测误差。
ARIMA(自回归综合移动平均)模型是在ARMA模型的基础上引入了差分操作,用于处理非平稳时间序列(季节性)。ARIMA模型包括差分操作、自回归部分和移动平均部分。通过差分操作,ARIMA模型可以将非平稳时间序列转化为平稳时间序列,然后使用ARMA模型进行建模。ARIMA模型的阶数分别表示差分操作、AR部分和MA部分的阶数,例如ARIMA(1,1,1)表示进行一阶差分,考虑一个过去观测值和一个过去的预测误差。
前提假设
ARIMA算法步骤
-
数据准备:首先,收集时间序列数据,并进行必要的预处理。确保数据是连续的,并处理任何缺失值或异常值。
-
平稳性检验:通过绘制时间序列图,自相关图及其单位根检验观察数据的整体趋势、季节性和噪声。这将帮助我们选择合适的ARIMA模型参数。(确定是否符合假设,并进行平稳性检验)
-
确定差分阶数(d):(绘图看趋势 & ADF等检验),如果时间序列是非平稳的,需要进行差分操作,使其变为平稳序列。通过计算一阶差分、二阶差分等,直到得到平稳序列。差分阶数d即为使时间序列平稳所需的差分次数。
-
进行白噪声检验:如果通过白噪声检验(非平稳一定不是白噪声检验),这意味着该时间序列在统计上表现出了随机性,时间序列中没有明显的模式或趋势。可能需要重新考虑研究假设或采用不同的分析方法。
-
确定自回归(AR)和移动平均(MA)的阶数(p和q)
-
建立公式如下
AR部分(Autoregressive Part):
AR ( p ) : X t = ϕ 0 + ∑ i = 1 p ϕ i X t − i + ε t \text{AR}(p): \quad X_t = \phi_0 + \sum_{i=1}^{p} \phi_i X_{t-i} + \varepsilon_t AR(p):Xt=ϕ0+i=1∑pϕiXt−i+εt其中:
- X t X_t Xt 是时间序列在时间点t的观测值。
- ϕ 0 \phi_0 ϕ0 是常数项。
- ϕ i \phi_i ϕi 是自回归系数,表示时间序列在过去p个时间点的滞后值与当前值之间的线性关系。
- ε t \varepsilon_t εt 是白噪声随机干扰误差项。
差分部分(Integrated Part):
I ( d ) : Y t = ( 1 − L ) d X t \text{I}(d): \quad Y_t = (1 - L)^d X_t I(d):Yt=(1−L)dXt其中:
- Y t Y_t Yt 是经过d阶差分处理后的时间序列。
- L L L 是滞后 算子,表示对时间序列进行一步滞后操作,即 L X t = X t − 1 LX_t = X_{t-1} LXt=Xt−1。
移动平均部分(Moving Average Part):
MA ( q ) : X t = μ + ε 0 + ∑ i = 1 q θ i ε t − i \text{MA}(q): \quad X_t = μ + \varepsilon_{0} + \sum_{i=1}^{q} \theta_i \varepsilon_{t-i} MA(q):Xt=μ+ε0+i=1∑qθiεt−i其中:
-
θ i \theta_i θi 是移动平均系数,表示误差项在过去q个时间点的滞后值与当前值之间的线性关系。 $\varepsilon_{0} $ 为零均值白噪声序列, μ μ μ为均值。
-
具体地说,给定过去q个时刻的误差项,当前时刻t的误差项ε_t可以通过以下方式计算:
ε t = X t − μ − θ 1 ε ( t − 1 ) − θ 2 ε ( t − 2 ) − . . . − θ q ε ( t − q ) ε_t = X_t - μ - θ_1ε_(t-1) - θ_2ε_(t-2) - ... - θ_qε_(t-q) εt=Xt−μ−θ1ε(t−1)−θ2ε(t−2)−...−θqε(t−q)
也就是说,当前时刻的误差项是观测值与序列均值以及过去q个时刻的误差项的加权差。(将公式变换一下)
综合起来,ARIMA(p, d, q)模型的数学公式可以表示为:
这个公式描述了ARIMA模型中时间序列的变化规律,其中p、d和q分别表示AR、差分和MA的阶数。通过拟合ARIMA模型到历史数据,并使用该模型进行预测,可以获得对未来时间序列值的估计。
-
模型训练:使用最大似然估计或其他优化算法,对ARIMA模型的参数进行估计和优化。
-
模型评估:使用各种评估指标(如均方根误差RMSE、平均绝对误差MAE等)来评估模型的拟合效果。如果模型拟合效果不好,可以调整参数并重新拟合模型。
-
模型预测:使用训练好的ARIMA模型进行未来时间点的差分预测并通过逆差分得到目标数据。可以通过逐步预测或一次性预测多个时间点。
下面是一个使用Python库实现ARIMA模型的模板示例:
import pandas as pd
from statsmodels.datasets import get_rdataset
from statsmodels.tsa.arima.model import ARIMA
# 获取AirPassengers数据集
data = get_rdataset('AirPassengers').data
# 将Month列转换为日期类型
data['Month'] = pd.to_datetime(data['Month'])
# 将Month列设置为索引列
data.set_index('Month', inplace=True)
# 拆分数据集为训练集和测试集
train_data = data[:'1959']
test_data = data['1960':]
# 创建ARIMA模型
model = ARIMA(train_data, order=(2, 1, 2))
# 拟合模型
model_fit = model.fit()
# 预测未来值
predictions = model_fit.predict(start='1960-01-01', end='1960-12-01', dynamic=False)
# 打印预测结果
print(predictions)
🤞到这里,如果还有什么疑问🤞
🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩
🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳