时间序列预测分析:以NASDAQ指数为例
2017-10-15 17:29
771 查看
如果数据分析师的模型能准确预测明日的大盘指数,就太好了。想想不禁窃喜,再一秒,告诉自己这是不可能滴。不过正是这也有趣的想法和实在的应用场景,让实践变得越来越趣味横生,鼓动自己对某些知识的学习。
进入正题,本文使用公开数据源:近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为当日休市时指数值。
![](https://mmbiz.qpic.cn/mmbiz_png/DIPibVicvy4oOzImEpPjKgNkAnn87Jg0kTT9PCuUZF05l2xSHic4vdhUWGDCVjEicQZUNDPxpS2YwVNP9sAsekow1g/0?wx_fmt=png)
先使用pandas读入dataframe,然后使用Series将数据转化为时间序列对象,index为时间序列值对应的时刻。
![](https://mmbiz.qpic.cn/mmbiz_png/DIPibVicvy4oOzImEpPjKgNkAnn87Jg0kTMguwtmXU3Grr15kD2MZWFcYXsk4ficBcA4g8NTvVc9LE4wZfcaicFuZw/0?wx_fmt=png)
时间序列走势图如下所示,非平稳。
![](https://mmbiz.qpic.cn/mmbiz_png/DIPibVicvy4oOzImEpPjKgNkAnn87Jg0kTvvKCe232l26sP7zu0PlkgNko0aCQXjdekQqhdhJ2YKES0shr5diaESQ/0?wx_fmt=png)
点击上图中的Figure options可以通过可视化界面来给所制作的图形加上图表标题、横坐标标题、纵坐标标题。还可以人工调整x,y轴最大值最小值。这个与之前我们的一篇EXcel调整横坐标、纵坐标轴的操作相类似。
Scale还可以调整作图是线性的还是取log。配置好后,点apply。
![](https://mmbiz.qpic.cn/mmbiz_png/DIPibVicvy4oOzImEpPjKgNkAnn87Jg0kT4TJCflQnGHu0GNrzVJVfpBibB9DZ76PvzpmU1EHQzBicccPtw8XoiaxPg/0?wx_fmt=png)
Curves中可以设置图形中有关曲线的一些参数:
Line sytle 有dashdot点虚线,dashed虚线,dotted虚线,solid实线。
width 设置线的宽度,color设置线的颜色
marker style部分可调整标记的形状,是point还是square,还是circle
size 调整标记的大小
face color 调整标记填充的颜色
edge color 调整标记边框颜色
![](https://mmbiz.qpic.cn/mmbiz_png/DIPibVicvy4oOzImEpPjKgNkAnn87Jg0kTeFYHTS3ibs4bQfRCicu5B39yckIz6AVsFOMJmzI48gHiag9fGUgPZEibbg/0?wx_fmt=png)
2. 进行差分运算
ARMA模型建模的基本条件是要求待预测的数列满足平稳的条件,即个体值要围绕序列均值上下波动,不能有明显的上升或下降趋势。用统计学的专业名词解释的话,平稳序列是指期望、方差、自协方差、自相关系数等数字特征均不随时间推移而改变的序列。
感性认识方面,如果看到时间序列出现上升或下降趋势,需要对原始序列进行差分平稳化处理。经过观察,这组数据为非平稳时间序列数据,接下来进行d阶差分运算,直到将原始序列转变为一个平稳的时间序列。
先做一阶差分,观察1阶差分后得到的序列是否平稳。
![](https://mmbiz.qpic.cn/mmbiz_png/DIPibVicvy4oOzImEpPjKgNkAnn87Jg0kTvC3Ej05pl9RIfhjbFDJgRklKsFIhk7VbnR7sOjxNyLXSMmNutyweIA/0?wx_fmt=png)
如下图所示,进行1次差分后,得到的序列基本已经平稳。还可以再进行一次差分,对比一下平稳度。
![](https://mmbiz.qpic.cn/mmbiz_png/DIPibVicvy4oOzImEpPjKgNkAnn87Jg0kTHGiaOpoH1T3XQSmKkBSicTfIRyRwLmzAg3n7cpfScMaecdMjLXNvqu7Q/0?wx_fmt=png)
进行二阶差分操作,观察并对比得到的序列图。二阶差分后与一阶差分对比均值、方差等波动,发现二阶差分后变化比率低于一阶差分,因此,选择d=2。
![](https://mmbiz.qpic.cn/mmbiz_png/DIPibVicvy4oOzImEpPjKgNkAnn87Jg0kT2uvZ7BpY3RU4L94icUvbIpHxs8B5NpW5knO3eVs7dt0YwTVicv8eXcKw/0?wx_fmt=png)
![](https://mmbiz.qpic.cn/mmbiz_png/DIPibVicvy4oOzImEpPjKgNkAnn87Jg0kTXv12NFG7xyQAiaUUyBcia2gefzgtUvV836Tg8mIribE0HhSEtdaWlUiaxw/0?wx_fmt=png)
3. 确定ARMA中的p,q参数
3.1 ARMA模型
ARMA(p, q)模型函数为下图所示:
![](https://mmbiz.qpic.cn/mmbiz_png/DIPibVicvy4oOzImEpPjKgNkAnn87Jg0kTkOCqHXRcvI6lL5aHjVrj0mCVeq60xNj99L9mnvoaHtftXBhfn0jdYg/0?wx_fmt=png)
这个函数有三大部分组成,下面分别解释三个部分的含义。
![](https://mmbiz.qpic.cn/mmbiz_png/DIPibVicvy4oOzImEpPjKgNkAnn87Jg0kTMrFk4ZZ5dcNeLkibQ8ZAcIiaqDJy9icTnLQR05ASE7SfRPcqPibFibiaWibbg/0?wx_fmt=png)
前半部分包含参数p的是自回归模型AR(p);
![](https://mmbiz.qpic.cn/mmbiz_png/DIPibVicvy4oOzImEpPjKgNkAnn87Jg0kTmibXFwwmyjFcpIdqRUUZn2VyA3I9ho17Z2EDmUiclVdqc5dWicBaicc2YQ/0?wx_fmt=png)
表示白噪声;
![](https://mmbiz.qpic.cn/mmbiz_png/DIPibVicvy4oOzImEpPjKgNkAnn87Jg0kTgxfnvQmsYoOawyCn1hQqiaJ4iaAPI0M4HdhEMDQyplrIial7hlZWjYCzA/0?wx_fmt=png)
表示移动平均模型MA(q)。
3.2 AR(p)模型
如果q=0,则ARMA(p, q)模型简化为AR(p)模型。
![](https://mmbiz.qpic.cn/mmbiz_png/DIPibVicvy4oOzImEpPjKgNkAnn87Jg0kTiaLWibKhD8RckqUz1ibnvK1H4sEoic3JRmlAwrIjxDiaEVpkliaSKERw4JfA/0?wx_fmt=png)
对于AR(p)模型而言,在j>p时,ACF函数逐渐衰减,即出现拖尾;PACF函数都等于零,即出现截尾。
3.3 MA(q)模型
如果p=0
cfd2
,则ARMA(p, q)模型简化为MA(q)模型。
![](https://mmbiz.qpic.cn/mmbiz_png/DIPibVicvy4oOzImEpPjKgNkAnn87Jg0kTia0r5UmZrNWebbib49vMXe5JaibQEKvwpVsuJXjJxmDQe674oH3D2tribg/0?wx_fmt=png)
对于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。
![](https://mmbiz.qpic.cn/mmbiz_png/DIPibVicvy4oODx27EYF810w75RoHKlG4V2GhHwSRdmEWAGzcomNfXWGlh4pvoibRA5njCqFu0zuX4ju81F2h2nUg/0?wx_fmt=png)
4. 使用ARIMA模型预测未来10个交易日的NASDQ指数
from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(nasdaq, (15, 2, 1)).fit()
model.forecast(10)[0]
![](https://mmbiz.qlogo.cn/mmbiz_png/DIPibVicvy4oODx27EYF810w75RoHKlG4Vbk66hfzDoEVs0ZJdaEdUPgLwhhd271xOAv9VriaxFK575V2zS8ksWgQ/0?wx_fmt=png)
欢迎交流~
长按下方图片识别二维码,关注“数据分析师手记”~
进入正题,本文使用公开数据源:近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 (点),是指由点组成的虚线,也称点线 |
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
cfd2
,则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]
欢迎交流~
长按下方图片识别二维码,关注“数据分析师手记”~
相关文章推荐
- R语言 时间序列分析之ARIMA模型预测
- 时间序列分析之ARIMA模型预测
- 时间序列分析与预测
- R中时间序列分析-趋势预测ARIMA
- R语言时间序列分析之ARIMA模型预测
- 时间序列 预测分析 R语言
- R学习日记——时间序列分析之ARIMA模型预测
- [置顶] Python时间序列案例分析实战--奶牛产奶量预测
- R语言与数据分析之七:时间序列简单指数平滑
- 第十三章 时间序列分析和预测
- 时间序列分析之ARIMA模型预测__R篇
- 时间序列的分析和预测ARIMA
- 精通Excel数据统计与分析 - 摘要 (第8章:时间序列预测)
- 【R实践】时间序列分析之ARIMA模型预测___R篇
- 时间序列分析之 ARIMA 模型的JAVA实现
- 6、python时间序列数据分析
- R语言与数据分析之八:时间序列--霍尔特指数平滑法
- R语言入门(1)时间序列分析
- 时间序列分析
- 金融时间序列分析:6. AR模型实例(R语言)