一文搞懂时间序列预测模型(2):ARIMA模型的理论与实践 |
您所在的位置:网站首页 › pom模型是理论模型吗 › 一文搞懂时间序列预测模型(2):ARIMA模型的理论与实践 |
本文通过一段时间的长江流量数据集来实战演示ARIMA模型的理论、建模及调参选择过程,其中包括数据准备、随机性、稳定性检验。本文旨在通过实践的操作过程,完成ARIMA模型的分享,相信大家也会通过此文而有所收获。 ARIMA的建模过程1,对时间序列数据绘图,观察是否为平稳时间序列。 2,若时间序列数据是平稳时间序列,则直接进行下一步,若不是平稳时间序列,则对数据进行差分,转化为平稳时间序列数据。 3,对平稳时间学列数据绘制自相关系数ACF和偏自相关系数PACF图,通过对自相关图和偏自相关图分析,获得AM参数和AR参数。 ARIMA模型介绍ARIMA模型是一种流行且广泛使用的时间序列预测统计方法。 ARIMA 是代表(Autoregressive Integrated Moving Average model )差分整合移动平均自回归模型,又称整合移动平均自回归模型(移动也可称作滑动),是时间序列预测分析方法之一。ARIMA(p,d,q)中,AR是“自回归”,p为自回归项数;MA为“滑动平均”,q为滑动平均项数,d为使之成为平稳序列所做的差分次数(阶数)。 一般概念-时间序列平稳性从统计学的角度来看,平稳性是指数据的分布在时间上平移时不发生变化。因此,非平稳数据显示了由于趋势而产生的波动,必须对其进行转换才能进行分析。例如,季节性会导致数据的波动,并可以通过“季节性差异”过程消除。 白噪声白噪声是由一组0均值,不变方差,相互独立的元素构成,当然可以对该元素的分布进行假设(如高斯分布)。白噪声如同他的名字听起来一样是杂乱无章的,各元素之间没有任何联系。由白噪声组成的序列是随机游走,随机游走序列的自相关特点是其自相关函数几乎为1并且衰减很慢,这种特征我们称为长记忆性。 白噪声表示数据之间没有相关性,如果时间序列都是由白噪声数据构成的,那么时间序列的数据就不能是自相关的。 自回归模型AR自回归模型描述当前值与历史值之间的关系,用变量自身的历史时间数据对自身进行预测。自回归模型必须满足平稳性的要求。 自回归模型首先需要确定一个阶数p,表示用几期的历史值来预测当前值。p阶自回归模型的公式定义为: 自回归模型有很多的限制: 1、自回归模型是用自身的数据进行预测 2、时间序列数据必须具有平稳性 3、自回归只适用于预测与自身前期相关的现象 移动平均模型MA移动平均模型关注的是自回归模型中的误差项的累加 ,q阶自回归过程的公式定义如下: 对于非平稳序列可以使用差分法使得数据更平稳,常用的方法有一阶差分和二阶差分法。一阶差分公式: 自回归模型AR和移动平均模型MA模型相结合,就得到了自回归移动平均模型ARMA(p,q),计算公式如下: 将自回归模型、移动平均模型和差分法结合,我们就得到了差分自回归移动平均模型ARIMA(p,d,q),其中d是需要对数据进行差分的阶数。 ARIMA实战 ARIMA的一般步骤1,对时间序列数据进行绘图,检验数据的平稳性,对非平稳时间序列数据,要先进行差分,直到时间序列为平稳时间序列。 2,对平稳后的数据进行白噪声检验,白噪声是指零均值常方差的随机平稳序列。 3,如果是平稳非白噪声序列就计算ACF(自相关系数)、PACF(偏自相关系数),进行ARIMA模型识别。 4,对识别好的模型,确定模型参数,进行时间序列进行预测,并对模型结果进行评价。 Python 实现ARIMA模型 1、导入必要的函数库 import os import warnings import matplotlib.pyplot as plt import numpy as np import pandas as pd import datetime as dt import math from pandas.plotting import autocorrelation_plot from statsmodels.tsa.statespace.sarimax import SARIMAX from sklearn.preprocessing import MinMaxScaler from IPython.display import Image from statsmodels.graphics.tsaplots import plot_acf, plot_pacf from statsmodels.tsa.stattools import adfuller # adf检验库 from statsmodels.stats.diagnostic import acorr_ljungbox # 随机性检验库 from statsmodels.tsa.arima_model import ARMA %matplotlib inline plt.rcParams['figure.figsize'] = (12,6) pd.options.display.float_format = '{:,.2f}'.format np.set_printoptions(precision=2) warnings.filterwarnings("ignore") # specify to ignore warning messages 2、导入数据 flow_data=pd.read_csv(r".k\data\TimeSeries\monthly-flows-chang-jiang-at-hankou.csv") flow_data.head(3)
|
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |