赞
踩
ARIMA(差分自回归移动平均模型)是一种经典的时间序列分析方法,常用于预测和分析时间变化的数据。核心思想是通过对历史数据进行分析和建模,然后使用该模型对未来的数据进行预测。对于给定的时间序列数据,可以使用最小二乘法、极大似然估计等方法来估计模型的参数。主要包括三个部分:自回归AR、差分I和移动平均MA。
差分(I): 差分操作用于处理非平稳时间序列数据,将其转化为平稳序列。平稳序列的特点是均值和方差保持不变,且时间间隔上的相关性不会随时间发生改变。差分操作通过减去相邻时间点的值,将原始序列转化为平稳序列。一般会迭代进行差分操作,直到得到平稳序列。将差分操作应用于非平稳时间序列后可以表示为ARIMA(p,d,0)。
自回归(AR): 模型中当前值与前面的观测值之间的线性关系,用来描述数据之间的依赖关系。AR模型假设当前值的线性组合由前p个历史观测值决定。AR§模型的数学表示为:
Y t = c + φ 1 ∗ Y t − 1 + φ 2 ∗ Y t − 2 + . . . + φ p ∗ Y t − p + ε t Y_t = c + φ_1 * Y_{t-1} + φ_2 * Y_{t-2} + ... + φ_p * Y_{t-p} + ε_t Yt=c+φ1∗Yt−1+φ2∗Yt−2+...+φp∗Yt−p+εt
其中 Y t Y_t Yt表示当前值, φ 1 , φ 2 , . . . , φ p φ_1, φ_2, ..., φ_p φ1,φ2,...,φp表示相关系数, ε t ε_t εt表示误差项,c是一个常数。
移动平均(MA): 移动平均模型用于描述当前值与过去的随机误差之间的线性关系,用来描述数据中的随机波动。。MA模型将当前值的线性组合表示为过去q个误差项的加权和。MA(q)模型的数学表示为:
Y t = c + ε t + θ 1 ∗ ε t − 1 + θ 2 ∗ ε t − 2 + . . . + θ q ∗ ε t − q Y_t = c + ε_t + θ_1 * ε_{t-1} + θ_2 * ε_{t-2} + ... + θ_q * ε_{t-q} Yt=c+εt+θ1∗εt−1+θ2∗εt−2+...+θq∗εt−q
其中 ε t ε_t εt表示当前时刻的误差项, θ 1 , θ 2 , . . . , θ q θ_1, θ_2, ..., θ_q θ1,θ2,...,θq表示相关系数,c是一个常数。
ARIMA模型是根据时间序列数据的自相关性和差分操作来建立模型。根据数据的特点和趋势选择适当的参数,一般使用ARIMA(p,d,q)来表示,其中p表示自回归项的阶数,d表示差分操作的次数,q表示移动平均项的阶数:
Y t = c + φ 1 ∗ Y t − 1 + φ 2 ∗ Y t − 2 + . . . + φ p ∗ Y t − p + ε t + θ 1 ∗ ε t − 1 + θ 2 ∗ ε t − 2 + . . . + θ q ∗ ε t − q Y_t = c + φ_1 * Y_{t-1} + φ_2 * Y_{t-2} + ... + φ_p * Y_{t-p} + ε_t + θ_1 * ε_{t-1} + θ_2 * ε_{t-2} + ... + θ_q * ε_{t-q} Yt=c+φ1∗Yt−1+φ2∗Yt−2+...+φp∗Yt−p+εt+θ1∗εt−1+θ2∗εt−2+...+θq∗εt−q
自回归模型描述当前值与历史值之间的关系,用变量自身的历史时间数据对自身进行预测。
公式:
参数:
p=1
代表今天和昨天,p=2
代表今天和前天**本质:**当前值 = 过去值的加权求和。
缺点:
**公式:**q阶自回归过程的公式定义为,
q
:阶数,和p
类似,也是表示时间的间隔。**本质:**过去的白噪声序列的移动平均
移动平均过程其实可以作为自回归过程的补充,解决自回归方差中白噪声的求解问题
移动平均具有滞后性
优点:能有效地消除预测中的随机波动。
自回归模型AR和移动平均模型MA模型相结合,我们就得到了自回归移动平均模型ARMA(p,q)
公式:
该式表明:
优点:自回归过程负责量化当前数据与前期数据之间的关系,移动平均过程负责解决随机变动项的求解问题。因此,该模型更为有效和常用。
AR/MA/ARMA模型适用于平稳时间序列的分析,当时间序列存在上升或下降趋势时,这些模型的分析效果就大打折扣了,这时差分自回归移动平均模型也就应运而生。
参数ARIMA(p,d,q):
p
:自回归项数,代表预测模型中采用的时序数据本身的滞后数(lags) ,也叫AR项d
:使之成为平稳序列所做的差分次数(阶数)q
:滑动平均项数,代表预测模型中采用的预测误差的滞后数(lags),也叫做MA项与ARMA模型的区别:
ARMA模型是针对平稳时间序列建立的模型。
ARIMA模型是针对非平稳时间序列建模。
换句话说,非平稳时间序列要建立ARMA模型,首先需要经过差分转化为平稳时间序列,然后建立ARMA模型。
公式左边的x
变成差分算子,保证数据的稳定性。
令 w t w_t wt为: w t = Δ d x t = ( 1 − L ) d x t w_t=\Delta^dx_t=(1-L)^dx_t wt=Δdxt=(1−L)dxt ,则ARIMA可写成
w t = ϕ 1 w t − 1 + ϕ 2 w t − 2 + . . . + ϕ p w t − p + μ t + θ 1 μ t − 1 + θ 2 μ t − 2 + . . . + θ q μ t − q w_t=\phi_1w_{t-1}+\phi_2w_{t-2}+...+\phi_pw_{t-p}+\mu_t+\theta_1\mu_{t-1}+\theta_2\mu_{t-2}+...+\theta_q\mu_{t-q} wt=ϕ1wt−1+ϕ2wt−2+...+ϕpwt−p+μt+θ1μt−1+θ2μt−2+...+θqμt−q
优点: 模型简单,只需要内生变量而不需要借助其他外生变量
缺点: 要求时序数据是稳定的,或者通过差分化之后是稳定的;本质上只能捕捉线性关系,不能捕捉非线性关系
自相关函数,描述的是时间序列观测值性相关性,反映了同一序列在不同时序的取值之间的相关性
公式: A C F ( k ) = p k = C o v ( r t , r t − k ) V a r ( r t ) V a r ( r t − k ) = C o v ( r t , r t − k ) V a r ( r t ) ACF(k)=p_k=\frac{Cov(r_t,r_{t-k})}{\sqrt{Var(r_t)Var(r_{t-k})}}=\frac{Cov(r_t,r_{t-k})}{Var(r_t)} ACF(k)=pk=Var(rt)Var(rt−k) Cov(rt,rt−k)=Var(rt)Cov(rt,rt−k)
k
:滞后期数,若k=2
,表示
r
t
r_t
rt和
r
t
−
2
r_{t-2}
rt−2[-1,1]
,1
表示正相关,-1
表示负相关,0
表示无关置信区间(蓝色虚线):置信区间为95%,即当前样本有一百个,其中95个样本符合当前的逻辑
缺点:自相关系数 p k p_k pk里实际掺杂了其他变量对x(t)与x(t-k)的影响
偏自相关函数,描述的是在给定中间观测值的条件下,时间序列观测值预期过去的观测值之间的线性相关性。
拖尾指序列以指数率单调递减或震荡衰减,而截尾指序列从某个时点变得非常小(不显著非0)
拖尾判定:出现以下情况,通常视为(偏)自相关系数拖尾:
**截尾判定:**出现以下情况,通常视为(偏)自相关系数d
阶截尾,
d
阶明显大于2倍标准差范围平稳性就是要求经由样本时间序列所得到的拟合曲线在未来一段时间内仍能顺着现有的形态惯性地延续下去。平稳性要求序列的均值和方差不发生明显变化
t
的值
X
t
X_t
Xt就要依赖于它的过去信息,所以需要依赖性。这种依赖性不能有明显的变化。平稳就是围绕着一个常数上下波动且波动范围有限,即有常数均值和常数方差。如果有明显的趋势或周期性,那它通常不是平稳序列。时间序列必须是平稳的,才能建立计量模型。平稳是指数据围绕着一个常数上下波动且波动范围有限,即有常数均值和常数方差。如果有明显的趋势或周期性,那它通常不是平稳序列。平稳性是指经由样本时间序列所得到的拟合曲线在未来一段时间内仍能顺着现有的形态惯性地延续下去。平稳性要求序列的均值、方差和协方差不发生明显变化,常从三个方面分析:均值,方差和协方差, 这三个指标都不会随着时间而发生明显的变化。
性质:
均值: 均值不应该是关于时间t的函数,而应该是一个固定常数。
方差:方差不应该是时间的函数、为常数,且方差需要有同方差性
**协方差:**协方差只和间隔s
有关,与t
无关
检验平稳性
理论基础:如果序列是平稳的,那么序列中所有的特征根都应该在单位圆内
对时间序列进行单位根检验,如果是非平稳序列,那么需要通过差分转化为平稳序列,不稳定的数据,是无法捕捉到时序规律的。
单位根(unit root)检验是指检验序列中是否存在单位根,因为存在单位根就是非平稳时间序列了。单位根就是指单位根过程,可以证明,序列中存在单位根过程就不平稳,会使回归分析中存在伪回归。而扩展迪基-福勒检验(Augmented Dickey-Fuller test可以测试一个自回归模型是否存在单位根,通过ADF检测的ADF值和p_value<0.05
值看是否满足平稳性要求。
1)ADF值判断平稳性需要根据1%、%5、%10不同程度拒绝原假设的统计值:
ADF值越小,越拒绝原假设,越说明序列不存在单位根,那么时间序列越平稳。
2)p_value值要小于一个显著值,时间序列就是平稳的,一般以0.01为显著值。
时间序列在t与t-1时刻的差值,可将序列平稳,并确定参数d
一阶差分就可趋于平稳,即d=1
dt
,则得到了一个新序列{dt}
,为一阶差分;对新序列{dt}
再做同样的操作,则为二阶差分。通常非平稳序列可以经过d
次差分,处理成弱平稳或者近似弱平稳时间序列。d
就是差分的阶数,d
阶差分就是相距d
期的两个序列值之间相减。参数:
p
:参照"规则",第几阶落入置信区间(阴影)。由显著不为0的偏自相关系数的数目决定,此时序列的偏自相关函数表现为拖尾性,即当k>p
时,偏自相关系数的值都在置信区间以内;d
:参照"差分法",不超过2。q
:参照"规则",第几阶落日置信区间(阴影)。由显著不为0的自相关系数的数目决定,此时序列的自相关函数表现为截尾性,即当k>p时,自相关系数的值都在置信区间内。参数确定规则:
示例
import statsmodels.api as sm
fig = plt.figure(figsize=(12,8))
ax1 = fig.add_subplot(211)
fig = sm.graphics.tsa.plot_acf(train, lags=20,ax=ax1)
ax1.xaxis.set_ticks_position('bottom')
fig.tight_layout()
ax2 = fig.add_subplot(212)
fig = sm.graphics.tsa.plot_pacf(train, lags=20, ax=ax2)
ax2.xaxis.set_ticks_position('bottom')
fig.tight_layout()
plt.show()
准确的参数估计
通过拖尾和截尾对模型进行定阶的方法,往往具有很强的主观性。回想我们之前在参数预估的时候往往是怎么做的,不就是损失和正则项的加权么?我们这里能不能结合最终的预测误差来确定p,q的阶数呢?在相同的预测误差情况下,根据奥斯卡姆剃刀准则,模型越小是越好的。那么,平衡预测误差和参数个数,我们可以根据信息准则函数法,来确定模型的阶数。预测误差通常用平方误差即残差平方和来表示。
AIC准则
全称是"最小化信息量准则",适合在被观察样本数据较少的情况下使用,是信息准则函数法之一
BIC准则
全称是"贝叶斯信息准则",是信息准则函数法之一
n
:样本容量p、q
最大最小值,再对不同的p、q
进行遍历,得到下图。p、q
(横纵轴为p、q
)示例
train_results = sm.tsa.arma_order_select_ic(train, ic=['aic', 'bic'], trend='nc', max_ar=8, max_ma=8)
print('AIC',train_results.aic_min_order) # AIC (1, 0)
print('BIC',train_results.bic_min_order) # BIC (1, 0)
# 应该选择AR(1)模型
种类
示例
model = sm.tsa.ARIMA(train, order=(1, 0, 0))
results = model.fit()
resid = results.resid # 赋值
fig = plt.figure(figsize=(12,8))
fig = sm.graphics.tsa.plot_acf(resid.values.squeeze(), lags=40)
plt.show()
预测主要有两个函数,一个是
predict
函数,一个是forecast
函数,predict
中进行预测的时间段必须在我们训练ARIMA模型的数据中,forecast
则是对训练数据集末尾下一个时间段的值进行预估。
model = sm.tsa.ARIMA(sub,order=(1,0,0))
res = model.fit()
predict_sunspots = res.predict(start=str('2014-04'),end=str('2014-05'),dynamic=False)
print(predict_sunspots)
fig,ax = plt.subplots(figsize=(12, 8))
ax = sub.plot(ax=ax)
predict_sunspots.plot(ax=ax)
plt.show()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。