本文的主题是关于时间序列建立ARIMA模型的相关理论解释以及运用Python进行实际建模的详细过程。
1.自回归模型(AutoRegressive model)
AR模型是统计上一种处理时间序列的方法,即用同一变量在之前各个时期,至来预测的表现,并假设它们为线性关系。例如用日期2018070120180801之间每日的浓度预测20180802当日的浓度。因为这是从回归分析中的线性回归发展而来,只是不用预测,而是用预测自己,所以叫做自回归。
数学定义:
其中:c是常数项,为随机误差,为相关系数解释为:的当期值等于数个往期值的线性组合+常数+随机误差。
2.移动平均模型(Moving Average model)
MA模型是指只取决于符合白噪声(,)的随机误差过程。移动平均模型描述的是自回归部分的误差累计。
数学定义:
其中 :μ 是序列的均值,θ1,..., θq 是参数,εt , εt-1,..., εt−q 都是 白噪声3. ARMA(p,q)模型(AutoRegressive Moving Average model)
ARMA(p,q)模型是AR模型与MA模型的混合,通常的时间序列的当期值取决于的p个往期值和q个白噪声分布的往期值,也就是说ARMA(p,q)模型中包含了p个自回归项和q个移动平均项。
数学定义:
4.自相关函数(Autocorrelation Function)
ACF是指一个序列自身在不同时间点的互相关,通俗的讲它就是两次观察之间的相似度对它们之间的时间差的函数。例如:
数学定义:
其中:K为滞后自相关函数图像(自相关图):
5.偏自相关函数(Partial Correlation Function)
偏自相关函数图像(偏自相关图):
6.时间序列建模
基本流程如图所示:
6.1 时间序列的平稳性检验
如果时间序列在某一常数附件波动且波动范围有限,即有常数均值和常数方差,并且延迟K期的序列变量的自相关系数是相等的或者说延迟K期的序列变量之间的影响程度是一样的,则称为平稳序列。平稳性检验的方法有:
6.1.1 时序图检验
平稳序列的时序图显示的序列值始终在一个常数附近随机波动,而且波动的范围有界,如果有明显的递增,递减的趋势或周期性则通常不是平稳序列。
6.1.2 自相关图检验
平稳序列的自相关系数(延迟k期)会比较快的衰减趋向于0,并在0附近小幅度随机波动,而非平稳序列的自相关系数衰减比较慢。
6.1.3单位根检验(Augmented Dickey-Fuller test)
ADF检验的原假设是存在单位根,只要这个统计值是小于1%水平下的数字就可以极显著的拒绝原假设,认为数据平稳。注意,ADF值一般是负的,也有正的,但是它只有小于1%水平下的才能认为是及其显著的拒绝原假设。对于ADF结果在1% 以上 5%以下的结果,也不能说不平稳,关键看检验要求是什么样子的。
python中的 statsmodels.tsa.stattools.adfuller 模块可进行adf校验
如何确定该序列能否平稳呢?主要看:1%、%5、%10不同程度拒绝原假设的统计值和ADF Test result的比较,ADF Test result同时小于1%、5%、10%即说明非常好地拒绝该假设,本数据中,adf结果为-9, 小于三个level的统计值。P-value是否非常接近0.本数据中,P-value 为 2e-15,接近0,说明该序列为平稳序列。
6.2 白噪声检验
白噪声也称为纯随机序列,它的序列值之间没有任何关系,可以停止对该序列的分析。
即()
python中的 statsmodels.stats.diagnostic import acorr_ljungbox 模块可以进行白噪声校验
Ljung–Box检验的原假设是序列为白噪声序列,只要这个统计值是小于5%水平下的数字就可以极显著的拒绝原假设,认为非白噪声序列。
6.3 时间序列建模
6.3.1 AR,MA,ARMA模型的选择:
6.3.2 参数选择
通过ACF,PACF图像选择ARIMA模型的p,q阶数不是很高效,所以不过多赘述,有兴趣的小伙伴可以留言交流。在实际建模过程中主要通过赤池信息准则(Akaike Information Criterion,AIC)和贝叶斯信息准则(Bayesian Information Criterion,BIC)来进行p,q的选择。
数学定义:
其中:k是模型个数,L是似然函数从一组可供选择的模型中选择最佳模型时,通常选择AIC最小的模型。留意上述公式当模型复杂度提高(k增大)时,似然函数L也会增大,在没有惩罚向时选择AIC最小的模型容易造成过拟合现象,于是就有了BIC
数学定义:
其中:k是模型可是,n是样本数,L是似然函数在选择最小BIC模型的过程中,kln(n)惩罚项在维数过大且训练样本数据相对较少的情况下,可以有效避免出现维度灾难现象。
以上为时间序列建立ARIMA模型的相关理论知识,如果有需要用python建立时间序列模型进行预测的小伙伴的可以上访问我的github:
https://github.com/Rocky1ee/time-series/blob/master/ARIMA%20Model.ipynb
小伙伴们如果觉得文章还行的请点个赞呦!!同时觉得文章哪里有问题的可以评论一下 谢谢你!
网友评论