时间序列分析-ARIMA模型(python)

时间序列概念:在生产和科学研究中,对某一个或者一组变量 进行观察测量,将在一系列时刻 所得到的离散数字组成的序列集合,称之为时间序列。时间序列分析是根据系统观察得到的时间序列数据,通过曲线拟合和参数估计来建立数学模型的理论和方法。时间序列分析常用于国民宏观经济控制、市场潜力预测、气象预测、农作物害虫灾害预报等各个方面。

常用的时间序列模型有很多种,在本文中主要研究ARIMA模型,也是实际案例中最常用的模型,这种模型主要针对平稳非白噪声序列数据。

主要流程:

步骤1:获取被观测系统时间序列数据;

import pandas as pd
import statsmodels.api as sm
dta=[10930,10318,10595,10972,7706,6756,9092,10551,9722,10913,11151,8186,6422,
6337,11649,11652,10310,12043,7937,6476,9662,9570,9981,9331]
dta=pd.Series(dta)
dta.index=pd.Index(sm.tsa.datetools.dates_from_range('1996','2019'))
dta

步骤2:对数据绘图,观测是否为平稳时间序列( 一般都不平稳);对于非平稳时间序列要先进行d阶差分运算,化为平稳时间序列;

import matplotlib.pyplot as plt
dta.plot(figsize=(12,8))
from statsmodels.graphics.tsaplots import plot_acf
plot_acf(dta)

画出ACF图,由ACF图可以看出,自相关系数长期大于0,说明序列具有很强的长期相关性,所以趋势并不平稳,因此要做差分运算,依次测试。

diff1 = dta.diff(1).dropna()
diff1.columns = [u'销量差分']
diff1.plot()

此处做了1阶差分,观察到图形已大致趋于平稳。接下来做白噪声检验。

from statsmodels.stats.diagnostic import acorr_ljungbox
print(u'差分序列的白噪声检验结果为:', acorr_ljungbox( diff1, lags=1))

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

步骤3:经过第二步处理,已经得到平稳时间序列。要对平稳时间序列分别求得其自相关系数ACF 和偏自相关系数PACF ,通过对自相关图和偏自相关图的分析,得到最佳的阶层 p 和阶数 q;

ACF图:

from statsmodels.graphics.tsaplots import plot_acf
plot_acf(diff1)

PACF图:

from statsmodels.graphics.tsaplots import plot_pacf
plot_pacf(dta)

经观察,一阶差分序列的ACF显示出1阶截尾,PACF图显示出1阶截尾,因此考虑p=1,q=1,即对一阶差分序列拟合ARMA(1,1)模型,即对原始序列拟合ARIMA(1,1,1)模型。

利用BIC定阶进一步确定阶数,此处还需做一步研究,暂且跳过。

最终求得P为0。

步骤4:拟合ARIMA模型 (0,1,1)

from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(diff1, (0,1,1)).fit()
model.summary2()

步骤5:预测

model.forecast(5)
发布于 2020-01-12 15:03