Python时间序列实战之ARIMA股票预测

前两篇博客我们讨论了如何处理时间序列数据以及怎样应用ARIMA模型进行预测,此篇我们来分析一下近几年的股票数据,然后用ARIMA模型做一下预测。由于股票数据不是很稳定,受一些政策和其它环境的影响,所以效果不是很好,主要是通过这个小项目具体应用一下。

获取股票数据

我们这里使用pandas_datareader来获取我们所需的股票数据,如果No modle,可以pip install一下。

#导入包
import pandas as pd
import pandas_datareader
import fix_yahoo_finance as yf
import matplotlib.pyplot as plt
import datetime

#爬取08-18十年数据
start = datetime.datetime(2008,1,1)
end = datetime.datetime(2018,1,1)
#必须要调用这个函数
yf.pdr_override()
#股票数据
stock_data = pandas_datareader.data.get_data_yahoo("SPY",start,end)
print(stock_data)

#数据可视化
stock_data['Close'].plot()
plt.title('股票每日收盘价')
plt.show()

Python时间序列实战之ARIMA股票预测_第1张图片
Python时间序列实战之ARIMA股票预测_第2张图片

重采样

我们按周进行一下重采样

stock_week = stock_data['Close'].resample('W-MON').mean()
#划分训练集
train_data = stock_week['2008':'2016']
#可视化
train_data.plot()
plt.title('股票每周收盘价均值')
plt.show()

Python时间序列实战之ARIMA股票预测_第3张图片

差分

#这里进行一阶差分
diff_data = train_data.diff()
diff_data.dropna(inplace=True)
diff_data.plot()
plt.show()

Python时间序列实战之ARIMA股票预测_第4张图片

acf与pacf

#查看acf与pacf确定q和p
from statsmodels.graphics.tsaplots import plot_acf,plot_pacf
acf = plot_acf(diff_data,lags=25)
plt.title('ACF')
acf.show()
pacf = plot_pacf(diff_data,lags=25)
plt.title('PACF')
pacf.show()
plt.show()

Python时间序列实战之ARIMA股票预测_第5张图片
Python时间序列实战之ARIMA股票预测_第6张图片

调用ARIMA预测

from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(train_data,order=(1,1,1),freq='W-MON')
arima = model.fit()
pre_data = arima.predict('20170102','20171230',dynamic=True,typ='levels')

#可视化对比
stock_con = pd.concat([stock_week,pre_data],axis=1,keys=['ori','pre'])
stock_con.plot()
plt.title('预测情况')
plt.show()

Python时间序列实战之ARIMA股票预测_第7张图片
以上就是这个小项目的全部内容,如果股票数据爬取报错可以多试几次。

你可能感兴趣的:(机器学习)