在时间序列模型中,d代表了要对数据进行差分的次数,以使数据变为平稳。一个时间序列如果其均值和方差随时间改变,则该序列为非平稳的。平稳是大多数时间序列分析要求的原始数据的基本特性。
确定d的常见方法有:
总的来说,使数据平稳后的差分次数即为我们要定的参数d。
首先计算自相关系数ACP和偏自相关系数PACF。
模型 | ACF | PACF |
---|---|---|
AR(p) | 衰减趋于零(几何型或振荡型) | p阶后截尾 |
MA(q) | q阶后截尾 | 衰减趋于零(几何型或振荡型) |
ARMA(p,q) | q阶后衰减趋于零(几何型或振荡型) | p阶后衰减趋于零(几何型或振荡型) |
在得到自相关系数ACP和偏自相关系数PACF后,我们可以大致确定阶数p,q。但此时建立模型未必是最优的。一个好的模型通常要求残差序列方差较小,同时模型相对简单,即要求阶数较低。
因此需要一些准则来比较不同阶数的模型之间的优劣,从而确定最合适的阶数。以下是两种常用的定阶准则,此处以确定p举例:
Akaike信息准则(AIC)
Akaike信息准则(Akaike Information Criterion,AIC)是一种由日本统计学家赤池弘次(Hirotugu Akaike)在1973年提出的,评估统计模型优良性的准则。
AIC是基于信息理论的,它努力在解释数据的复杂性和模型的优良性(在拟合数据方面的能力)之间找到平衡。所以,AIC不仅考虑了模型的拟合程度,也考虑了模型的复杂度。
AIC的定义公式为:
其中:
对一组给定的模型,我们计算出每个模型的AIC值,然后选取具有最小AIC值的模型作为最优模型。
值得注意的是,AIC准则只能用于同一数据集的模型之间进行比较,并不能用于不同数据集之间的比较,因为AIC的计算依赖于数据的数量。
贝叶斯信息准则(BIC)
贝叶斯信息准则(Bayesian Information Criterion, BIC)是一种用于模型选择的准则。其基本思想是在选择模型时既要考虑模型的拟合度,也要考虑模型的复杂性。
其中, 是模型的最大似然估计值, 是模型的自由参数数量, 是样本的观测数量(数据点数量)。
使得BIC达到最小值的p即为该准则下的最优模型的阶数。
在python中,我们可以借助工具帮助我们定阶,确定ARIMA模型中的(p,d,q)阶数在Python中一般可以分为以下几步:
检验数据的平稳性:首先,需要确定d,也就是数据需要被差分的次数以达成平稳。这通常通过绘制时间序列图观察数据是否存在明显的趋势或者季节性以及进行ADF等单位根检验来完成。
1from statsmodels.tsa.stattools import adfuller
2def test_stationarity(timeseries):
3 dftest = adfuller(timeseries, autolag='AIC')
4 print(f'ADF Statistic: {dftest[0]}')
5 print(f'p-value: {dftest[1]}')
6test_stationarity(series.values)
1from statsmodels.tsa.stattools import adfuller
2def test_stationarity(timeseries):
3 dftest = adfuller(timeseries, autolag='AIC')
4 print(f'ADF Statistic: {dftest[0]}')
5 print(f'p-value: {dftest[1]}')
6test_stationarity(series.values)
如果p值小于显著性水平(比如0.05),我们就可以说原来的序列是稳定的,否则,它就是不稳定的,你可能需要进行一阶或二阶差分,直到数据变得平稳。
输出结果:
1ADF Statistic: -9.298574759765579
2p-value: 1.1285451053950947e-15
1ADF Statistic: -9.298574759765579
2p-value: 1.1285451053950947e-15
确定AR阶数p和MA阶数q:一旦数据变得平稳,就可以确定AR部分和MA部分的阶数了。这通常通过绘制怠性自相关函数(PACF)和自相关函数(ACF)的图形来实现。
1from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
2plot_acf(series)
3plot_pacf(series)
4plt.show()
1from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
2plot_acf(series)
3plot_pacf(series)
4plt.show()
选择模型:最后,可以通过分别尝试不同的(p,d,q)组合来找到最好的ARIMA模型。最常见的标准是使用AIC或者BIC,更小的AIC或BIC值通常意味着更好的模型。
1import itertools
2p = d = q = range(0, 2)
3pdq = list(itertools.product(p, d, q))
4
5for param in pdq:
6 try:
7 model_arima = ARIMA(train, order=param)
8 model_arima_fit = model_arima.fit()
9 print(param, model_arima_fit.aic)
10 except:
11 continue
1import itertools
2p = d = q = range(0, 2)
3pdq = list(itertools.product(p, d, q))
4
5for param in pdq:
6 try:
7 model_arima = ARIMA(train, order=param)
8 model_arima_fit = model_arima.fit()
9 print(param, model_arima_fit.aic)
10 except:
11 continue
对每一种可能的(p,d,q)组合拟合ARIMA模型,并选择具有最小AIC值的模型。
这就是在Python中确定ARIMA中(p,d,q)阶数的基本步骤。同时,请注意,如果数据具有明显的季节性,可能需要使用SARIMA模型,而不仅仅是ARIMA模型。
为了确定季节性自回归移动平均模型的季节性参数(P,D,Q,s),我们可以按照如下步骤操作:
除了以上步骤,我们通常还需要使用信息准则(如AIC或者BIC)来确定参数的最佳组合,并进行残差检验以验证模型的充分性。
最小二乘法是一种常用的参数估计方法,主要适用于线性模型。在时间序列模型中,这种方法的目标是最小化模型预测值与实际观测值的差的平方和。
对于不同的时间序列模型,我们将每一个时间点的数据代入其公式可以得到一组方程,然后通过最小化每个方程预测误差的平方和来求解参数。
最大似然法是另一种参数估计方法,它假设数据符合某种特定的分布,然后寻找一组参数值使得观察到的数据出现的概率(即似然)最大。在应用最大似然法时,我们需要假设误差项 满足特定的概率分布,通常假设为正态分布。
例如,对于AR模型的参数,我们需要找到一组参数值 ,使得在该参数值下,观察到的数据序列出现的概率最大。这需要计算似然函数,并使用优化算法(如梯度下降或牛顿法)来最大化该函数。
无论是使用最小二乘法还是最大似然法,求解出模型参数后,都需要进行模型的诊断检验,例如残差的正态性检验,白噪声检验等,以确保模型的合理性和可靠性。
在建立模型后,需要对其进行检验以确认模型适合于数据,并且已经充分挖掘了数据中的所有信息。主要的检验方法包括以下几种: