ARIMA时间序列建模过程——原理及python实现_第1页
ARIMA时间序列建模过程——原理及python实现_第2页
ARIMA时间序列建模过程——原理及python实现_第3页
ARIMA时间序列建模过程——原理及python实现_第4页
ARIMA时间序列建模过程——原理及python实现_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ARIMA时间序列建模过程一一原理及python实现ARIMA模型的全称叫做自回归查分移动平均模型,全称是(ARIMA,AutoregressiveIntegratedMovingAverageModel),是统计模型(statisticmodel)中最常见的一种用来进行时间序列预测的模型,AR、MA、ARMA模型都可以看作它的特殊形式。1. ARIMA的优缺点优点:模型十分简单,只需要内生变量而不需要借助其他外生变量。缺点:要求时序数据是稳定的(stationary),或者是通过差分化(differencing)后是稳定的;本质上只能捕捉线性关系,而不能捕捉非线性关系。2. ARIMA的参数

2、与数学形式ARIMA模型有三个参数:p,d,q。p-代表预测模型中采用的时序数据本身的滞后数(lags),也叫做AR/Auto-Regressive项;d-代表时序数据需要进行几阶差分化,才是稳定的,也叫Integrated项;q-代表预测模型中采用的预测误差的滞后数(lags),也叫做MA/MovingAverage项。差分:假设y表示t时刻的Y的差分。ifd=0,yt=Yt,ifd=1,yt=Yt-Yt-1,ifd=2,yt=(Yt-Yt-1)-(Yt-1-Yt-2)=Yt-2Yt-1+Yt-2ARIMA的预测模型可以表示为:Y的预测值=白噪音+1个或多个时刻的加权+一个或多个时刻的预测误

3、差。假设p,q,d已知,ARIMA用数学形式表示为:yt?=w?1?yt-1+.+?p?yt-p+0l?et-1+.+怒t-q其中,?表示AR的系数,裱示MA的系数3.Python建模#构建初始序列importnumpyasnpimportmatplotlib.pyplotaspltimportstatsmodels.apiassmfromstatsmodels.graphics.tsaplotsimportacf,pacf,plot_acf,plot_pacffromstatsmodels.tsa.arima_modelimportARMAfromstatsmodels.tsa.arima_

4、modelimportARIMA#序列化time_series_=pd.Series(151.0,188.46,199.38,219.75,241.55,262.58,328.22,396.26,442.04,517.77,626.52,717.08,824.38,913.38,1088.39,1325.83,1700.92,2109.38,2499.77,2856.47,3114.02,3229.29,3545.39,3880.53,4212.82,4757.45,5633.24,6590.19,7617.47,9333.4,11328.92,12961.1,15967.61)time_se

5、ries_.index=pd.Index(sm.tsa.datetools.dates_from_range('1978','2010')time_series_.plot(figsize=(12,8)plt.show()3.1 异常值及缺失值处理异常值一般采用移动中位数方法:frompandasimportrolling_medianthreshold=3#指的是判定一个点为异常的阈值df'pandas'=rolling_median(df'u',window=3,center=True).fillna(method='

6、bfill').fillna(method='ffill')#df'u'是原始数据,df'pandas'是求移动中位数后的结果,window指的是移动平均的窗口宽度difference=np.abs(df'u'-df'pandas')outlier_idx=difference>threshold缺失Q股是用均值代替(若连续缺失,且序列不平稳,求查分时可能出现nan)或直接删除。3.2 判断是时序数据是稳定的方法一般是观察时序图(稳定的数据是没有趋势(trend),没有周期性(seasonality)

7、的;即它的均值,在时间轴上拥有常量的振幅,并且它的方差,在时间轴上是趋于同一个稳定的值的。该方式并不严谨)或单位跟检测(ADF是一种常用的单位根检验方法,他的原假设为序列具有单位根,即非平稳,对于一个平稳的时序数据,就需要在给定的置信水平上显著,拒绝原假设。如果ADF统计量比临界值的值小,则可在该显著性水平下,拒绝原序列存在单位根的原假设,即原序列是平稳的。反之,则接受原假设,是非平稳序列)确定。ADF检验:t=sm.tsa.stattools.adfuller(time_series_log,)#ADF检测output=pd.DataFrame(index='TestStatisti

8、cValue',"p-value","LagsUsed","NumberofObservationsUsed","CriticalValue(1%)","CriticalValue(5%)","CriticalValue(10%)”,columns='value')output'value''TestStatisticValue'=t0output'value''p-value'=t1output&

9、#39;value''LagsUsed'=t2output'value''NumberofObservationsUsed'=t3output'value''CriticalValue(1%)'=t4'1%'output'value''CriticalValue(5%)'=t4'5%'output'value''CriticalValue(10%)'=t4'10%'print(output)#gu

10、t#valueTestStatisticValue0.807369p-value0.991754LagsUsed1NumberofObservationsUsed31CriticalValue(1%)-3.66143CriticalValue(5%)-2.96053CriticalValue(10%)-2.619323.3 不平稳处理1)对数处理。对数处理可以减小数据的波动;time_series_log=np.log(time_series_)time_series_log.plot(figsize=(8,6)v0=time_series_log0print(np.exp(time_seri

11、es_log)plt.show()2)差分。一般来说,非纯随机的时间序列经过一阶差分或二阶差分就会变得平稳。在保证ADF检验的p<0.01的情况下,阶数越小越好,否则会带来样本减少、还原序列麻烦、预测困难等问题。time_series=time_series_log.diff(1)time_series=time_series.dropna(how=any)time_series.plot(figsize=(8,6)plt.show()3.4 参数确定?关于pdq的选择一般是通过计算自相关系数(acf)和偏相关系数确定(pacf),观察两个相关系数图确定,平稳的序列的自相关图和偏相关图要

12、么拖尾,要么是截尾。截尾就是在某阶之后,系数都为0或趋于0,拖尾就是有一个缓慢衰减的趋势,但是不都为0。自相关系数ACF二偏相关系数PACF;模型选择拖尾p阶截尾AR(p)q阶截尾拖尾MA(q)p阶拖尾q阶拖尾ARMA(p,q)同时,还可利用aic、bic统计量自动确定plot_acf(time_series)#acf图plot_pacf(time_series)#pacf图plt.show()#bic最小化选择最优参数,aic同理defproper_model(data_ts,maxLag):#init_bic=sys.maxint/python2init_bic=sys.maxsizein

13、it_p=0init_q=0forpinnp.arange(maxLag):forqinnp.arange(maxLag):model=ARMA(data_ts,order=(p,q)try:results_ARMA=model.fit()except:continuebic=results_ARMA.bicifbic<init_bic:init_p=pinit_q=qinit_bic=bicreturninit_bic,init_p,init_q3.5 模型拟合b,p,q=proper_model(time_series,10)arima_mod=ARIMA(time_series_,

14、order=(p,0,q)arma_mod=ARMA(time_series_,order=(p,q)result_arma=arma_mod.fit()3.6 模型检测假设检验,判断(诊断)残差序列是否为白噪声序列从而确定模型优劣。Ljung-Boxtest是对randomness的检验,或者说是对时间序列是否存在滞后相关的一种统计检验。对于滞后相关的检验,我们常常采用的方法还包括计算ACF和PCAF并观察其图像,但是无论是ACF还是PACF都仅仅考虑是否存在某一特定滞后阶数的相关。LB检验则是基于一系列滞后阶数,判断序列总体的相关性或者说随机性是否存在。给定置信值a(0.05、0.01.)

15、,如果p值大于a值则接受原假定,即序列为白噪声序列,否认序列存在相关性。fromstatsmodels.stats.diagnosticimportacorrljungboxp_value=acorr_ljungbox(result_arima.resid.values.squeeze(),lags=5)1print(p_value)3.7 模型预测result_arma_pre=result_arma.predict(start='2011',end='2011')result_arima=arima_mod.fit()result_arima_pre=res

16、ult_arima.predict(start='2011',end='2011')print(result_arma_pre)print(result_arima_pre)如果对序列使电了差分,最后则需要对结果进行还原操作:# print(result_arma_pre)# v0=time_series_log0# realV=口# realI=口# preV=口# preI=口# realV.append(v0)# preV.append(v0)# foriinrange(len(time_series_log):# realI.append(str(tim

17、e_series_log.indexi).split('')0.split('-')0)# preI.append(str(time_series_log.indexi).split('')0.split('-')0)# foriinrange(len(time_series):# v=v0+time_seriesi# v0=v# realV.append(v)# preV.append(v)# v1=realVlen(realV)-1# foriinrange(len(result_arma_pre):# v=v1+result_arma_prei# v1=v# preV.a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论