基于ARIMA回归模型的股票价格预测
创作时间:
作者:
@小白创作中心
基于ARIMA回归模型的股票价格预测
引用
CSDN
1.
https://blog.csdn.net/2301_79638883/article/details/142610708
ARIMA回归模型是一种用于时间序列数据预测的统计模型。本文将通过具体的数据处理和模型训练步骤,展示如何使用ARIMA模型进行股票价格预测。
ARIMA回归模型
ARIMA回归模型是一种用于时间序列数据预测的统计模型。ARIMA 是 AutoRegressive Integrated Moving Average 的缩写,中文意思是“自回归差分移动平均模型”。它是一种结合了自回归(AR)、差分(I)和移动平均(MA)三种方法的模型。
- 自回归(AR):指的是模型会考虑过去的值对当前值的影响。
- 差分(I):指的是对数据进行处理,使其平稳,即消除数据中的趋势和季节性。
- 移动平均(MA):指的是模型会考虑过去的误差对当前值的影响。
算法步骤
- 读取数据
- 数据预处理
- 确定模型参数
- 训练模型
- 检验模型
ARIMA模型的优点:
- 预测能力:可以预测未来的趋势,帮助做出决策(短期较为准确,长期预测误差较大)。
- 理解数据:通过分析历史数据,可以更好地理解数据的模式和结构。
- 提高效率:在某些情况下,可以减少不必要的资源浪费。
数据的来源
本文的数据来源于某股市的交易数据,其中包含字段分别为交易日期、开盘价、最高价、最低价、收盘价、昨日收盘价、成交量、成交金额、振幅、涨跌幅、涨跌额、换手率。
程序部分
Step1:读取数据
%matplotlib inline
import pandas as pd #数据处理,数据分析
import datetime #导入日期和时间
import matplotlib.pylab as plt #可视化展示
from matplotlib.pylab import style #画图风格
from statsmodels.tsa.arima_model import ARIMA #差分自回归移动平均模型
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf #ACF图,PACF图
#去掉不必要的警告
import warnings
warnings.filterwarnings("ignore")
stock = pd.read_csv('sh_******.csv', index_col=0, parse_dates=[0],encoding='utf-8') #把日期作为索引列
stock
前5行数据:
Step2:数据预处理
2.1数据重采样
#对“收盘价”列进行数据重新采样(时间序列的频率从每天变成每周一),然后取每周的平均值
stock_week = stock['收盘价'].resample('W-MON').mean()
stock_week
stock_train = stock_week['2017':'2022']
#选择2017年到2022年的数据作为训练集数据
2.2画图展示股票收盘价
from matplotlib.font_manager import FontProperties #设置绘图时的中文字体
myfont=FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf'# 设置中文
plt.figure(figsize=(12,8),dpi=600) #设置图形和清晰度的大小
stock_train.plot() #画图
plt.title('股票收盘价',fontproperties=myfont) #设置标题
plt.xlabel('时间',fontproperties=myfont) #设置X轴标签
plt.ylabel('股票收盘价',fontproperties=myfont) #设置y轴标签
from statsmodels.tsa.stattools import adfuller
dftest = adfuller(stock_train)

dftest[1]
Step3:确定模型参数
stock_diff_1 = stock_train.diff() #df.diff()一阶差分
stock_diff_1
stock_diff = stock_diff_1.dropna()#dropna()滤除缺失数据
stock_diff
plt.figure(dpi=600)
plt.plot(stock_diff)
plt.show()
from statsmodels.tsa.stattools import adfuller #再次adf检验
dftest = adfuller(stock_diff)

dftest[1]
#绘制acf图
plt.figure(dpi=600)
acf = plot_acf(stock_diff, lags=20)
plt.title("ACF")
plt.xlabel("阶数",fontproperties=myfont)
plt.ylabel("自相关系数",fontproperties=myfont)
acf.show()
#绘制PACF图
plt.figure(dpi=600)
pacf = plot_pacf(stock_diff, lags=20)

plt.title("PACF")
plt.xlabel("阶数",fontproperties=myfont)
plt.ylabel("偏自相关系数",fontproperties=myfont)
pacf.show()#展示
import statsmodels.api as sm
res = sm.tsa.arma_order_select_ic(stock_diff,max_ar = 5,max_ma = 5,ic = ['aic'])

res.aic_min_order
Step4: 训练模型
forcast_steps=50 # 请注意:步长超过30后,运行时间会超过 1 分钟。步长超过50后,运行时间会超过 3 分钟
model = sm.tsa.ARIMA(stock_train, order = (forcast_steps,1,forcast_steps),freq='W-MON')
model = model.fit()
pred_1 = model.forecast(steps=forcast_steps)
pred_1[-10:]
forcast_end_day = str(pred_1.index[-1].year)+'-'+str(pred_1.index[-1].month)+'-'+str(pred_1.index[-1].day+1)
forcast_end_day
stock_val = stock_week['2000-1-1':forcast_end_day]
stock_val
plt.figure(dpi=600)
plt.plot(stock_val)
plt.plot(pred_1)
stock_train2 = stock_week
forcast_steps=50 # 请注意:步长超过30后,运行时间会超过 1 分钟。步长超过50后,运行时间会超过 3 分钟
model2 = sm.tsa.ARIMA(stock_train2, order = (forcast_steps,1,forcast_steps),freq='W-MON')

model2 = model2.fit()
pred_2 = model2.forecast(steps=forcast_steps)
pred_2[-10:]
plt.figure(dpi=600)
plt.plot(stock_train2)
plt.plot(pred_2)
Step5: 检验模型
stock_actual = stock_week['20140609':'20160627']
print(stock_actual)
print(pred_1)
error_1=pow(stock_actual-pred_1,2)
MSE1=error_1.sum()/len(pred_1)
print(MSE1)
print(pred_2)

error_2=pow(stock_actual-pred_2,2)
MSE2=error_2.sum()/len(pred_2)
print(MSE2)
热门推荐
地理信息科学在城市规划中的角色:GIS绘制智慧城市蓝图
退烧药间隔几个小时吃一次
关于“老师”的这些称谓,你都知道吗?
IP地址冲突的简单解决方法
交了养老金后如何进行查询?养老金查询的结果对个人有哪些影响?
呼吸领域——COPD,今年迎来两个重磅新药!
如何设置不连续触发事件js
生活在比邻星b上面的“三体文明”真的会看到三个太阳吗?
DeepSeek中文读音解析:揭秘真正的发音奥秘
冰糖桔子的五大功效与作用
昆明夜市全攻略:美食、交通、景点一网打尽
如何清理洗衣机内的脏东西?学会这些方法让除垢不再困难!
与第二型糖尿病共存:饮食运动控好血糖 延长寿命不是问题
功能性饮料:营养与健康的未来
如何评估比特币买卖的法律风险
2024教育双面观察:在传统与创新之间寻找平衡
金鸡滩煤矿:五大转变助力降本增效
别轻易让老人带娃:当代家庭代际育儿观念冲突与调和之道
沈阳创业必看:注册公司时如何节省成本?
这种副作用最小的降尿蛋白药物,肾友应该如何选择?
绿色家居环保的装修材料和节能设计能降低家居能耗,实现绿色生活
行政事业单位建设项目管理制度怎么优化?
听说猫咪在装傻?猫咪是聪明的生物吗
《王国保卫战5 联盟》评测:童年最强神作?还能复刻当年荣耀吗?
有爱主人向你诠释什么叫做信任,感觉好刺激!
生辰八字测财位怎么测算
心学问青少年教育,亲子教育中的同理心培养:让孩子学会理解和关怀
养狗狗有哪些日常护理小技巧
老英雄亚瑟的崛起:简单英雄的不凡之路
宁波必去景点全攻略:从天一阁到东钱湖,玩转甬城精华