数据分析方法(4)——时序分析

时间序列分析的方法有许多,深度学习中有LSTM算法,机器学习中有XGBoost算法,这里我们主要讨论经典的时间序列算法ARIMA算法。
时间序列指的是一系列时刻所对应的离散的一组观测变量x,且这组变量与时间变化呈现较大的关系即f=x(t),时序分析就是根据过往收集到的信息预测未来的某一时刻的观测变量值。
一、适用条件
ARIMA模型要求数据满足平稳性且非白噪声。
原因为ARIMA模型的原理可以简化为,简单来说可以理解为每一天都没有什么大变化,那么明天的情况就应该是今天的情况在加上一个随机误差产生的。因此平稳性就是要求每一天的变化与前一天的变化基本成线性关系,不能是平方或对数等更为复杂的关系;白噪声就是再要求每天的数据与之间的数据有关,并非单纯随机的一个结果。
二、平稳性要求
时间序列的平稳性分为严平稳和弱平稳:
严平稳:对于一切时间间隔k和时间点均存在
与
的分布均相同,则称
严平稳。简单地可以理解为,在每一个时刻与之前任意时刻的检测值均相差一个固定值。
弱平稳:满足均值函数在所有时间上为常数(或变化不大);任意两点的相关系数只与间隔有关与起始点无关,不严谨地可以理解为而且这个差值与初始值x(t)无关。
一般地,由于严平稳的数据都很难得到,所以数据得到弱平稳或处理后得到弱平稳就可以适用ARIMA算法了。
三、平稳性检验
数据平稳性检验一般采用ADF算法(当然也可以凭肉眼直接看 (^∀^)),也叫作单位根检验。其全称叫作Augmented Dickey-Fuller test即 增广 Dickey-Fuller检验。
1、原理
假设一个时序分析的回归模型结果为,前面我们说在弱平稳状态下我们希望每个时间的测量值均与初始值X(t)无关,可以发现当β=1时,每一个时间的值均与其之前的值有关,因此数据不平稳,只有当β<1时才能将前述的影响主键削平,数据平稳。
2、实现
ADF检验也是依赖于假设检验进行实现的(原假设H0:原序列中至少存在一个单方根),由于算法成熟很多平台都有直接的包可以调用,这里以Python为例:
返回的结果为(adf,pvalue,usedlag,nobs,icbest,resstore)
adf: t检验的检验统计量
pvalue:置信区间
usedlag:使用的滞后数
nobs:使用的观测值数目
icbest:完整的假设回归值
resstore:结果的dummy
举例:
(-15.436,2.906e-28,0,198,{'5%':-2.876,'1%':-3.464,'10%':-2.575},1165.155)
显然-15.436<5%的拒绝域-2.876,且p值也很小因此要拒绝原假设,该序列平稳。
四、数据稳态化
当数据为非稳定的序列,可以通过差分的方式将序列稳定化(顺带提一句ARIMA中的I就代表差分,一般差分的阶数用d表示),差分即为由t时刻的值减去t-1时刻的值,此时获得的新序列就是原序列的一阶差分;此序列再进行一次差分运算获得的新序列就是原序列的二阶差分,以此类推经过d次差分后序列平稳就是d阶差分。
一般地,d=1进行一次差分即可,每进行一次差分原序列都会损失一定的数据。
五、自相关系数(ACF)和偏自相关系(PACF)
1、概念
自相关系数:前k时间间隔的值X(t-k)对现在时刻X(t)产生的影响,即比较X(t-k)与X(t)的相关程度。公式为:
如果时序分析是p阶的自相关的,即当前的X(t)受到前p个值影响,这样的模型成为AR(p):

偏自相关系数:前k时间间隔的值X(t-k)对现在时刻X(t)产生的影响,但要去除X(t)与X(t-k)之间的X(t-1)至X(t-k+1)的k个数的影响。公式为:

由于X(t)不仅仅只对X(t-k)产生影响,也会对X(t+1)等产生影响,自相关系数相当于把这些影响因素累加了,而偏相关系数是排出了累加的影响,直接判断二者之间的相关程度。
[注:虽然我们希望序列是平稳的,即X(t)不产生影响,但实际上很难,平稳只是希望这样的影响程度很弱即可]
如果时序分析受到前q阶偏相关影响,即X(t)与前q个值的移动平均有关,这样的模型称为MA(q):
如果时序分析即收到自相关影响,又收到偏相关影响,只需要综合二者即可,模型为ARMA(p,q):
2、绘图定阶
根据上述的分析,我们看到确定时序分析需要确定p和q的值,这里我们可以通过绘制acf图和pacf图来进行(即绘制X(t)与之前k个点的相关系数值),在python中有成熟的方法可以直接调用:
图像结果的判断如图:

拖尾:单调递减或者震荡衰减
截尾:在某一阶后突然衰减到0附近
举例,上图为ACF图,下图为PACF图:

在这张图中ACF拖尾,PACF1阶截尾,应当选用MA(1)或者说ARMA(0,1)
3、AIC和BIC准则
上述的判断过程具有主观偏向性,客观来说可以使用AIC和BIC准则对参数选取进行判断。在已知回归方程的基础上判断参数选择的优良性并尽量减少过拟合。当AIC和BIC计算结果最小时,结果更优。
式中k为模型复杂度(参数数量),L为似然函数,n为样本数量,BIC适合于样本数量较多的数据。
在python中的调用如下:
结果将返回AIC和BIC推荐的p、q值。
六、白噪声检验
1、自相关图(ACF)
白噪声检验应当在平稳性检验之后就进行,但如果不做直接进行时序分析问题也不大(*´ー`),白噪声是指序列完全随机,进行分析的意义不大,根据定义我们可以看到此时ACF的图就会呈现出“0阶截尾”即只有自己与自己相关其他都无关的状态。(换句话说不做白噪声检验,进行到这里会发现自己之前的分析都白费了罢了 ૮₍ •ᴗ•₎ა )

2、Ljung-Box检验
总体思路与ACF图十分相近,我们知道当一个序列为白噪声时,其延迟任意间隔的自相关系数相等且均等于0,因此我们可以构造一个假设检验,原假设H0为所有自相关系数相等且等于0。python代码如下:
式中x为测试序列,lags为测试最大的延迟间隔,boxpierce为是否返回boxpierce测试的值,该测试方法时lb测试的前身,lb测试优化了对于小样本的改进,return_df表示是否返回dataframe还是返回tuple.
结果返回为(lbstart,lb_pvalue,bp_start,bp_pvalue)分别为lb的检验值,p值,bp测试的检验值,p值。如果所有的p值始终大于5%,则可以说明为白噪声,否则就为非白噪声。