时间序列预测分析:以NASDAQ指数为例
Posted 数据分析师手记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了时间序列预测分析:以NASDAQ指数为例相关的知识,希望对你有一定的参考价值。
如果数据分析师的模型能准确预测明日的大盘指数,就太好了。想想不禁窃喜,再一秒,告诉自己这是不可能滴。不过正是这也有趣的想法和实在的应用场景,让实践变得越来越趣味横生,鼓动自己对某些知识的学习。
进入正题,本文使用公开数据源:近10年(2007-08-29至2017-08-25)每个交易日的NASDAQ指数。与大家分享,使用python语言,建立ARIMA模型,完成NASDAQ指数预测的全过程。
使用pandas的read_excel方法读取存储在Excel中的数据。代码如下所示:
mydata = pd.read_excel('纳斯达克指数.xlsx',sheetname='Sheet1')
1. 获取时间序列数据
原始数据是长得这样的,Date列表示日期,数据类型为日期类型。Close/Last为当日休市时指数值。
先使用pandas读入dataframe,然后使用Series将数据转化为时间序列对象,index为时间序列值对应的时刻。
时间序列走势图如下所示,非平稳。
点击上图中的Figure options可以通过可视化界面来给所制作的图形加上图表标题、横坐标标题、纵坐标标题。还可以人工调整x,y轴最大值最小值。这个与之前我们的一篇EXcel调整横坐标、纵坐标轴的操作相类似。
Scale还可以调整作图是线性的还是取log。配置好后,点apply。
Curves中可以设置图形中有关曲线的一些参数:
Line sytle 有dashdot点虚线,dashed虚线,dotted虚线,solid实线。
dashed 和 dotted 都是指“虚线”,不同之处在于: dashed:来自 dash(破折号),是指由破折号组成的虚线 dotted:来自 dot (点),是指由点组成的虚线,也称点线 |
width 设置线的宽度,color设置线的颜色
marker style部分可调整标记的形状,是point还是square,还是circle
size 调整标记的大小
face color 调整标记填充的颜色
edge color 调整标记边框颜色
2. 进行差分运算
ARMA模型建模的基本条件是要求待预测的数列满足平稳的条件,即个体值要围绕序列均值上下波动,不能有明显的上升或下降趋势。用统计学的专业名词解释的话,平稳序列是指期望、方差、自协方差、自相关系数等数字特征均不随时间推移而改变的序列。
感性认识方面,如果看到时间序列出现上升或下降趋势,需要对原始序列进行差分平稳化处理。经过观察,这组数据为非平稳时间序列数据,接下来进行d阶差分运算,直到将原始序列转变为一个平稳的时间序列。
先做一阶差分,观察1阶差分后得到的序列是否平稳。
如下图所示,进行1次差分后,得到的序列基本已经平稳。还可以再进行一次差分,对比一下平稳度。
进行二阶差分操作,观察并对比得到的序列图。二阶差分后与一阶差分对比均值、方差等波动,发现二阶差分后变化比率低于一阶差分,因此,选择d=2。
3. 确定ARMA中的p,q参数
3.1 ARMA模型
ARMA(p, q)模型函数为下图所示:
这个函数有三大部分组成,下面分别解释三个部分的含义。
前半部分包含参数p的是自回归模型AR(p);
表示白噪声;
表示移动平均模型MA(q)。
3.2 AR(p)模型
如果q=0,则ARMA(p, q)模型简化为AR(p)模型。
对于AR(p)模型而言,在j>p时,ACF函数逐渐衰减,即出现拖尾;PACF函数都等于零,即出现截尾。
3.3 MA(q)模型
如果p=0,则ARMA(p, q)模型简化为MA(q)模型。
对于MA(q)模型而言,在j>q时,ACF函数等于0,即出现截尾;PACF函数呈现指数衰减,即出现拖尾。
3.4 ARMA模型
如果ACF和PACF函数都没有呈现截尾现象,即ACF函数与PACF函数都拖尾,则要考虑ARMA(p, q)模型,其中p,q均不为零。时间序列分析的鼻祖,Box,Jenkins and Reinsel(1994)认为,对于大多数情况,p<=2与q<=2就足够了。当然,为了保险起见,可以让p(max)与q(max)更大些。(参考文献《高级计量学》陈强)
3.5 ARIMA模型
ARIMA(p,d,q)称为差分自回归移动平均模型,AR是自回归, p为自回归项; MA为移动平均,q为移动平均项数,d为时间序列成为平稳时所做的差分次数。
3.6 确定本例子中的p,q参数值
观察下图,第一个子图是ACF自相关图,第二个子图是PACF偏自相关子图。ACF滞后1阶拖尾(在置信区间内逐渐收缩到0),因此q=1;PACF滞后15阶拖尾(在置信区间内逐渐收缩到0),因此p=15。
4. 使用ARIMA模型预测未来10个交易日的NASDQ指数
from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(nasdaq, (15, 2, 1)).fit()
model.forecast(10)[0]
欢迎交流~
以上是关于时间序列预测分析:以NASDAQ指数为例的主要内容,如果未能解决你的问题,请参考以下文章
对时间序列数据作出指数平滑预测后,如何用excel计算数据的均方误差(MSE)?
R语言时间序列(time series)分析实战:霍尔特指数Holt‘s平滑法预测
时序数据预测机器学习篇——带你一次看个爽——以JetRail高铁的乘客数量为例