使用ARIMA预测欧元汇率

1 min read

这篇文章主要是用于复习ARIMA,针对一些可能存在的问题进行进一步的理清。对预测的整个流程再做一次清晰的回顾。

导入数据

数据集: https://pan.baidu.com/s/1x5ug4x72CyFGc9TaTwuTKw 提取码: n76d

导入及观察数据:

ADF检验

在ARMA/ARIMA这样的自回归模型中,模型对时间序列数据的平稳是有要求的,因此,需要对数据或者数据的n阶差分进行平稳检验,而一种常见的方法就是ADF检验,即单位根检验。

平稳随机过程

在数学中,平稳随机过程(Stationary random process)或者严平稳随机过程(Strictly-sense stationary random process),又称狭义平稳过程,是在固定时间和位置的概率分布与所有时间和位置的概率分布相同的随机过程:即随机过程的统计特性不随时间的推移而变化。这样,数学期望和方差这些参数也不随时间和位置变化。平稳在理论上有严平稳和宽平稳两种,在实际应用上宽平稳使用较多。宽平稳的数学定义为:对于时间序列 yt,若对任意的t,k,m,满足:

    \[E(y_t) = E(y_{t+m})\]

    \[cov(y_t, y_{t+k}) = cov(y_{t+k}, y_{t+k+m})\]

则称时间序列 yt 是宽平稳的。

平稳是自回归模型ARMA的必要条件,因此对于时间序列,首先要保证应用自回归的n阶差分序列是平稳的。

单位根检验

单位根检验是指检验序列中是否存在单位根,因为存在单位根就是非平稳时间序列了。单位根就是指单位根过程,可以证明,序列中存在单位根过程就不平稳,会使回归分析中存在伪回归。而迪基-福勒检验(Dickey-Fuller test)和扩展迪基-福勒检验(Augmented Dickey-Fuller test可以测试一个自回归模型是否存在单位根(unit root)。

ADF Test

在Python中对时间序列的建模通常使用statsmodel库,在statsmodels.tsa.stattools.adfuller中可进行adf校验,一般传入一个1d 的array like的data就行,包括list,numpy array 和 pandas series都可以作为输入,其他参数可以保留默认。

单位根检验(test_stationarity,ADF检验),用于检验序列是否是平稳的,测试结果由测试统计量和一些置信区间的临界值组成。如果“测试统计量”少于“临界值”,我们可以拒绝无效假设,并认为序列是稳定的。当p-value<0.05,且TestStatistic显著小于Critical Value (5%)时,数列稳定。

检测数据

从上面的检测结果可以看到并没有满足平稳性要求。

白噪声检测

对于纯随机序列,又称白噪声序列,序列的各项数值之间没有任何相关关系,序列在进行完全无序的随机波动,可以终止对该序列的分析。白噪声序列是没有信息可提取的平稳序列。Ljung-Box test是对randomness的检验,statsmodel库中statsmodels.stats.diagnostic.acorr_ljungbox

白噪声检验原假设:时间序列是白噪声。p-value值小于0.05,拒绝原假设,所以一阶差分后的序列为平稳非白噪声序列(95%的把握)。

对ts_week进行白噪声检测:

白噪声检验结果为: (array([2281.72237192]), array([0.])),可以看到其p-value值为0,所以并不是白噪音序列。

季节、趋势分解

statsmodels.tsa.seasonal.seasonal_decompose可以将时间序列的数据分解为趋势(trend),季节性(seasonality)和残差(residual)三部分。

ACF和PACF图

自相关函数(ACF):这是时间序列和它自身滞后版本之间的相关性的测试。比如在自相关函数可以比较时间的瞬间‘t1’…’t2’以及序列的瞬间‘t1-5’…’t2-5’ (t1-5和t2 是结束点)。

部分自相关函数(PACF):这是时间序列和它自身滞后版本之间的相关性测试,但是是在预测(已经通过比较干预得到解释)的变量后。如:滞后值为5,它将检查相关性,但是会删除从滞后值1到4得到的结果。

根据序列的自相关函数和偏自相关函数的特征可以初步判断模型类型,如下表:

自相关函数(ACF) 偏自相关函数(PACF) 选择模型
拖尾 p阶截尾 AR(p)
q阶截尾 拖尾 MA(q)
p阶拖尾 q阶拖尾 ARMA(p,q)

截尾就是在某阶之后,系数都为 0(或靠近0) 。 拖尾就是有一个衰减的趋势,但是不都为 0 。

相关方法:

数据处理及校验

对数据进行一阶差分去除趋势后进行数据校验:

白噪声检验结果为: (array([155.18954176]), array([1.27283835e-35]))

一阶差分分析结果:平稳,非白噪声,自相关和偏自相关lag=1时截尾,可以做时间序列建模

对数据进行log后一阶差分分析

log后是否更平稳,比较Test Statistic和p-value,越小越平稳(负数直接比较,不是比较绝对值)

白噪声检验结果为: (array([142.03403004]), array([9.55961654e-33]))

确定ARIMA参数值

从上面的ACF和PACF可大致确定ARIMA的参数,p=偏自相关截尾的lag。如果偏自相关截尾后,自相关仍然拖尾,考虑增加p;q=自相关截尾的lag。如果自相关截尾后,偏自相关仍然拖尾,考虑增加q。以上仅是理论上的说法,具体最合适的p,q,还是要以AIC、BIC或预测结果残差最小来循环确定。ARIMA模型是通过优化AIC, HQIC, BIC等得出的, 一般来说AIC较小的模型拟合度较好,但拟合度较好不能说明预测能力好。

从上面的结果看,(p,d,q)比较适合选择(3,1,2)。所以用(3,1,2)参数比较拟合的数据和原始数据:

计算拟合后残差的自相关和偏自相关

上图中我们看到完全的没有拖尾了。因为ARIMA模型会使拟合和原始数据的残差变为白噪声,所以残差的核密度(概率密度)为正态分布:

将拟合的值逆向转化并可视化:

预测结果

相关文档:statsmodels.tsa.arima_model.ARIMA

参考链接:https://dataplatform.cloud.ibm.com/exchange/public/entry/view/815137c868b916821dec777bdc23013c

打赏作者
微信支付标点符 wechat qrcode
支付宝标点符 alipay qrcode

使用Prophet进行时间序列预测

Prophet是Facebook开源的预测工具,相比ARIMA模型,Prophet真的是非常的简单。只要读入两
1 min read

采用时间序列预测股价变化

时间序列简介 在数学上,随机过程被定义为一族时间随机变量,即{x(t),t∈T},其中T表示时间t的变动范围。
5 min read

SARIMAX:季节性ARIMA

在先前的使用Python创建季节性ARIMA模型中,出现了SARIMAX模型。在上一篇的文章中并没有讲清楚SA
18 sec read

发表评论

电子邮件地址不会被公开。 必填项已用*标注