灰色预测模型python_python实现灰色预测模型(GM11)——以预测股票收盘价为例
[TOC]
程序简介
利用灰色预测GM11模型预测股票收盘价,由于灰色预测模型适合短期预测和小样本,所以程序输入数据为5个,输出为1个,进行动态建模 程序输入:原序列、需要往后预测的个数 程序输出:预测值、模型结构(后验差比、发展系数、灰色作用量)
灰色预测模型(GM11)即对原始数据作累加生成(或其它方法生成)得到近似的指数规律再进行建模的方法。灰色预测模型对于不同问题采用不同模型,模型主要解决生成序列是有指数变化规律,只能描述单调的变化过程。
程序/数据集下载
点击进入下载地址
代码分析
导入模块、路径
# -*- coding: utf-8 -*-
from Module.BuildModel import GM11
from sklearn.metrics import mean_absolute_error
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
#路径目录
baseDir = ''#当前目录
staticDir = os.path.join(baseDir,'Static')#静态文件目录
resultDir = os.path.join(baseDir,'Result')#结果文件目录
读取上证指数数据分割训练和测试集,本文只使用收盘价,查看内容
#读取数据
data = pd.read_csv(staticDir+'/000001.csv',encoding='gbk')
train = data['收盘价'].values[-15:-10]#训练数据
test = data['收盘价'].values[-10:]#测试数据
data.head()
日期 | 股票代码 | 名称 | 收盘价 | 最高价 | 最低价 | 开盘价 | 前收盘 | 涨跌额 | 涨跌幅 | 成交量 | 成交金额 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2020-02-18 | '000001 | 上证指数 | 2984.9716 | 2990.6003 | 2960.7751 | 2981.4097 | 2983.6224 | 1.3492 | 0.0452 | 311665913 | 3.74998562648e+11 |
1 | 2020-02-17 | '000001 | 上证指数 | 2983.6224 | 2983.6371 | 2924.9913 | 2924.9913 | 2917.0077 | 66.6147 | 2.2837 | 313198007 | 3.67014340129e+11 |
2 | 2020-02-14 | '000001 | 上证指数 | 2917.0077 | 2926.9427 | 2899.5739 | 2899.8659 | 2906.0735 | 10.9342 | 0.3763 | 250650627 | 3.08080368726e+11 |
3 | 2020-02-13 | '000001 | 上证指数 | 2906.0735 | 2935.4060 | 2901.2425 | 2927.1443 | 2926.8991 | -20.8256 | -0.7115 | 274804844 | 3.34526327364e+11 |
4 | 2020-02-12 | '000001 | 上证指数 | 2926.8991 | 2926.8991 | 2892.4240 | 2895.5561 | 2901.6744 | 25.2247 | 0.8693 | 248733429 | 2.97534420493e+11 |
使用GM11函数进行动态建模,打印结论,GM11函数位于项目文件夹的Module/BuildModel.py,下文会给出代码
#GM11动态建模
yPre = []
for i in range(test.shape[0]):
#只预测1个数
result = GM11(train,1)
yPre.append(result['predict']['value'][0])
#更新训练集
train = train.tolist()[:-1]
train.append(test[i])
train = np.array(train).reshape(-1)
#计算MAE
MAE = mean_absolute_error(test,yPre)
#打印模型
print(result['C']['desc'])
print(result['a']['desc'],np.round(result['a']['value'],2))
print(result['b']['desc'],np.round(result['b']['value'],2))
后验差比<=0.65,模型精度等级为勉强
发展系数 0.07
灰色作用量 150.96
这是上文GM11的函数,该代码可直接运行进行测试,函数输入为原序列和预测个数,输出为模型各参数和序列值
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
def GM11(x,n):
'''
灰色预测
x:序列,numpy对象
n:需要往后预测的个数
'''
x1 = x.cumsum()#一次累加
z1 = (x1[:len(x1) - 1] + x1[1:])/2.0#紧邻均值
z1 = z1.reshape((len(z1),1))
B = np.append(-z1,np.ones_like(z1),axis=1)
Y = x[1:].reshape((len(x) - 1,1))
#a为发展系数 b为灰色作用量
[[a],[b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Y)#计算参数
result = (x[0]-b/a)*np.exp(-a*(n-1))-(x[0]-b/a)*np.exp(-a*(n-2))
S1_2 = x.var()#原序列方差
e = list()#残差序列
for index in range(1,x.shape[0]+1):
predict = (x[0]-b/a)*np.exp(-a*(index-1))-(x[0]-b/a)*np.exp(-a*(index-2))
e.append(x[index-1]-predict)
S2_2 = np.array(e).var()#残差方差
C = S2_2/S1_2#后验差比
if C<=0.35:
assess = '后验差比<=0.35,模型精度等级为好'
elif C<=0.5:
assess = '后验差比<=0.5,模型精度等级为合格'
elif C<=0.65:
assess = '后验差比<=0.65,模型精度等级为勉强'
else:
assess = '后验差比>0.65,模型精度等级为不合格'
#预测数据
predict = list()
for index in range(x.shape[0]+1,x.shape[0]+n+1):
predict.append((x[0]-b/a)*np.exp(-a*(index-1))-(x[0]-b/a)*np.exp(-a*(index-2)))
predict = np.array(predict)
return {
'a':{'value':a,'desc':'发展系数'},
'b':{'value':b,'desc':'灰色作用量'},
'predict':{'value':result,'desc':'第%d个预测值'%n},
'C':{'value':C,'desc':assess},
'predict':{'value':predict,'desc':'往后预测%d个的序列'%(n)},
}
if __name__ == "__main__":
data = np.array([1.2,2.2,3.1,4.5,5.6,6.7,7.1,8.2,9.6,10.6,11,12.4,13.5,14.7,15.2])
x = data[0:10]#输入数据
y = data[10:]#需要预测的数据
result = GM11(x,len(y))
predict = result['predict']['value']
predict = np.round(predict,1)
print('真实值:',y)
print('预测值:',predict)
print(result)
进行观测值预测值可视化
#用来正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
#用来正常显示负号
plt.rcParams['axes.unicode_minus']=False
plt.plot(range(test.shape[0]),yPre,label="预测值")
plt.plot(range(test.shape[0]),test,label="观测值")
plt.legend()
plt.title('GM11预测效果,MAE:%2f'%MAE)
plt.savefig(resultDir+'/GM11预测效果.png',dpi=100,bbox_inches='tight')
灰色预测模型python_python实现灰色预测模型(GM11)——以预测股票收盘价为例相关推荐
- python灰色预测_python实现灰色预测模型(GM11)——以预测股票收盘价为例
目录 程序简述 利用灰色预测GM11模型预测股票收盘价,由于灰色预测模型适合短期预测和小样本,所以程序输入数据为5个,输出为1个,进行动态建模 程序输入:原序列.需要往后预测的个数 程序输出:预测值. ...
- python财务报表预测股票价格_python实现灰色预测模型(GM11)——以预测股票收盘价为例...
原博文 2020-02-26 18:56 − [TOC] # 程序简介 利用灰色预测GM11模型预测股票收盘价,由于灰色预测模型适合短期预测和小样本,所以程序输入数据为5个,输出为1个,进行动态建模 ...
- 数学建模-预测模型总结(适用范围、优缺点)【灰色预测模型、插值与拟合、时间序列预测法、马尔科夫预测、差分方程、微分方程模型、神经元网络】
基于数学建模的预测方法种类繁多,从经典的单耗法.弹性系数法.统计分析法,到目前的灰色预测法.当在使用相应的预测方法建立预测模型时,我们需要知道主要的一些预测方法的研究特点,优缺点和适用范围.下面就当下 ...
- 灰色-马尔可夫预测模型
在实际生活中,我们经常遇到很多要预测的事情,其中很常见的就是对产品销量的预测,这对于防止产品供应不足或者产品滞销的情况是很有用的.我们要介绍的灰色-马尔可夫模型就是一个比较热门的预测模型,它的特点是: ...
- 学习数学建模算法与应用【灰色关联系分析与预测模型】
主要内容 一灰色预测的概念: 二 灰色生成数列: 三 灰色关联度分析: 五 灰色预测实例 四 灰色模型GM: 灰色预测的概念 1982我国学者邓聚龙教授发表第一篇中文论文<灰色控制系统>标 ...
- 关于灰色关联分析以及灰色预测初步理解
前言 最近初步的学习了灰色关联分析跟灰色预测的知识,做个简要的笔记 一.灰色关联分析 1.引言 我们分析的问题都存在很多指标,也可以说是多种系统作用因素共同决定,当我们准备做出决定时,会找到哪个变量对 ...
- 灰色关联分析_灰色关联分析模型研究综述
灰色关联分析模型研究小结 1 引言 灰色关联分析是灰色系统理论中十分活跃的一个分支, 其基本思想是根据序列曲线几何形状来判断不同序列之间的联系是否紧密. 基本思路是通过线性插值的方法将系统因素的离散行 ...
- 【数学建模】预测模型笔记之灰色预测
学习来源:清风老师 灰色预测 灰色系统 GM(1,1)模型: Grey(Gray) Model GM(1,1)是使用原始的离散非负数据列,通过一次累加生成削弱随机性的较有规律的新的离散数据列,然后通过 ...
- matlab灰色关联逻辑分析模型,灰色理论灰色预测模型和灰色关联度分析matlab通用代码...
%该程序用于灰色关联分析,其中原始数据的第一行为参考序列,1至15行为正相关序列,16至17为负相关序列 clc,clear load x.txt %把原始数据存放在纯文本文件x.txt 中 %如果全 ...
最新文章
- Win64 驱动内核编程-13.回调监控模块加载
- DeepLab v2的摘要部分(翻译加理解)
- STM32开发 -- Systick定时器
- 漫游Kafka之过期数据清理
- 【Android】安装时, 先拷so主目录(当前设备相关),再拷so次目录,不重复拷贝 (armeabi/armeabi-v7a) arm-v7不兼容arm-v5
- HTML基础(part3)--常用标签之HTML标签
- 互联网企业安全高级指南3.6 需要自己发明安全机制吗
- 蒙山中学网站的服务器,上海金山区蒙山中学
- 2021-2025年中国一次性生物处理系统行业市场供需与战略研究报告
- Failed to meta-introspect annotation interface org.springframework.web.bind.annotation.RequestBody:
- git 服务器上新建项目
- 禁忌搜索算法(Tabu Search)
- android 修改手机型号加点,修改Android设备信息,如修改手机型号为iPhone7黄金土豪版! -电脑资料...
- 一个基本开发框架的整合演化之路--9、整合文件服务器fastdfs
- 安装VMware出现Error 1406:could not write value installpath to key的解决办法
- 推荐一个磁盘清理工具
- django-haystack 对 多对多字段( ManyToManyField )进行索引
- Python利用POP3/SMTP服务自动发送qq邮件
- 20分钟让你了解OpenGL——OpenGL全流程详细解读
- db2 删除索引_[收录量]史上最全的百度索引量下降原因分析及解