时间序列预测分析:以NASDAQ指数为例

来源:互联网 发布:海绵城市知乎 编辑:程序博客网 时间:2024/05/16 10:07

如果数据分析师的模型能准确预测明日的大盘指数,就太好了。想想不禁窃喜,再一秒,告诉自己这是不可能滴。不过正是这也有趣的想法和实在的应用场景,让实践变得越来越趣味横生,鼓动自己对某些知识的学习。


进入正题,本文使用公开数据源:近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]



欢迎交流~


长按下方图片识别二维码,关注“数据分析师手记”~