【Python小竞赛】ARIMA算法预测三日后招商银行收盘价

介绍

本文整理记录了参与的一次小型数据分析竞赛【数据游戏】,竞争目标是预测2019年5月15日A股闭市时招商银行600036的股价。

主要思路是利用ARIMA算法做时间序列预测。

使用的数据是公开的数据集 tushare。
数据集 tushare
拿到题目和数据之后,首先结合既往经历,觉得想要预测准股价,本身是一个不可能的事情,尤其是A股。

影响股价的因素非常复杂而且不透明,以及金融投资领域具有的反身性理论,使得这次预测更多偏向于实验性质,同时对竞争结果不要有过高的期望。

预测得准,是你的运气;预测的烂,也不会影响你从中学到什么。学习第一,比赛第二吧。

鉴于以上,本次预测只使用了close的时间序列。更多的数据其实并没有什么用。

首先了解下本文的 ARIMA 建模过程:

  1. 获取时间序列数据 ;
  2. 观察数据是否为平稳时间序列;对于非平稳时间序列要先进行d阶差分运算,转化为平稳时间序列;
  3. 对处理得到的平稳时间序列,求它的阶数p, q
  4. 根据ARIMA算法建模,ARIMA(data, order=(p, d, q))
  5. 模型检验和调优
  6. 预测

初学的小伙伴们可能对这个过程并不熟悉,没关系,先背下来。

对Python不熟悉的小伙伴们, 我给大家总结了几句车轱辘话,大家先强行了解下:

  1. 获取时间序列数据 ;
    data = pd.read_excel(‘600036.xlsx’, index=None)
    train = data[‘close’]
  1. 观察数据是否为平稳时间序列;对于非平稳时间序列要先进行d阶差分运算,转化为平稳时间序列;
    adf_data = sts.adfuller(train)
    diff = train.diff(1)
  1. 对处理得到的平稳时间序列,求它的阶数p, q
    sm.tsa.arma_order_select_ic(train, max_ar=8, max_ma=8, ic=[‘aic’, ‘bic’, ‘hqic’])
  1. 根据ARIMA算法建模
    ARMAModel = sm.tsa.ARIMA(train, order=(4,1,2)).fit()
  1. 模型检验和调优
    train_shift = train.shift(1)
    pred_recover = predicts.add(train_shift)
    np.sqrt( sum( (pred_recover -train) ** 2)/train.size )
  1. 预测
    f = ARMAModel.forecast(3)

以上,是本文的核心代码,大家如果一时看不懂,可以跳过。
可以看看下面更详细的步骤。

导入数据并处理

# 导入必须的模块
import tushare as ts  #使用的公开的数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
import statsmodels.tsa.stattools as sts

import wconfig as wc  #自定义打印输出控制模块,与本次竞赛无关
wc.dispy() 

# 导入数据,从去年1月开始即可
data = ts.get_hist_data('600036', start='2018-01-08', end='2019-05-10').sort_index()
#data = ts.get_hist_data('600036', start='2018-04-01').sort_index().reset_index()

# 数据安全和源数据备份
#data.to_excel('600036.xlsx')

# 源数据可靠性检查。12日发现tushare的数据有错误,需要手工矫正(13日该数据恢复正常)。
print('tushare中5月10日close股价为: %.2f元,与实际不符!' % (data['close']['2019-05-10']))
data['close']['2019-05-10']=33.61
print('当日实际收盘价应为: %.2f元' % data['close']['2019-05-10'])

# 只取 close 字段作为训练数据
train = data['close']
train.index = pd.to_datetime(
  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值