灰色预测GM模型

1.概念理解

G(grey)、M(Model)、(1,1)表示只含有一个变量的一阶微分方程模型。
灰色是介于白色和黑色之间的,部分已知,部分未知。以GDP为例,我们有往年的数据和一定的理论基础,但是无法精确计算下一年的值。

2.适用场景

数列预测:定时求量。已知xx年到xx年的数据,请预测下一年的数据。比如GDP、人口数量、耕地面积、粮食产量等问题。
灾变预测:定量求时。已知xx年到xx年的数据和某灾变的阈值,预测下一次灾变发生的时间。比如洪涝灾害、虫灾等问题。
拓扑预测:对数据波形进行预测,等于求解多个灾变预测,以虫灾为例,将虫灾分为"轻微"、“中度”、“重度”,也就是有三个阈值,然后我们去预测分别到达这三个阈值的年份。

3.建模步骤

  • 根据原始数据,通过累加等方式削弱随机性、获得有规律的新序列
  • 建立相应的微分方程模型,得到离散点处的解
  • 再通过累减求得原始数据的估计值,从而对原始数据预测

4.优缺点分析

灰色预测模型在建模过程中所需要的数据量比较少,预测比较准确,精度较高。以及预测模型的样本分布不需要有规律性,计算简便,检验方便。但是灰色预测模型只适用于中长期预测,不适用与短期分析。
时间序列模型的优点,主要是可以从时间序列中找出变量变化的特征、趋势以及发展规律,从而对变量的未来变化进行有效地预测。而时间序列模型的缺点,主要是时间序列预测法因突出时间序列暂不考虑外界因素影响,因而存在着预测误差的缺陷,当遇到外界发生较大变化,往往会有较大偏差,时间序列预测法对于中短期预测的效果要比长期预测的效果好。

5.代码参数

#!/usr/bin/env python
# coding: utf-8

# In[ ]:


# GM模型,预测
def GM11(x0): #自定义灰色预测函数
   import numpy as np
   x1 = x0.cumsum() #1-AGO序列
   x1 = pd.DataFrame(x1)
   z1 = (x1 + x1.shift())/2.0 #紧邻均值(MEAN)生成序列
   z1 = z1[1:].values.reshape((len(z1)-1,1))  # 转成矩阵
   B = np.append(-z1, np.ones_like(z1), axis = 1)  # 列合并-z1和形状同z1的1值矩阵  19X2
   Yn = x0[1:].reshape((len(x0)-1, 1))  # 转成矩阵 19
   [[a],[b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Yn) #计算参数,基于矩阵运算,np.dot矩阵相乘,np.linalg.inv矩阵求逆
   f = lambda k: (x0[0]-b/a)*np.exp(-a*(k-1))-(x0[0]-b/a)*np.exp(-a*(k-2)) #还原值
   delta = np.abs(x0 - np.array([f(i) for i in range(1,len(x0)+1)]))  # 残差绝对值序列
   C = delta.std()/x0.std()
   P = 1.0*(np.abs(delta - delta.mean()) < 0.6745*x0.std()).sum()/len(x0)
   return f, a, b, x0[0], C, P #返回灰色预测函数、a、b、首项、方差比、小残差概率


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rubyw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值