时间序列模型预测出来的结果利用adf检验 结果不adf单位根平稳型检验。是不是说明自己预测的结果误差很大?

         
您现在的位置:&&>&&>&&>&&>&正文
浅谈中国黄金现货价格预测模型
来源:  【】 
【摘要】本文通过建立ARMA即自回归移动平均模型对中国黄金现货价格进行预测,研究结果显示,该模型预测值与实际数据相比拟合度高,预测结果较为精确。黄金去货币化三十多年后的今天,在学界对黄金价格的形成和变动的影响因素和作用机理并未有明确认定的大环境下,本文绕开了对传统影响黄金价格的种种因素作用机理的分析,而围绕这些众多因素共同作用下的黄金价格所表现出的实际数据展开研究,这种类似于抛开“黑箱”关注结果的研究方法对黄金这种特殊商品价格的形成和变动比较适合,具备一定的借鉴意义。文章也提出了研究不足和下一步研究展望。   【关键词】黄金;黄金价格;ARMA模型;时间序列;价格预测   一、文献综述   我国自黄金市场化改革以来,黄金价格脱离了政府管制实现了自由波动,黄金产业链条的各个环节也都愈发明显的感受到了市场化改革所造成价格波动而带来的市场和经营风险。而黄金价格作为黄金市场中的核心要素一直都备受关注。众所周知,影响黄金变动的因素众多且复杂,这也是黄金作为一种特殊商品有别于其他普通商品的最重要表现。判断和预测黄金价格成为摆在黄金市场众多参与者面前的一个重要课题。而学术界对黄金价格的预测成果并不多,胡乃联等(1999)通过建立自适应过滤模型试图对国际黄金价格进行预测,顾孟钧等(2008)进行了基于BP神经网络的国际黄金价格预测模型研究,上述研究都是针对国际黄金价格的预测研究,而目前学术界针对国内黄金现货价格的预测研究尚不多见,本文试图通过自回归移动平均模型即ARMA模型对中国黄金现货价格进行预测,最终结果显示,预测结果与实际结果拟合度高,预测误差极小,表明该模型的建立对中国黄金现货价格的变动趋势具有较强的预测功能。   二、理论简述   ARMA模型是一类常用的随机时序模型,它是一种精度较高的时间序列预测方法。其基本思想是:某些时间序列是依赖于时间t的一族随机变量,构成该时序的单个序列值虽然具有不确定性,但整个序列的变化却有一定的规律可以用相应的数学模型近似描述。   ARMA模型有三种基本类型:自回归模型、移动平均模型以及自回归移动平均模型。时间序列是随时间改变而随机地变化的序列。时间序列分析是利用序列的历史信息以及历史信息之间的相互作用,对序列的未来轨迹进行预测的一种数学方法。实现时间序列分析技术的关键在于如何挖掘历史信息之间的相互作用信息,提高预测的精确性。时间序列分析的目的是找出它的变化规律,即模型,常用的模型主要有3种:AR模型(Auto-Regressive Model,自回归模型)、MA模型(Moving Average Model,移动平均模型)和ARMA模型(Auto-Regressive Moving Average Model,自回归移动平均模型混合模型)。自从1970年Box和Jenkins提出自回归移动平均模型及一套完整的建模、估计、检验、预测和控制方法以来,ARMA模型在时间序列的预测应用中越来越广泛。   一般说来,p阶自回归模型记做AR(P),满足以下方程:   q阶移动平均模型记做MA(Q),满足一下方程:   而一般的ARMA(P,Q)模型可以表示为:   三、数据选取   本文数据选取上海黄金交易所日至日的Au9995现货每日收盘价格①,数据规模共1832组,黄金现货价格以克为单位,人民币计价。计量分析软件使用的是Eviews6.0版本。   设中国黄金现货价格数据序列为Y,原始数据   由上图价格走势可以看出,中国黄金现货价格的走势呈震荡上扬状态,同时也发现价格数据序列为非平稳的。一般来说,非稳定序列转化为稳定序列数据变量的平稳性是传统的计量经济分析的基本要求之一,只有模型中的变量满足平稳性要求时,传统的计量经济分析方法才是有效的。而在模型中含有非平稳时间序列时,基于传统的计量经济分析方法的估计和检验统计量将失去通常的性质,从而推断得出的结论可能是错误的。另外,现代资本市场理论的基本假设之一是,价格时序的波动是平稳的且服从正态分布。而如果价格序列非平稳或非正态分布,那么采用一般统计方法做出的分析和预测就会出现较大的误差。因此需要对数据序列的平稳性进行检验。   因此,在建立模型之前需要先对非平稳的价格序列进行处理使其平稳化,并且对处理过后的数据进行检验,以确认其平稳性。   由于上述黄金现货价格数据是非平稳的,因此需要先进行差分使其平稳化,从而得到D(Y),如下   上述差分后的数据是否平稳需要进行检验。一般来说,平稳性检验的主要方法是单位根检验,单位根检验法也是现代时间序列分析中检验平稳性的有效方法。根据ADF检验的评判规则,若ADF检验值小于显着性水平为时的临界值,就可以认为该时间序列不存在单位根,即时间时序是平稳的。检验结果如下   由上图检验结果发现,D(Y)的ADF检验统计量-44.822小于显着性水平5%时的临界值-2.863,所以拒绝原假设,即认为D(Y)不存在单位根,是平稳的时间序列。平稳的时间数据序列的确认为下文的研究提供了研究基础。   四、建立模型   在获取到平稳数据之后,需要通过确定自相关系数和偏自相关系数来识别将要建立的模型的形式和阶数。   如设为自相关系数,则时间序列滞后K阶的自相关系数由下式估计:   其中是序列的样本均值,这是相距K期值的相关系数。称为时间序列的自相关系数,自相关系数可以部分的刻画一个随机过程的性质。他告诉我们在序列的临近数据之间存在的相关性。   偏自相关系数是指在给定的条件下,与之间的条件相关性。其相关程度用偏自相关系数度量。在k阶滞后下估计偏相关系数的计算公式   由上述对自相关系数和偏自相关系数的定义可以得知,自相关系数和偏自相关系数的确定决定了模型形式,而将要建立的模型究竟以什么形式出现可以通过自相关和偏自相关图来识别。上述得到的平稳数据序列的自相关和偏自相关图如下所示:   在本文的数据处理中,滞后期选择为10。通过上图可知自第三个滞后期开始衰减开始加快,因此,对于中国黄金现货价格的预测模型建立可以采用二阶的移动平均模型MA(2)来实现。   通过eviews6.0软件进行模型估计,得到如下结果,见下   根据上述结果可以发现拟合程度较高,说明该模型具备较高的应用价值。同时,在模型建立之后,也可以通过样本外预测来研判该模型的预测精度,经过模型预测结果与实际数据相比,可以发现,预测误差极小,预测结果较为准确。   预测误差为:   六、研究不足与展望   众所周知,决定黄金价格的因素除了供给和需求因素之外,还与美元走势、国际石油价格、世界经济形势、地缘政治事件等等因素息息相关。直至今天,学术界也没有对影响黄金价格走势的决定要素在黄金价格变动中所发挥的权重比例给出明确解释,甚至,除了上述学界公认的因素外,其他因素对黄金价格的影响作用尚存争议。   本文采用自回归移动平均模型对中国黄金现货价格进行预测,绕开了对传统影响黄金价格的种种因素作用机理的分析,而围绕这些众多因素共同作用下的黄金价格所表现出的实际数据展开研究,这种类似于抛开“黑箱”关注结果的研究方法对黄金这种特殊商品价格的形成和变动比较适合。研究结果显示,模型建立较为恰当,预测结果精度高。这对黄金去货币化的今天,我们把握黄金价格的形成和变动的趋势具有较好的借鉴意义。   当然,本文后续的研究也必不可少。诸如把黄金价格变动的季节性波动因素、对影响黄金价格的重要因素(如美元汇率、石油价格等)的影响权重等变量放入模型中,在对中国黄金现货价格的预测中考虑将国际黄金价格的影响作为变量放入模型中,从而实现不仅在现实的数据表面探究数据变动规律,而且还兼顾了黄金价格形成与变动的内在作用机理,这些都是下一步研究的方向。   注释:   ①数据源于上海黄金交易所和wind资讯金融终端2010版.   参考文献   张晓峒.eviews使用指南与案例[M].北京:机械工业出版社,2007,2.   高铁梅.计量经济分析方法与建模[M].北京:清华大学出版社,2009,5.   祝合良.论世界黄金市场体系[J].中国黄金珠宝,2001(1).   祝合良,刘山恩.炒金宝典[M].北京:首都经济贸易大学出版社,2003,9.   刘山恩.黄金财富新视角[M].北京:经济管理出版社,2009,7.   胡乃联,宋鑫.自适应过滤模型在黄金价格预测中的应用[J].黄金,1999(5). 1&&&
文章责编:gaoxiaoliang& 看了本文的网友还看了
?&&()?&&()?&&()?&&()?&&()?&&()
? ?   ? ?   ? ?   ? ?   ? ?
? ?   ? ?   ?
?   ? ?    ? ?   ? ?   ? ?   ? ?
? ?   ? ?
|     |
|     |
|     |
|     |
|     |
|     |
|        |
      
|        |
       |
|        |
实用工具 |
| 大全 | 大全     |
版权声明:如果网所转载内容不慎侵犯了您的权益,请与我们联系,我们将会及时处理。如转载本内容,请注明出处。
Copyright & 2004-
 网 All Rights Reserved 
中国科学院研究生院权威支持(北京) 电 话:010- 传 真:010-时间序列模型(ARIMA) - 简书
时间序列模型(ARIMA)
时间序列简介
时间序列 是指将同一统计指标的数值按其先后发生的时间顺序排列而成的数列。时间序列分析的主要目的是根据已有的历史数据对未来进行预测。
常用的时间序列模型
常用的时间序列模型有四种:自回归模型 AR(p)、移动平均模型 MA(q)、自回归移动平均模型 ARMA(p,q)、自回归差分移动平均模型 ARIMA(p,d,q), 可以说前三种都是 ARIMA(p,d,q)模型的特殊形式。模型的具体方程可以查找相关的专业书籍及网上的资料。
AIRIMA模型的建立与预测
ARIMA 模型是在平稳的时间序列基础上建立起来的,因此时间序列的平稳性是建模的重要前提。检验时间序列模型平稳的方法一般采用 ADF 单位根检验模型去检验。当然如果时间序列不稳定,也可以通过一些操作去使得时间序列稳定(比如取对数,差分),然后进行 ARIMA 模型预测,得到稳定的时间序列的预测结果,然后对预测结果进行之前使序列稳定的操作的逆操作(取指数,差分的逆操作),就可以得到原始数据的预测结果。
ARIMA 模型实践
模型具体的理论知识就不再做过多说明了,来个实际的例子吧。
ARIMA 模型对湖北省 GDP 的实证分析及预测
这里的例子是采用了一篇论文的数据,【ARIMA模型在湖北省GDP预测中的应用】,可以去搜索篇名进行下载。
数据的平稳性处理及检验
这里我们用 Python 对数据进行分析处理建模。
画出原始数据的时间路径图
#-*- coding:utf-8 -*-
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.graphics.tsaplots import acf,pacf,plot_acf,plot_pacf
from statsmodels.tsa.arima_model import ARMA
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, 25.83, 09.38, 56.47, 29.29, 80.53, 57.45, 90.19, 33.4, 961.1, 15967.61])
time_series.index = pd.Index(sm.tsa.datetools.dates_from_range('1978','2010'))
time_series.plot(figsize=(12,8))
plt.show()
原始数据.png
由上图我们可以看出,这个时间序列是呈指数形式的,波动性比较大,不是稳定的时间序列,一般对于这种指数形式的数据,可以对其取对数,将其转化为线性趋势。
time_series = np.log(time_series)
time_series.plot(figsize=(8,6))
plt.show()
对原始数据取对数.png
由上图可以看出,去了对数之后的时间路径图明显具有线性趋势,为了确定其稳定性,对取对数后的数据进行 adf 检验
t=sm.tsa.stattools.adfuller(time_series, )
output=pd.DataFrame(index=['Test Statistic Value', "p-value", "Lags Used", "Number of Observations Used","Critical Value(1%)","Critical Value(5%)","Critical Value(10%)"],columns=['value'])
output['value']['Test Statistic Value'] = t[0]
output['value']['p-value'] = t[1]
output['value']['Lags Used'] = t[2]
output['value']['Number of Observations Used'] = t[3]
output['value']['Critical Value(1%)'] = t[4]['1%']
output['value']['Critical Value(5%)'] = t[4]['5%']
output['value']['Critical Value(10%)'] = t[4]['10%']
print(output)
检验结果如下
Test Statistic Value
Number of Observations Used
Critical Value(1%)
Critical Value(5%)
Critical Value(10%)
由上表可知,t 统计量要大于任何置信度的临界值,因此认为该序列是非平稳的,所以再对序列进行差分处理,发现差分之后的序列基本达到稳定,如下图所示,并且通过了 ADF 检验,检验结果见下表。
time_series = time_series.diff(1)
time_series = time_series.dropna(how=any)
time_series.plot(figsize=(8,6))
plt.show()
t=sm.tsa.stattools.adfuller(time_series)
output=pd.DataFrame(index=['Test Statistic Value', "p-value", "Lags Used", "Number of Observations Used","Critical Value(1%)","Critical Value(5%)","Critical Value(10%)"],columns=['value'])
output['value']['Test Statistic Value'] = t[0]
output['value']['p-value'] = t[1]
output['value']['Lags Used'] = t[2]
output['value']['Number of Observations Used'] = t[3]
output['value']['Critical Value(1%)'] = t[4]['1%']
output['value']['Critical Value(5%)'] = t[4]['5%']
output['value']['Critical Value(10%)'] = t[4]['10%']
print(output)
Test Statistic Value
Number of Observations Used
Critical Value(1%)
Critical Value(5%)
Critical Value(10%)
确定自相关系数和平均移动系数(p,q)
根据时间序列的识别规则,采用 ACF 图、PAC 图,AIC 准则(赤道信息量准则)和 BIC 准则(贝叶斯准则)相结合的方式来确定 ARMA 模型的阶数, 应当选取 AIC 和 BIC 值达到最小的那一组为理想阶数。
plot_acf(time_series)
plot_pacf(time_series)
plt.show()
r,rac,Q = sm.tsa.acf(time_series, qstat=True)
prac = pacf(time_series,method='ywmle')
table_data = np.c_[range(1,len(r)), r[1:],rac,prac[1:len(rac)+1],Q]
table = pd.DataFrame(table_data, columns=['lag', "AC","Q", "PAC", "Prob(&Q)"])
print(table)
偏自相关图.png
自相关图.png
根据上面的几个图,我们可以先取 p=1, q=2。进行模型估计,结果见下图。
p,d,q = (1,1,2)
arma_mod = ARMA(time_series,(p,d,q)).fit(disp=-1,method='mle')
summary = (arma_mod.summary2(alpha=.05, float_format="%.8f"))
print(summary)
模型结果.png
这里的 p和q 参数可以调整,然后找出最佳的(AIC最小,BIC最小),经过比较, p=0,q=1 为理想阶数。
这里有一个自动取 p和q 的函数,如果要自动定阶的话,可以采用
(p, q) =(sm.tsa.arma_order_select_ic(dta,max_ar=3,max_ma=3,ic='aic')['aic_min_order'])
#这里需要设定自动取阶的 p和q 的最大值,即函数里面的max_ar,和max_ma。ic 参数表示选用的选取标准,这里设置的为aic,当然也可以用bic。然后函数会算出每个 p和q 组合(这里是(0,0)~(3,3)的AIC的值,取其中最小的,这里的结果是(p=0,q=1)。
残差和白噪声检验
个人感觉这个就是对模型 ARIMA(0,1,1) 的残差序列 arma_mod.resid 进行 ADF 检验。
arma_mod = ARMA(time_series,(0,1,1)).fit(disp=-1,method='mle')
resid = arma_mod.resid
t=sm.tsa.stattools.adfuller(resid)
output=pd.DataFrame(index=['Test Statistic Value', "p-value", "Lags Used", "Number of Observations Used","Critical Value(1%)","Critical Value(5%)","Critical Value(10%)"],columns=['value'])
output['value']['Test Statistic Value'] = t[0]
output['value']['p-value'] = t[1]
output['value']['Lags Used'] = t[2]
output['value']['Number of Observations Used'] = t[3]
output['value']['Critical Value(1%)'] = t[4]['1%']
output['value']['Critical Value(5%)'] = t[4]['5%']
output['value']['Critical Value(10%)'] = t[4]['10%']
print(output)
Test Statistic Value
Number of Observations Used
Critical Value(1%)
Critical Value(5%)
Critical Value(10%)
当然这里也可以画出 acf 图和 pacf 图。
arma_model = sm.tsa.ARMA(time_series,(0,1)).fit(disp=-1,maxiter=100)
predict_data = arma_model.predict(start=str(1979), end=str(2010+3), dynamic = False)
预测结果.png
预测结果还原
对预测出来的数据,进行逆差分操作(由原始数据取对数后的数据加上预测出来的数据),然后再取指数即可还原。
预测结果还原.png
上图最后3个为预测值,然后查询2011年到2013年湖北GDP的实际值,可以进行对照
原始数据与预测结果.png
从预测对结果看,2011年到2013年的预测结果和实际的差别不大。这个模型在短期预测结果比较好。模型处理主要还是应用了Python 第三方库 statsmodels 中的模型算法,其中还有很多细节,可以查阅相关文档,这里只是简单的应用了一下,由于代码都是一小段一小段写的,很乱,只提供了一些片段供参考。
ARIMA模型,全称为自回归积分滑动平均模型(Autoregressive Integrated Moving Average Model),是由博克思(Box)和詹金斯(Jenkins)于20世纪70年代初提出的一种时间序列预测方法。ARIMA模型是指在将...
也算是我自己的笔记,都2017年了,ARMA模型感觉已经过时了吧,用深度学习来预测的表现是不是更好,不过反正都研究了一下了,就做个记录吧。 1.异常值和缺失值的处理 这绝对是数据分析时让所有人都头疼的问题。异常和缺失值会破坏数据的分布,并且干扰分析的结果,怎么处理它们是一门...
本文结构: 时间序列分析? 什么是ARIMA? ARIMA数学模型? input,output 是什么? 怎么用?-代码实例 常见问题? 时间序列分析? 时间序列,就是按时间顺序排列的,随时间变化的数据序列。生活中各领域各行业太多时间序列的数据了,销售额,顾客数,访问量,股...
算法技术解构 1、Python基础知识 (1)IPythonIPython的开发者吸收了标准解释器的基本概念,在此基础上进行了大量的改进,创造出一个令人惊奇的工具。在它的主页上是这么说的:“这是一个增强的交互式Python shell。”具有tab补全,对象自省,强大的历史...
在当下,人工智能的浪潮席卷而来。从AlphaGo、无人驾驶技术、人脸识别、语音对话,到商城推荐系统,金融业的风控,量化运营、用户洞察、企业征信、智能投顾等,人工智能的应用广泛渗透到各行各业,也让数据科学家们供不应求。Python和R作为机器学习的主流语言,受到了越来越多的关...
这样无意义 战略
边看清边做
云南省2016届艺术体育高考时间考点通知 新华网记者从云南省招生考试院获悉,2016年云南艺术类统考、体育专业统考报名及考试时间确定。艺术类考点分别设在云南艺术学院、云南师范大学、昆明学院。以下是需要考生特别注意的地方:网上报名美术学及艺术设计专业、音乐学专业、舞蹈类(3类...
连续几天,风平浪静。 念念起床上学、晚上回家后,心情平静、愉悦。 林儿和我自从晚上有了陪伴约定后,表现特别好。这个小姑娘,规则意识很强,该玩玩,该学学,该睡睡,我也特别奇怪,一个5岁的孩子,比我还自律。 今天我带林儿回到家,脱下马甲,发现新穿的白色毛衣上一片片的碘伏,林儿说...
节日复节日,节日何其多,过了双11还有双12,过了双12还有圣诞节,促销手段也是不计其数,以前的买二送一、满100减50等,现在的付100顶200,当各种各样的节日碰上千变万化的促销手段,我们买买买星人真的是要眼花缭乱,但我说过,我在买任何东西之前一定会研究,买当下我觉得好...
前些天重温《爱情公寓》的时候看到这么一句话:我8岁的时候,天还是蓝的,水也是绿的,鸡鸭是没有禽流感的,猪肉是可以放心吃的。每次看到这句话的时候都会有一种哭笑不得的感觉,同时也点明了绿色环保的重要性,装修的时候会产生不少的污染,而主因是使用了不环保的木工板,那么该如何选择环保...时间序列模型预测3月CPI为-1.26%_焦点透视_新浪财经_新浪网
时间序列模型预测3月CPI为-1.26%
  ⊙国海证券研究所
  我们对我国的CPI序列建立了包含春节因素回归变量的季节时间序列模型,并使用此模型对我国2009年3月的CPI数据进行了预测,以达到为我国宏观经济形势预判提供依据的目的。
  一、数据检验及预处理
  我们选取2001年1月至2008年12月的CPI月度数据作为原始数据。为了使不同时期的CPI数据具有可比性,我们以2000年12月为基期(即设2000年12月的CPI=100),通过CPI的月度环比数据计算出CPI定基指数。
  在建立模型之前,我们首先需要对时间序列的平稳性进行检验。采用ADF检验方法进行平稳性检验,发现其为非平稳序列。接下来,我们对其进行一阶非季节差分,对时间序列进行ADF检验,发现其为平稳序列。
  二、构造春节因素虚拟变量
  由于我国的CPI定基指数受到春节因素的影响,为了将这种影响体现在季节时间序列模型中,我们构造了一个春节因素虚拟变量。构造此变量的假设条件是:从元宵节之前的第w天开始,居民消费价格水平发生变动并保持在这一新水平上直至元宵节的前一天。我们取w=20,由于我国的元宵节在现行公历中的变动范围是从2月4日到3月6日,因此元宵节前20天就只会落在1月、2月或3月。
  三、构建模型
  考虑到CPI定基指数序列是非平稳序列,且具有明显的季节特征及以12个月为周期的周期特征,因此,我们拟采用季节时间序列模型SARIMA对我国CPI定基指数序列进行拟合。在接下来的数据分析和模型构建过程中,我们使用的是计量经济学软件Eviews。
  我们以2001年1月至2008年12月的月度CPI定基指数为样本,建立SARIMA模型。对以上模型的残差序列进行Q检验发现,我们构建的季节时间序列模型是有效的。同时此模型的拟合优度高达75.27%,这意味着此模型对样本内数据实现了很好的拟合。并且春节因素虚拟变量的相伴概率远小于置信水平0.05,这说明虚拟变量对因变量Dlny(t)的影响是非常显著的,这也从统计上说明了春节因素对我国CPI的影响是不可忽略的。
  我们使用模型对CPI定基指数进行样本内预测发现,样本内数据的预测值与真实值非常接近,这与上面提到的此模型具有较高的拟合优度是吻合的。接下来,我们使用模型对CPI定基指数在2009年1月和2月的值进行了预测,发现模型的样本外预测误差不大于0.51%,这说明此模型具有较好的预测效果。
  为了对2009年3月的CPI数据进行更加准确的预测,我们使用2001年1月至2009年2月的CPI定基指数时间序列重新建立SARIMA模型。接下来我们对这个模型的残差序列进行Q检验,发现阶数m从4到20,Q统计量对应的概率都大于置信水平0.05,这说明季节时间序列模型是有效的。同时该模型的拟合优度高达75.46%,这说明此模型可以对样本内数据实现很好的拟合。
  四、数据预测
  我们使用模型对CPI定基指数在2009年3月的值进行了预测,得到以下结果:2009年3月CPI同比增速约为-1.26%,环比增速约为-0.36%。
&nbsp&nbsp&nbsp&nbsp新浪声明:此消息系转载自新浪合作媒体,新浪网登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不构成投资建议。投资者据此操作,风险自担。
电话:010-时间序列ARIMA模型详解:python实现店铺一周销售量预测_数据挖掘入门与实战_传送门
时间序列ARIMA模型详解:python实现店铺一周销售量预测
要学习更多点这→
数据挖掘DW
顾名思义,时间序列是时间间隔不变的情况下收集的时间点集合。这些集合被分析用来了解长期发展趋势,为了预测未来或者表现分析的其他形式。但是是什么令时间序列与常见的回归问题的不同?有两个原因:1、时间序列是跟时间有关的。所以基于线性回归模型的假设:观察结果是独立的在这种情况下是不成立的。2、随着上升或者下降的趋势,更多的时间序列出现季节性趋势的形式,如:特定时间框架的具体变化。即:如果你看到羊毛夹克的销售上升,你就一定会在冬季做更多销售。常用的时间序列模型有AR模型、MA模型、ARMA模型和ARIMA模型等。一、时间序列的预处理拿到一个观察值序列之后,首先要对它的平稳性和纯随机性进行检验,这两个重要的检验称为序列的预处理。根据检验的结果可以将序列分为不同的类型,对不同类型的序列我们会采用不同的分析方法。 先说下什么是平稳,平稳就是围绕着一个常数上下波动且波动范围有限,即有常数均值和常数方差。如果有明显的趋势或周期性,那它通常不是平稳序列。序列平稳不平稳,一般采用三种方法检验:(1)时序图检验 看看上面这个图,很明显的增长趋势,不平稳。 (2)自相关系数和偏相关系数还以上面的序列为例:用SPSS得到自相关和偏相关图。分析:左边第一个为自相关图(Autocorrelation),第二个偏相关图(Partial Correlation)。 平稳的序列的自相关图和偏相关图要么拖尾,要么是截尾。截尾就是在某阶之后,系数都为 0 ,怎么理解呢,看上面偏相关的图,当阶数为 1 的时候,系数值还是很大, 0.914. 二阶长的时候突然就变成了 0.050. 后面的值都很小,认为是趋于 0 ,这种状况就是截尾。什么是拖尾,拖尾就是有一个缓慢衰减的趋势,但是不都为 0 。 自相关图既不是拖尾也不是截尾。以上的图的自相关是一个三角对称的形式,这种趋势是单调趋势的典型图形,说明这个序列不是平稳序列。 (3)单位根检验单位根检验是指检验序列中是否存在单位根,如果存在单位根就是非平稳时间序列。 不平稳,怎么办?答案是差分,转换为平稳序列。什么是差分?一阶差分指原序列值相距一期的两个序列值之间的减法运算;k阶差分就是相距k期的两个序列值之间相减。如果一个时间序列经过差分运算后具有平稳性,则该序列为差分平稳序列,可以使用ARIMA模型进行分析。 还是上面那个序列,两种方法都证明他是不靠谱的,不平稳的。确定不平稳后,依次进行1阶、2阶、3阶...差分,直到平稳为止。先来个一阶差分,上图:
从图上看,一阶差分的效果不错,看着是平稳的。平稳性检验过后,下一步是纯随机性检验。对于纯随机序列,又称白噪声序列,序列的各项数值之间没有任何相关关系,序列在进行完全无序的随机波动,可以终止对该序列的分析。白噪声序列是没有信息可提取的平稳序列。对于平稳非白噪声序列,它的均值和方差是常数。通常是建立一个线性模型来拟合该序列的发展,借此提取该序列的有用信息。ARMA模型是最常用的平稳序列拟合模型。二、平稳时间序列建模某个时间序列经过预处理,被判定为平稳非白噪声序列,就可以进行时间序列建模。 建模步骤:(1)计算出该序列的自相关系数(ACF)和偏相关系数(PACF);(2)模型识别,也称模型定阶。根据系数情况从AR(p)模型、MA(q)模型、ARMA(p,q)模型、ARIMA(p,d,q)模型中选择合适模型,其中p为自回归项,d为差分阶数,q为移动平均项数。 下面是平稳序列的模型选择:自相关系数(ACF)偏相关系数(PACF)选择模型拖尾p阶截尾AR(p)q阶截尾拖尾MA(q)p阶拖尾q阶拖尾ARMA(p,q)
ARIMA 是 ARMA 算法的扩展版,用法类似 。(3)估计模型中的未知参数的值并对参数进行检验;(4)模型检验;(5)模型优化;(6)模型应用:进行短期预测。 三、python实例操作以下为某店铺~的销售数据,以此建模预测~的销售数据。
#-*- coding: utf-8 -*-#arima时序模型import pandas as pd#参数初始化discfile = 'E:/destop/text/arima_data.xls'forecastnum = 5#读取数据,指定日期列为指标,Pandas自动将“日期”列识别为Datetime格式data = pd.read_excel(discfile, index_col = u'日期')#时序图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_acfplot_acf(data).show() #平稳性检测from statsmodels.tsa.stattools import adfuller as ADFprint(u'原始序列的ADF检验结果为:', ADF(data[u'销量']))#返回值依次为adf、pvalue、usedlag、nobs、critical values、icbest、regresults、resstore原始序列的单位根(adf)检验adfcValuep值1%5%10%1.81-3.7112-2.9812-2.63010.9984 Pdf值大于三个水平值,p值显著大于0.05,该序列为非平稳序列。
#差分后的结果D_data = data.diff().dropna()D_data.columns = [u'销量差分']#时序图D_data.plot() plt.show() #自相关图plot_acf(D_data).show() plt.show()from statsmodels.graphics.tsaplots import plot_pacf#偏自相关图plot_pacf(D_data).show()
#平稳性检测print(u'差分序列的ADF检验结果为:', ADF(D_data[u'销量差分'])) 一阶差分后序列的单位根(adf)检验adfcValuep值1%5%10%-3.15-3.6327-2.9485-2.61300.0227 Pdf值小于两个水平值,p值显著小于0.05,一阶差分后序列为平稳序列。 #白噪声检验from statsmodels.stats.diagnostic import acorr_ljungbox#返回统计量和p值print(u'差分序列的白噪声检验结果为:', acorr_ljungbox(D_data, lags=1)) 一阶差分后序列的白噪声检验statP值11.3040.007734 P值小于0.05,所以一阶差分后的序列为平稳非白噪声序列。 from statsmodels.tsa.arima_model import ARIMA#定阶#一般阶数不超过length/10pmax = int(len(D_data)/10) #一般阶数不超过length/10qmax = int(len(D_data)/10) #bic矩阵bic_matrix = [] for p in range(pmax+1):
for q in range(qmax+1): #存在部分报错,所以用try来跳过报错。
tmp.append(ARIMA(data, (p,1,q)).fit().bic)
tmp.append(None)
bic_matrix.append(tmp)#从中可以找出最小值bic_matrix = pd.DataFrame(bic_matrix) #先用stack展平,然后用idxmin找出最小值位置。p,q = bic_matrix.stack().idxmin() print(u'BIC最小的p值和q值为:%s、%s' %(p,q)) 取BIC信息量达到最小的模型阶数,结果p为0,q为1,定阶完成。 #建立ARIMA(0, 1, 1)模型model = ARIMA(data, (p,1,q)).fit() #给出一份模型报告model.summary2() #作为期5天的预测,返回预测结果、标准误差、置信区间。model.forecast(5) 最终模型预测值如下:4874.04923.94973.95023.85073.8 利用模型向前预测的时间越长,预测的误差将会越大,这是时间预测的典型特点。 参数检验如下:Coef.Std.Err.tP值const49.95620.1392.48060.0182ma.L1.D.销量0.6710.16484.07120.0003 从检验结果p值来看,建立的模型效果良好。数据挖掘DW
投稿邮箱:说明:投稿在本公众号发布将设置为“原创”,并在文中保留作者信息,读者对文章的打赏将直接作为作者的稿酬。文章写得越好,赏金越丰厚!
觉得不错,分享给更多人看到
数据挖掘入门与实战 微信二维码
分享这篇文章
8月19日 21:00
数据挖掘入门与实战 最新文章

我要回帖

更多关于 adf检验不平稳怎么办 的文章

 

随机推荐