一,什么是时间序列?
时间序列简单的说就是各时间点上形成的数值序列,时间序列分析就是通过观察历史数据预测未来的值
时间序列分析并不是关于时间的回归,它主要是研究自身的变化规律的
二,时间序列的类别
1,纯随机序列
又称为白噪声序列,序列的各项之间没有任何相关关系,完全是无序的随机波动,这样的序列没有任何信息可以提取
2,平稳非白噪声序列
他的均值和方差是常数,对于这样的序列,现在已经有成熟的建模方法,通常是建立一个线性模型来拟合该序列的发展,借此提出有用的信息,ARMA 模型是最常用的平稳序列拟合模型(线性拟合并不是和时间的拟合,而是和本身的拟合)
3,非平稳非白噪声序列
对于非平稳序列,他的方差和均值不稳定,一般是先将其转换成平稳序列,这样就可以使用平稳时间序列的方法来分析,如ARMA模型;如果一个时间序列可以经差分后具有平稳性,则该序列是差分平稳序列,可以使用ARIMA模型
三:平稳性检验
1,为何要求序列平稳?
我们知道序列平稳性是进行时间序列分析的前提条件,很多人都会有疑问,为什么要满足平稳性的要求呢?
在统计学中,每一个问题我们都要有一个初始的基本假设,就像一些假设检验就要求数据符合正态分布,一个回归方程,要求Xi完全独立不相关,而且误差要符合均值为0的正态分布,而在时间序列分析上,最重要的假设前提就是序列的平稳性(来自一个知乎的牛叉解读),所以平稳的基本思想是:时间序列行为不能随着时间改变而改变,
2,平稳时间序列的定义:
平稳有强平稳和弱平稳之分,这里我们主要说弱平稳。ps:强平稳条件限制太强,难以验证
对于随机变量 X ,可以计算期均值也就是数学期望 μ ,方差 σ^2,对于两个随机变量X 和 Y,可以计算 X,Y的协方差cov(X,Y)=E[(X- μx)(Y-μy)]和相关系数ρ(X,Y)=cov(X,Y)/σXσY,他们度量了两个不同事件之间的相互影响程度。
对时间序列{Xt,t∈T},任意时刻的序列值Xt都是一个随机变量,每一个随机变量都会有均值和方差,任意取 t,s∈T,则他的自相关协方差函数 γ(t,s) = E[(X- μt)(Y-μs)] 和自相关系数ρ(t,s) = cov(Xt,Xs)/σtσs,之所以是自协方差函数和自相关系数,就是因为他们衡量的是同一件事在两个不同时期(时刻 t 和时刻 s )之间的相关程度,简单讲就是度量自己过去的行为对自己现在的影响!
如果时间序列{Xt,t∈T}在某一个常数附近波动且波动范围有限,即有常数均值和常数方差,并且延迟 k 期的序列变量的自协方差和自相关系数不变,或者说延迟 k 期的序列变量之间的影响程度一样,则称时间序列{Xt,t∈T}为平稳序列!
总结就是:
- 常数均值
- 常数方差
- 常数自协方差和自相关系数
3,平稳性检测
对序列的平稳性检验有两种检验方法:
- 根据时序图和自相关图的特征做出的图检验,操作简单,但是带有主观性
1)时序图检验:根据平稳时间序列的均值和方差为常数,平稳序列的时序图显示该序列应该在一个常数附件波动,而且波动范围有限,如果有明显的趋势性和周期性,则不是平稳序列
2)自相关图检验:平稳序列具有短期相关性,这个表明通常只有近期德尔序列值对现在的值影响比较明显,间隔越远的过去值对现在值影响越小。随着延迟期数 k 的增加,平稳性的自相关系数 ρk会比较快的衰减趋向于零,并在0附件波动,而非平稳序列的自相关系数衰减的速度比较慢,这是利用自相关图进行平稳检验的依据。
- 构造检验统计量进行检验,常用的是单位根检验,还有 kpss 检验
单位根ADF检验指检验序列中是否存在单位根,如果存在,就是非平稳时间序列
ADF方法:原假设:序列有一个单位根(a=1的值),备则假设:该序列没有单位根如果接受原假设,则该序列是非平稳的,是可以差分平稳的
KPSS检验的作者将原假设定义为趋势平稳,并将备择假设定义为单位根序列
from statsmodels.tsa.stattools import adfuller,kpss adf = adfuller(data['销量']) #print(dftest) adfout = pd.Series(adf[0:4],index=['Test statistic','p-value','lag Users',\ 'Number of Observations Used']) print('ADF检测:',adfout) kpsstest=kpss(data['销量']) print('KPSS检测:',kpsstest)
四:序列随机性检验
如果一个序列是纯随机序列,那么他的序列值之间完全没有任何关系,这是一种理想的状态,实际上纯随机序列的样本自相关系数不会为零,但是接近于零,在零附件波动。
纯随机性检验也叫白噪声检验,一般是构造检验统计量来检验序列的随机性,常用的统计量有Q统计量,LB统计量等。有样本各延期数的自相关系数可以计算得到统计检验量,然后计算出对应的p值,如果p值显著大于显著性水平α,则表示该序列不能拒绝纯随机的原假设,可以停止对该序列分析了。
from statsmodels.stats.diagnostic import acorr_ljungbox print('白噪声检测结果:',acorr_ljungbox(diff1,lags=1)) #返回结果:[统计量,pvalue] from statsmodels.tsa import stattools stattools.q_stat #返回Ljung-Box Q统计量,用来做随机性检测
五:常用的时间序列模型
1,平稳时间序列分析
ARMA模型的全称是自回归移动平均模型,他是目前最常用的拟合模型平稳序列的模型,他又可以细分为AR模型,MA模型和ARMA模型,都可以看成是多元线性模型
1)自相关系数(ACF)
平稳AR(P)模型的自相关系数ρ(k) = cov(Xt,Xt-k)/σtσt-k 呈指数的速度衰减,始终有非零值,不会在k大于某个常数之后就恒等于零,这个就是平稳AR(P)模型的自相关系数ρ(k) 具有拖尾性
2)偏自相关系数(PACF)
对于平稳AR(P)模型,求出延迟k 期自相关系数ρ(k)时,实际上得到的并不是Xt与Xt-k之间单纯的相关关系,因为Xt还会受到中间k-1个随机变量Xt-1,Xt-2,... ,Xt-k的影响,所以ρ(k)实际上掺杂了其他变量对Xt与Xt-k的相关影响,为了单纯测算Xt-k 对 Xt的影响,引进了偏自相关系数。
平稳AR(P)模型偏自相关系数具有p阶截尾性,这个和自相关系数的拖尾性是AR(P)模型重要的识别依据!
1.1 AR模型
能够以以下结构表示的模型统称为p阶自回归模型,简称为AR(p)
xt = φ0+ φ1xt-1 +φ2xt-2+...+ φpxt-p + εt
即,在 t 时刻的随机变量Xt的取值 xt 是前 p 期xt-1,xt-1 , ... , xt-p的多元线性回归,认为xt主要受过去p期的序列值的影响,误差是当前的随机误差 εt,为零均值的白噪声序列-
1.2 MA模型
具有一下结构的模型称为q阶移动平均模型MA(q)
xt = μ +εt - θ1εt-1 - θ2εt-2 - ...- θqεt-q
在t时刻的随机变量Xt的取值xt 是前 q 期的随机误差εt-1 ,εt-2 ,...,εt-q的多元线性函数,误差项是当期的随机误差εt ,为零均值的白噪声序列,μ 是 序列{Xt}的均值,这里认为xt 主要是受过去q 期的误差项影响。
性质如下:
1.3 ARMA模型
如果满足以下结构的模型,则称为自回归平均模型ARMA(p,q)
xt = φ0+ φ1xt-1 +φ2xt-2+...+ φpxt-p + εt - θ1εt-1 - θ2εt-2 - ...- θqεt-q
在t时刻的随机变量Xt的取值xt 是前 p 期xt-1,xt-1 , ... , xt-p和前 q 期的随机误差εt-1 ,εt-2 ,...,εt-q的多元线性函数,误差项是当期的随机误差εt ,为零均值的白噪声序列,认为xt 主要是受过去p期的序列值和q 期的误差项的共同影响影响
ps:当q=0时,是模型;当p=0时,是MA(q)模型
平稳 ARMA模型性质如下:
六:平稳时间序列建模过程
1,计算ACF,PACF,自相关图和偏自相关图
2,ARMA模型识别,也称为模型定阶,由自相关系数和偏自相关系数性质,选择合适的模型
ARMA模型识别原则:
这样识别主观性比较大.
可以通过AIC,BIC来准则来得到p和q,这两个指标越小越好
很多参数估计问题均采用似然函数作为目标函数,当训练数据足够多时,可以不断提高模型精度,但是以提高模型复杂度为代价的,同时带来一个机器学习中非常普遍的问题——过拟合。所以,模型选择问题在模型复杂度与模型对数据集描述能力(即似然函数)之间寻求最佳平衡。
人们提出许多信息准则,通过加入模型复杂度的惩罚项来避免过拟合问题,此处我们介绍一下常用的两个模型选择方法——赤池信息准则(Akaike Information Criterion,AIC)和贝叶斯信息准则(Bayesian Information Criterion,BIC)。
AIC是衡量统计模型拟合优良性的一种标准,它建立在熵的概念上,提供了权衡估计模型复杂度和拟合数据优良性的标准。
通常情况下,AIC定义为:2K-Zln(L)
其中k是模型参数个数,L是似然函数。从一组可供选择的模型中选择最佳模型时,通常选择AIC最小的模型。
当两个模型之间存在较大差异时,差异主要体现在似然函数项,当似然函数差异不显著时,上式第一项,即模型复杂度则起作用,从而参数个数少的模型是较好的选择。
一般而言,当模型复杂度提高(k增大)时,似然函数L也会增大,从而使AIC变小,但是k过大时,似然函数增速减缓,导致AIC增大,模型过于复杂容易造成过拟合现象。目标是选取AIC最小的模型,AIC不仅要提高模型拟合度(极大似然),而且引入了惩罚项,使模型参数尽可能少,有助于降低过拟合的可能性。
BIC贝叶斯信息准则与AIC相似,用于模型选择。训练模型时,增加参数数量,也就是增加模型复杂度,会增大似然函数,但是也会导致过拟合现象,针对该问题,AIC和BIC均引入了与模型参数个数相关的惩罚项,BIC的惩罚项比AIC的大,考虑了样本数量,样本数量过多时,可有效防止模型精度过高造成的模型复杂度过高。
通常情况下,BIC = kln(n)-zln(L)
其中,k为模型参数个数,n为样本数量,L为似然函数。kln(n)惩罚项在维数过大且训练样本数据相对较少的情况下,可以有效避免出现维度灾难现象
参考:https://blog.csdn.net/lynnucas/article/details/47947943
#定阶,一般p,q最大值都不会超过数据长度的十分之一 pmax=int(len(data)/10) qmax=int(len(data)/10) bic_matrix=[] for p in range(pmax+1): tmp=[] for q in range(qmax+1): try: tmp.append(ARMA(data,(p,q)).fit().bic) except: tmp.append(None) bic_matrix.append(tmp) bic_data = pd.DataFrame(bic_matrix) p,q = bic_data.stack().idxmin() print('BIC最小的p和q值为:%s,%s'%(p,q))
3,模型检验
残差为白噪声序列
from statsmodels.stats.diagnostic import acorr_ljungbox #需要对模型进行残差检测是否为白噪声序列,满足才可以接着进行预测 resids = model.resid #模型残差 #要求残差为纯随机序列,也就是白噪声序列 print('残差的白噪声检测结果:',acorr_ljungbox(resids,lags=1)) #残差独立性检测,durbin_watson结果在2附近说明满足残差独立性 print('durbin_watson检测结果:',sm.stats.durbin_watson(resids)) # qq图,检测是否符合正态分布 qqplot(resids)
4,模型优化
5,模型应用,用来预测接下来短时间的数据序列
七:非平稳时间序列分析过程
我们上面说了平稳序列的分析过程,但是实际上在,我们遇到的大部分的序列大都是非平稳的,因此对非平稳序列分析更加普遍,真正项目中用到的也是如此。
对于非平稳时间序列,一般常用的模型有ARIMA模型,残差自回归模型,异方差模型。一般使用ARIMA更为普遍。
1,差分运算,对于非平稳时间序列,可以通过差分运算来变成差分平稳序列
- 相距一期的两个序列之间的值相减运算称之为1阶差分运算
- 相距 k 期的两个序列之间的值相减运算称之为k 步差分运算
2,ARIMA模型
差分运算具有强大的确定性信息提取能力,许多非平稳序列差分后会显示出平稳序列的性质,这时的非平稳序列称之为差分平稳序列。对差分平稳序列就可以使用ARMA模型进行拟合。ARIMA模型实质上就是差分运算和ARMA模型的组合。如果你对时间序列做d次差分才能得到一个平稳序列,
那么可以使用ARIMA(p,d,q)模型,其中d是差分次数。对于差分后的平稳序列,分析方法同平稳序列一样。