ARIMA模型学习笔记

ARIMA模型学习笔记

ARIMA模型

Autoregressive Integrated Moving Average model

差分整合移动平均自回归模型

又称整合移动平均自回归模型(移动也可称作滑动)

时间序列平稳性

什么是平稳性

平稳性就是要求经由样本时间序列所得到的拟合曲线在未来一段时间内仍能顺着现有的形态惯性地延续下去。

平稳性要求序列的均值和方差不发生明显变化。

严平稳

严平稳表示的分布不随时间的改变而改变

弱平稳

期望与相关系数(依赖性)不变。

未来某时刻的t的值Xt就要依赖于它的过去信息,所以需要依赖性。

这种依赖性不能有明显的变化。

平稳性检验

ADF检验(Augmented Dickey-Fuller test)

也叫单位根检验

单位根

在一个自回归过程中: y t = b y t − 1 + a + ϵ t y_t=by_{t-1}+a+\epsilon_t yt=byt1+a+ϵt,如果滞后项系数b为1,就称为单位根

当单位根存在时,自变量和因变量之间的关系具有欺骗性,因为残差序列的任何误差都不会随着样本量(即时期数)增大而衰减,也就是说模型中的残差的影响是永久的。

这种回归又称作伪回归。如果单位根存在,这个过程就是一个随机漫步(random walk)。

ADF检验的原理

判断序列是否存在单位根:

如果序列平稳,就不存在单位根;否则,就会存在单位根。

ADF检验的 H0 假设就是存在单位根,如果得到的显著性检验统计量小于三个置信度(10%,5%,1%),则对应有(90%,95,99%)的把握来拒绝原假设。

ADF检验的python实现

导入adfuller函数

from statsmodels.tsa.stattools import adfuller 

adfuller(x, maxlag=None, regression=“c”, autolag=‘AIC’,store=False, regresults=False)

adfuller函数的参数意义分别是:

  1. x:一维的数据序列。
  2. maxlag:最大滞后数目。
  3. regression:回归中的包含项(c:只有常数项,默认;ct:常数项和趋势项;ctt:常数项,线性二次项;nc:没有常数项和趋势项)
  4. autolag:自动选择滞后数目(AIC:赤池信息准则,默认;BIC:贝叶斯信息准则;t-stat:基于maxlag,从maxlag开始并删除一个滞后直到最后一个滞后长度基于 t-statistic 显著性小于5%为止;None:使用maxlag指定的滞后)
  5. store:True False,默认。
  6. regresults:True 完整的回归结果将返回。False,默认。

返回值意义为:

  1. adf:Test statistic,T检验,假设检验值。
  2. pvalue:假设检验结果。
  3. usedlag:使用的滞后阶数。
  4. nobs:用于ADF回归和计算临界值用到的观测值数目。
  5. icbest:如果autolag不是None的话,返回最大的信息准则值。
  6. resstore:将结果合并为一个dummy。(啥是dummy??)
import numpy as np
from statsmodels.tsa.stattools import adfuller #ADF检验


x=np.array(train)
adftest=adfuller(x,autolag='AIC')
print(adftest)
(-0.6884153463469793, 0.8497274481606903, 3, 102, {'1%': -3.4961490537199116, '5%': -2.8903209639580556, '10%': -2.5821223452518263}, -444.50694059828345)

要确定序列平稳,需要两个条件

  1. t-statistic值是否小于三个level?

    t检验值为-0.68,大于1%(-3.49),大于5%(-2.89),大于10%(-2.58),则拒绝原假设(即不存在单位根的可能性)小于90%

  2. P-value是否非常接近0?

数据平稳化

数据不稳定的原因主要有以下两点:

  • 趋势(trend)-数据随着时间变化。比如说升高或者降低。
  • 季节性(seasonality)-数据在特定的时间段内变动。比如说节假日,或者活动导致数据的异常。
对数变换
平滑法

一般情况下,这种方法更适合带有周期性稳步上升的数据类型。

移动平均法

利用一定时间间隔内的平均值作为某一期的估计值

指数平均法

用变权的方法来计算均值

差分法
import pandas as pd
import matplotlib.pyplot as plt

#parse_date参数可以将csv中的时间字符串转换成日期格式
CB=pd.read_csv('ChinaBank.csv',parse_dates=['Date']).set_index(['Date'])
CB.head()
Unnamed: 0 Open High Low Close Volume
Date
2014-01-02 1 2.62 2.62 2.59 2.61 41632500
2014-01-03 2 2.60 2.61 2.56 2.56 45517700
2014-01-06 3 2.57 2.57 2.50 2.53 68674700
2014-01-07 4 2.51 2.52 2.49 2.52 53293800
2014-01-08 5 2.51 2.54 2.49 2.51 69087900
#对close这一列一阶差分
CB['Close_diff1']=CB['Close'].diff(1)
#二阶差分
CB['Close_diff2']=CB['Close_diff1'].diff(1)

cbdata=CB['2014-01':'2014-06']
plt.figure(figsize=(15, 5))
#plt.figure(figsize=(20,20))
cbdata['Close'].plot()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TX9qyv6z-1604328744674)(pic1.png)]

plt.figure(figsize=(15, 5))
cbdata['Close_diff1'].plot(style='r')

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eWCnE3TS-1604328744678)(pic2.png)]

plt.figure(figsize=(15, 5))
cbdata['Close_diff2'].plot(style='b')

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OSeuMv0l-1604328744678)(pic3.png)]

可以看出二阶差分之后的数据变得平稳了

再对一阶差分后的数据进行ADF检验

diff1=train.diff(1).dropna()

x1=np.array(diff1)
adftest1=adfuller(x1,autolag='AIC')
print(adftest1)
(-7.135100351267679, 3.4373575189577454e-10, 2, 102, {'1%': -3.4961490537199116, '5%': -2.8903209639580556, '10%': -2.5821223452518263}, -442.1879434989652)

可以看到t检验的值为-7.13,小于1%( -3.49)等三个level,因此有把握拒绝原假设,数据平稳

ARIMA模型介绍

AR(Autoregressive)模型

自回归模型描述当前值和历史值之间的关系,变量自身的历史时间数据对自身进行预测。

自回归模型必须满足平稳性的要求。

自回归模型首先需要确定一个阶数p,表示用几期的历史值来预测当前值。p阶自回归模型的公式定义为:

y t = μ + Σ i = 1 p γ i y t − 1 + ϵ t y_{t} = \mu + \Sigma_{i=1}^{p}\gamma_{i}y_{t-1}+\epsilon_{t} y

  • 8
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值