目录

一、时间序列的平稳性与差分法

1.时间序列的平稳性:

2.平稳性检验

3.纯随机性检验

4.差分法

二、平稳时间序列模型

1.AR模型

2.MR模型

3.ARMA模型

4.平稳时间序列建模步骤

(1)自相关系数(ACF)

(2)偏自相关系数(PACF)

(3)平稳时间序列建模步骤

三、非平稳时间序列分析

1.ARIMA模型

2.用Python实现ARIMA

(1)检验序列平稳性

(2)对原始序列进行一阶差分,并进行平稳性和白噪声检验

(3)对一阶差分之后的平稳非白噪声序列拟合ARMA模型


常用按时间序列排序的一组随机变量X1,X2,...,Xt来表示一个随机时间的时间序列,简记为{Xt};用x1,x2,...,xn或{xt,t=1,2,...,n}表示该随机序列的n个有序观察值,称之为序列长度为n的观察值序列。时间序列分析的目的就是给定一个已经被观测的时间序列,观测该序列的未来值。

一、时间序列的平稳性与差分法

1.时间序列的平稳性:

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

或者说一个时间序列,如果均值没有系统的变化(无趋势)、方差没有系统变化,且严格消除了周期性变化,就称之是平稳的。

2.平稳性检验

对序列的平稳性的检验有以下几种方法:

(1)时序图检验

      根据平稳时间序列的均值和方差都为常数的性质,平稳序列的时序图显示该序列值始终在一个常数附近随机波动,而且波动的范围有界;如果有明显的趋势性或者周期性那它通常不是平稳序列。

(2)自相关图检验

      平稳序列具有短期相关性,这个性质表明对平稳序列而言通常只有近期的序列值对现时值得影响比较明显,间隔越远的过去值对现时值得影响越小。

      随着延迟期数k的增加,平稳序列的自相关系数会比较快的衰减趋向于零,并在零附近随机波动,而非平稳序列的自相关系数衰减的速度比较慢,这就是利用自相关图进行平稳性检验的标准。

(3)单位根检验

      单位根检验是指检验序列中是否存在单位根,因为存在单位根就是非平稳时间序列了。

3.纯随机性检验

       纯随机性检验也称白噪声检验,一般是构造检验统计量来检验序列的纯随机性,常用的检验统计量有 Q 统计量、LB 统计量,由样本各延迟期数的自相关系数可以计算得到检验统计量,然后计算出对应的 p值,如果p值显著大于显著性水平α,则表示该序列不能拒绝纯随机的原假设,可以停止对该序列的分析。
关于时间序列平稳性还可以参考: 理解:时间序列的平稳性 - ev2020 - 博客园

4.差分法

通常情况下,非平稳序列可通过 差分变换 转化为平稳序列
p阶差分——相距一期的两个序 列值之间的减法运算称为 1 阶差分运算;
k步差分—— 相距k期的两个序列值之间的减法运算称为k步差分运算

例如,时间序列的数值为线性增长的(1,2,3,4,5,6,7,8),经过一阶差分以后,新的时间序列的数值为(1,1,1,1,1,1,1),就成为稳定的时间序列了。 

二、平稳时间序列模型

自回归移动平均模型(ARMA模型)是目前最常用的拟合平稳序列的模型。它又可以细分为AR模型、MA模型和ARMA模型这3大类,都可以看做是多元线性回归模型。

1.AR模型

即在 t 时刻的随机变量Xt的取值x_{t}是前p期x_{t-1},x_{t-2},...,x_{t-p}的多元线性回归,认为x_{t}主要是受过去p期的序列值的影响。误差项是当期的随机干扰\varepsilon _{t},为零均值白噪声序列。

2.MR模型

即在 t 时刻的随机变量Xt的取值x_{t}是前q期的随机扰动\varepsilon _{t-1},\varepsilon _{t-2},...,\varepsilon _{t-q} 的多元线性函数,误差项是当期的随机干扰\varepsilon _{t},为零均值白噪声序列,\mu是序列{Xt}的均值。认为x_{t}主要是受过去q期的误差项的影响。

3.ARMA模型

具有如下结构的模型称为自回归移动平均模型,简记为ARMA(p,q):

即在 t 时刻的随机变量Xt的取值x_{t}是前p期x_{t-1},x_{t-2},...,x_{t-p}和前q期\varepsilon _{t-1},\varepsilon _{t-2},...,\varepsilon _{t-q}的多元线性函数,误差项是当期的随机干扰\varepsilon _{t},为零均值白噪声序列。认为x_{t}主要是受过去p期的序列值和过去q期的误差项的共同影响。

4.平稳时间序列建模步骤

(1)自相关系数(ACF)

公式1:

公式1,是自相关系数的定义,表示间隔为K的时间序列之间的相关系数值。

公式2:

公式2是AR(K)模型推导的自相关系数,是需要用数据进行求近似值。

公式2前题是平稳性时间序列,可以推导出公式2

(2)偏自相关系数(PACF)

(3)平稳时间序列建模步骤

由AR模型、MA模型和ARMA模型的 自相关系数和偏自相关系数 的性质,选择出合适的模型。
AR、MA和ARMA模型自相关系数和偏自相关系数的性质如下:

参考:自相关系数和偏相关系数 - 知乎

三、非平稳时间序列分析

实际上,在自然界中绝大部分序列都是非平稳的。因而对非平稳序列的分析更普遍、更重要,创造出来的分析方法也更多。对非平稳时间序列的分析方法可以分为确定性因素分解的时序分析和随机时序分析两大类 。确定性因素分解的方法把所有序列的变化都归结为四个因素(长期趋势、季节变动、循环变动和随机波动)的综合影响。

1.ARIMA模型

差分运算具有强大的确定性信息提取能力,许多非平稳序列差分后会显示出平稳序列的性质,这时称这个非平稳序列为差分平稳序列。对差分平稳序列可以使用ARMA模型进行拟合。
ARIMA模型的实质就是差分运算与ARMA模型的组合,掌握了ARMA模型的建模方法和步骤以后,对序列建立ARIMA模型是比较简单的。   
差分平稳时间序列建模步骤如下:

2.用Python实现ARIMA

(1)检验序列平稳性

a.导入数据

import pandas as pd
# 参数初始化
discfile = './Python数据分析与挖掘实战(第2版)/chapter5/demo/data/arima_data.xls'
forecastnum = 5

# 读取数据,指定日期列为指标,pandas自动将“日期”列识别为Datetime格式
data = pd.read_excel(discfile, index_col = u'日期')

b.画出时序图和自相关图

# 时序图
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
data.plot()
plt.show()

# 自相关图
from statsmodels.graphics.tsaplots import plot_acf
plot_acf(data).show()

时序图显示该序列具有明显的单调递增趋势,可以判断为是非平稳序列;
自相关图显示自相关系数长期大于零,说明序列间具有很强的长期相关性;
结论: 非平稳序列

c.平稳性检测

# 平稳性检测
from statsmodels.tsa.stattools import adfuller as ADF
print(u'原始序列的ADF检验结果为:', ADF(data[u'销量']))
# 返回值依次为adf、pvalue、usedlag、nobs、critical values、icbest、regresults、resstore
原始序列的ADF检验结果为: (1.8137710150945263, 0.9983759421514264, 10, 26, {'1%': -3.7112123008648155, '5%': -2.981246804733728, '10%': -2.6300945562130176}, 299.46989866024177)

p值为0.9984显著大于0.05,说明该序列判断为非平稳序列(非平稳序列一定不是白噪声序列)。

(2)对原始序列进行一阶差分,并进行平稳性和白噪声检验

# 差分后的结果
D_data = data.diff().dropna()
D_data.columns = [u'销量差分']
D_data.plot()  # 时序图
plt.show()
plot_acf(D_data).show()  # 自相关图
from statsmodels.graphics.tsaplots import plot_pacf
plot_pacf(D_data).show()  # 偏自相关图
print(u'差分序列的ADF检验结果为:', ADF(D_data[u'销量差分']))  # 平稳性检测

差分序列的ADF检验结果为: (-3.1560562366723532, 0.02267343544004886, 0, 35, {'1%': -3.6327426647230316, '5%': -2.9485102040816327, '10%': -2.6130173469387756}, 287.5909090780334)

结果显示,一阶差分之后的序列的时序图在均值附近比较平稳的波动、自相关图有很强的短期相关性、单位根检验p值小于0.05;所以一阶差分之后的序列是平稳序列。

对一阶差分做白噪声检验

# 白噪声检验
from statsmodels.stats.diagnostic import acorr_ljungbox
print(u'差分序列的白噪声检验结果为:', acorr_ljungbox(D_data, lags=1))  # 返回统计量和p值
差分序列的白噪声检验结果为:      lb_stat  lb_pvalue
1  11.304022   0.000773

输出的p值远小于0.05,所以一阶差分之后的序列是平稳非白噪声序列。

(3)对一阶差分之后的平稳非白噪声序列拟合ARMA模型

模型定阶计算ARMA(p,q)当 p 和 q 均小于等于 5 的所有组合的 BIC 信息量,取其中 BIC 信息量达到最小的模型阶数。

from statsmodels.tsa.arima.model import ARIMA

# 定阶
data[u'销量'] = data[u'销量'].astype(float) 
pmax = int(len(D_data)/10)  # 一般阶数不超过length/10
qmax = int(len(D_data)/10)  # 一般阶数不超过length/10
bic_matrix = []  # BIC矩阵
for p in range(pmax+1):
    tmp = []
    for q in range(qmax+1):
        try:  # 存在部分报错,所以用try来跳过报错。
            tmp.append(ARIMA(data, (p,1,q)).fit().bic)
        except:
            tmp.append(None)
    bic_matrix.append(tmp)

bic_matrix = pd.DataFrame(bic_matrix)

确定p,q值分别为0,1

from statsmodels.tsa.arima.model import ARIMA
model = ARIMA(data, (0,1,1)).fit()  # 建立ARIMA(0, 1, 1)模型
print('模型报告为:\n', model.summary2())
print('预测未来5天,其预测结果、标准误差、置信区间如下:\n', model.forecast(5))

因为我的python包有冲突,没有跑出最后结果,但是这个方法是没错的。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐