设变量 X ( 0 ) = { X ( 0 ) ( i ) , i = 1 , 2 , . . . , n } X^{(0)}=\{X^{(0)}(i),i=1,2,...,n\} X(0)={X(0)(i),i=1,2,...,n}为一非负单调原始数据序列,建立灰色预测模型:首先对 X ( 0 ) X^{(0)} X(0)进行一次累加得到一次累加序列 X ( 1 ) = { X ( 1 ) ( K ) , k = 1 , 2 , . . . , n } X^{(1)}=\{X^{(1)}(K),k=1,2,...,n\} X(1)={X(1)(K),k=1,2,...,n}。对 X ( 1 ) X^{(1)} X(1)可建立下述一阶线性微分方程:
d X ( 1 ) d t + a X ( 1 ) = u \frac{dX^{(1)}}{d_t}+aX^{(1)}=u dtdX(1)+aX(1)=u
即GM(1,1)模型。
求解微分方程,得到预测模型如下:
X ^ ( 1 ) ( k + 1 ) = [ X ^ ( 1 ) ( 0 ) − u ^ a ^ ] e − a ^ k + u ^ a ^ \hat{X}^{(1)}(k+1)=[\hat{X}^{(1)}(0)-\frac{\hat{u}}{\hat{a}}]e^{-\hat{a}k}+\frac{\hat{u}}{\hat{a}} X^(1)(k+1)=[X^(1)(0)−a^u^]e−a^k+a^u^
由于GM(1,1)模型得到的是一次累加量,将GM(1,1)模型所得数据 X ^ ( 1 ) ( k + 1 ) \hat{X}^{(1)}(k+1) X^(1)(k+1) 经过累减还原为 X ^ ( 0 ) ( k + 1 ) \hat{X}^{(0)}(k+1) X^(0)(k+1) ,即 X ( 0 ) X^{(0)} X(0) 的灰色预测模型为:
X ^ ( 0 ) ( k + 1 ) = ( e − a ^ − 1 ) [ X ^ ( 0 ) ( n ) − u ^ a ^ ] e − a ^ k \hat{X}^{(0)}(k+1)=(e^{-\hat{a}}-1)[\hat{X}^{(0)}(n)-\frac{\hat{u}}{\hat{a}}]e^{-\hat{a}k} X^(0)(k+1)=(e−a^−1)[X^(0)(n)−a^u^]e−a^k
下面是后验差模型精度检验表:
任务步骤首先下载实验所需数据
链接:https://pan.baidu.com/s/1bEwkedw5wbAH3ztoGTXFJQ
提取码:ygtl
下载提取,然后解压到本地
数据探索分析官方文档显示Tkinter以及自 Python 3.1 起的新主题小部件的接口ttk都已经包含在 Python 标准库中。 我的实验环境就是Windows下的Python3.6(Anaconda3下的虚拟环境),所以省去了原报告[Ubuntu环境]中的
sudo apt-get update sudo apt-get install python3-tk
影响财政收入(Y)的因素有很多,在通过经济理论对财政收入的解释以及对实践的观察,我们可以得到以下的相关因素:社会从业人数、在岗职工工资总额、社会消费品零售总额、城镇居民人均可支配收入、城镇居民人均消费性支出、全社会固定资产投资额、年末总人口、地区生产总值、第一产业产值、税收、居民消费价格指数、第三产业与第二产业产值比、居民消费水平。
描述分析打开terminal,本实验所需要的依赖包如下:
pip install pandas==0.23.4
pip install xlrd==1.2.0
pip install xlwt==1.3.0
pip install keras==2.2.4
pip install tensorflow==1.3.0
pip install matplotlib==2.0.2
首先对数据进行描述性统计分析,获取对数据的总体认识。代码如下,将其追加到gaikuo.py文件中。
import numpy as np
import pandas as pd
inputfile = 'finance/data1.csv'
data = pd.read_csv(inputfile)
r = [data.min(), data.max(), data.mean(), data.std()]
r = pd.DataFrame(r, index=['Min', 'Max', 'Mean', 'STD']).T
r = np.round(r, 2)
print(r)
由上可得财政收入(y)的均值和标准差分别为618.08和609.25.这说明:某市各年份财政收入存在较大差异,2008年后,该市各年份财政收入大幅上升。
相关性分析相关系数可以用来描述定量和变量之间的关系,初步判断因变量与解释变量之间是否具有线性相关性。
新建python file 名为correlation.py
import numpy as np
import pandas as pd
inputfile = 'finance/data1.csv'
data = pd.read_csv(inputfile)
print(np.round(data.corr(method='pearson'), 2))
运行结果如下所示:
由上可知:居民消费价格指数(x11)与财政收入的线性关系不显著,而且呈现负相关。其余变量与财政收入呈现高度的正相关关系。
模型构建财政收入及各类别收入预测模型
某市财政收入预测模型对影响财政收入的因素建立灰色预测与神经网络的组合预测模型。由于Python以及扩展库并没有提供灰色预测功能,因此自行编写灰色预测函数gm()用来对地方财政收入进行预测。用于预测的影响财政收入的因素有社会从业人数(x1)、在岗职工工资总额(x2)、社会消费零售总额(x3)、城镇居民人均可支配收入(x4)、城镇居民人均消费性支出(x5)、固定资产投资额(x7)。2014年及2015年数值均通过Python建立灰色预测模型得出。
新建python file,名为:1-huise.py
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
inputfile = 'finance/data1.csv' # 输入的数据文件
outputfile = 'finance/data1_GM11.xls' # 灰色预测后保存的路径
data = pd.read_csv(inputfile) # 读取数据
data.index = range(1994, 2014)
data.loc[2014] = None
data.loc[2015] = None
def gm(x0): # 自定义灰色预测函数
x1 = x0.cumsum() # 1-AGO序列
z1 = (x1[:len(x1) - 1] + x1[1:]) / 2.0 # 紧邻均值(MEAN)生成序列
z1 = z1.reshape((len(z1), 1))
B = np.append(-z1, np.ones_like(z1), axis=1)
Yn = x0[1:].reshape((len(x0) - 1, 1))
[[a], [b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Yn) # 计算参数
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
l = ['x1', 'x2', 'x3', 'x4', 'x5', 'x7']
for i in l:
f = gm(data[i][:len(data) - 2].values)[0]
data[i][2014] = f(len(data) - 1) # 2014年预测结果
data[i][2015] = f(len(data)) # 2015年预测结果
data[i] = data[i].round(2) # 保留六位小数
data[l + ['y']].to_excel(outputfile) # 结果输出
对影响财政收入的因素建立神经网络预测模型。其参数设置为:误差精度 1 0 − 7 10^{-7} 10−7,学习次数10000次,(输入层6节点、隐藏层12节点,输出层1节点)。
新建python file 名为:1-yuce.py
神经网络预测代码如下所示,将其追加到1-yuce.py文件中:
import pandas as pd
inputfile = 'finance/data1_GM11.xls'
outputfile = 'finance/revenue.xls'
modelfile = 'finance/1-net.model'
data = pd.read_excel(inputfile)
feature = ['x1', 'x2', 'x3', 'x4', 'x5', 'x7']
data_train = data.loc[range(1994, 2014)].copy()
data_mean = data_train.mean()
data_std = data_train.std()
data_train = (data_train - data_mean) / data_std
x_train = data_train[feature].as_matrix()
y_train = data_train['y'].as_matrix()
from keras.models import Sequential
from keras.layers.core import Dense, Activation
net_file = 'net.model'
net = Sequential()
net.add(Dense(12, input_shape=(6,)))
net.add(Activation('relu'))
net.add(Dense(1, input_shape=(12,)))
net.compile(loss='mean_squared_error', optimizer='adam') # 编译模型
net.fit(x_train, y_train, nb_epoch=10000, batch_size=16) # 训练模型,学习一万次
net.save_weights(modelfile) # 保存模型参数
x = ((data[feature] - data_mean[feature]) / data_std[feature]).as_matrix()
data['y_pred'] = net.predict(x) * data_std['y'] + data_mean['y']
data.to_excel(outputfile)
print(data)
import matplotlib.pyplot as plt
p = data[['y', 'y_pred']].plot(subplots=True, style=['b-o', 'r-*'])
plt.show()
运行结果如下:
将数据零均值标准化后,带入地方财政收入所建立的3 层神经网络预测模型(输入层6节点、隐藏层12节点,输出层1节点),得到某市财政收入2015年的预测值为2533.15亿元。
上图为地方财政收入真实值与预测值对比图,由图可知真实值与预测值总体趋势相同,但仍然存在误差。
增值税预测模型对影响增值税的因素建立灰色预测模型,得出后验差比值、预测精度等级。其中增值税的影响因素的变量有:商品进口总值(x1)、工业增加值(x3)和工业增加值占GDP(x5)比重这3个因素。
新建python file 名为:2-huise.py
增值税预测模型具体代码如下,将其追加到2-huise.py文件中:
import numpy as np
import pandas as pd
inputfile = 'finance/data2.csv'
outputfile = 'finance/data2_GM11.xls'
data = pd.read_csv(inputfile)
data.index = range(1999, 2014)
data.loc[2014] = None
data.loc[2015] = None
def gm(x0): # 自定义灰色预测函数
x1 = x0.cumsum() # 1-AGO序列
z1 = (x1[:len(x1) - 1] + x1[1:]) / 2.0 # 紧邻均值(MEAN)生成序列
z1 = z1.reshape((len(z1), 1))
B = np.append(-z1, np.ones_like(z1), axis=1)
Yn = x0[1:].reshape((len(x0) - 1, 1))
[[a], [b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Yn) # 计算参数
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
l = ['x1', 'x3', 'x5']
for i in l:
f = gm(data[i][:len(data) - 2].as_matrix())[0]
data[i][2014] = f(len(data) - 1)
data[i][2015] = f(len(data))
data[i] = data[i].round(6)
data[l + ['y']].to_excel(outputfile)
对影响增值税的因素建立神经网络预测模型(输入层3节点,隐藏层6节点,输出层1节点),学习次数为10000次,误差精度 1 0 − 7 10^{-7} 10−7.
新建python file 名为:2-yuce.py
预测模型具体代码如下,将其追加到2-yuce.py文件中:
import pandas as pd
inputfile = 'finance/data2_GM11.xls'
outputfile = 'finance/VAT.xls'
modelfile = 'finance/2-net.model'
data = pd.read_excel(inputfile)
feature = ['x1', 'x3', 'x5']
data_train = data.loc[range(1999, 2014)].copy()
data_mean = data_train.mean()
data_std = data_train.std()
data_train = (data_train - data_mean) / data_std
x_train = data_train[feature].as_matrix()
y_train = data_train['y'].as_matrix()
from keras.models import Sequential
from keras.layers.core import Dense, Activation
model = Sequential()
model.add(Dense(6, input_shape=(3,)))
model.add(Activation('relu'))
model.add(Dense(1, input_shape=(6,)))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(x_train, y_train, nb_epoch=10000, batch_size=16)
model.save_weights(modelfile)
x = ((data[feature] - data_mean[feature]) / data_std[feature]).as_matrix()
data['y_pred'] = model.predict(x) * data_std['y'] + data_mean['y']
data.to_excel(outputfile)
print(data)
import matplotlib.pyplot as plt
p = data[['y', 'y_pred']].plot(subplots=True, style=['b-o', 'r-*'])
plt.show()
将数据零均值标准化后,代入增值税所建立的3层神经网络预测模型,得到增值税的2015年预测值为2685403万元。相关数据见下图。
增值税的真实值与预测值对比图如下所示
营业税预测模型对影响营业.税的因素建立灰色预测模型,得出后验差比值、预测精度等级。其中增值税的影响因素的变量有:全社会固定资产投资额(x3)、城市商品零售价格指数(x4)、规模以上国有及国有控股工业亏损面(x6)和建筑业企业利润总额(x8)比重这4个因素。
新建python file 名为:3-huise.py
营业税灰色预测模型具体代码如下,将其追加到3-huise.py文件中
import numpy as np
import pandas as pd
inputfile = 'finance/data3.csv'
outputfile = 'finance/data3_GM11.xls'
data = pd.read_csv(inputfile)
data.index = range(1999, 2014)
data.loc[2014] = None
data.loc[2015] = None
def gm(x0):
x1 = x0.cumsum() # 1-AGO序列
z1 = (x1[:len(x1) - 1] + x1[1:]) / 2.0 # 紧邻均值(MEAN)生成序列
z1 = z1.reshape((len(z1), 1))
B = np.append(-z1, np.ones_like(z1), axis=1)
Yn = x0[1:].reshape((len(x0) - 1, 1))
[[a], [b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Yn)
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
l = ['x3', 'x4', 'x6', 'x8']
for i in l:
f = gm(data[i][:len(data) - 2].as_matrix())[0]
data[i][2014] = f(len(data) - 1)
data[i][2015] = f(len(data))
data[i] = data[i].round()
data[l + ['y']].to_excel(outputfile)
print(data[l + ['y']])
对影响营业税的因素建立神经网络预测模型(输入层4节点,隐藏层8节点,输出层1节点),学习次数为10000次,误差精度 1 0 − 7 10^{-7} 10−7.
新建python file 名为:3-yuce.py
营业税神经网络预测模型具体代码如下,将其追加到3-yuce.py文件中
import pandas as pd
inputfile = 'finance/data3_GM11.xls'
outputfile = 'finance/sales_tax.xls'
modelfile = 'finance/3-net.model'
data = pd.read_excel(inputfile)
feature = ['x3', 'x4', 'x6', 'x8']
data_train = data.loc[range(1999, 2014)].copy()
data_mean = data_train.mean()
data_std = data_train.std()
data_train = (data_train - data_mean) / data_std
x_train = data_train[feature].as_matrix()
y_train = data_train['y'].as_matrix()
from keras.models import Sequential
from keras.layers.core import Dense, Activation
net = Sequential()
net.add(Dense(8, input_shape=(4,)))
net.add(Activation('relu'))
net.add(Dense(1, input_shape=(8,)))
net.compile(loss='mean_squared_error', optimizer='adam')
net.fit(x_train, y_train, nb_epoch=10000, batch_size=16)
net.save_weights(modelfile)
x = ((data[feature] - data_mean[feature]) / data_std[feature]).as_matrix()
data['y_pred'] = net.predict(x) * data_std['y'] + data_mean['y']
data.to_excel(outputfile)
print(data)
import matplotlib.pyplot as plt
data[['y', 'y_pred']].plot(subplots=True, style=['b-o', 'r-*'])
plt.show()
运行结果如下所示:
将数据零均值标准化后,代入营业税所建立的3层神经网络预测模型(输入层4节点,隐藏层8节点,输出层1节点),得到营业税的2015年预测值为2264086万元,相关数据见图。
上图为营业税真实值与预测值的对比图,有图可知真是值与预测值的总体趋势相同,但真实值与预测值存在误差。
企业所得税预测模型对影响企业所得税的因素建立灰色预测模型
影响企业所得税(y)的变量有第二产业增加值(x1)、第三产业增加值(x2)、全社会固定资产投资额(x3)、城市商品零售价格指数(1978=100)(x4)、规模以上国有及国有控股工业企业亏损面(x6)、建筑业总产值(x7)、限额以上连锁店零售额(x9)、地方财政总收入(x10)8个变量
新建python file 名为:4-huise.py
企业所得税灰色预测模型具体代码如下,将其追加到4-huise.py中
import numpy as np
import pandas as pd
inputfile = 'finance/data4.csv'
outputfile = 'finance/data4_GM11.xls'
data = pd.read_csv(inputfile)
data.index = range(2002, 2014)
data.loc[2014] = None
data.loc[2015] = None
def gm(x0):
x1 = x0.cumsum() # 1-AGO序列
z1 = (x1[:len(x1) - 1] + x1[1:]) / 2.0 # 紧邻均值(MEAN)生成序列
z1 = z1.reshape((len(z1), 1))
B = np.append(-z1, np.ones_like(z1), axis=1)
Yn = x0[1:].reshape((len(x0) - 1, 1))
[[a], [b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Yn)
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
l = ['x1', 'x2', 'x3', 'x4', 'x6', 'x7', 'x9', 'x10']
for i in l:
f = gm(data[i][:len(data) - 2].as_matrix())[0]
data[i][2014] = f(len(data) - 1)
data[i][2015] = f(len(data))
data[i] = data[i].round(2)
data[l + ['y']].to_excel(outputfile)
print(data[l + ['y']])
新建python file 名为:4-yuce.py
在4-yuce.py里编写代码,对影响企业所得税因素建立神经网络模型
import pandas as pd
import numpy as np
inputfile = 'finance/data4_GM11.xls'
outputfile = 'finance/enterprise_income.xls'
modelfile = 'finance/4-net.model'
data = pd.read_excel(inputfile)
feature = ['x1', 'x2', 'x3', 'x4', 'x6', 'x7', 'x9', 'x10']
data_train = data.loc[range(2002, 2014)].copy()
data_mean = data_train.mean()
data_std = data_train.std()
data_train = (data_train - data_mean) / data_std
x_train = data_train[feature].as_matrix()
y_train = data_train['y'].as_matrix()
from keras.models import Sequential
from keras.layers.core import Dense, Activation
net = Sequential()
net.add(Dense(6, input_shape=(8,)))
net.add(Activation('relu'))
net.add(Dense(1, input_shape=(6,)))
net.compile(loss='mean_squared_error', optimizer='adam')
net.fit(x_train, y_train, nb_epoch=10000, batch_size=16)
net.save_weights(modelfile)
x = ((data[feature] - data_mean[feature]) / data_std[feature]).as_matrix()
data['y_pred'] = net.predict(x) * data_std['y'] + data_mean['y']
data.to_excel(outputfile)
print(data)
import matplotlib.pyplot as plt
data[['y', 'y_pred']].plot(subplots=True, style=['b-o', 'r-*'])
plt.show()
运行结果如下所示: 下面是企业所得税及其相关因素的历史数据与预测值
将数据零均值标准化或,代入企业所得税所建立的3层神经网络预测模型(输入层8节点,隐藏层6节点,输出层1节点),得到企业所得税的2015年预测值为1781920万元,相关数据见上图。
企业所得税真实值与预测值对比图如下所示
有真实值与预测值的对比图我们能够得出,真实值与预测值的的总体趋势相同。
个人所得税预测模型新建python file 名为:5-huise.py
在5-huise.py文件中编写代码,用于对影响个人所得税的影响因素建立灰色预测模型
import numpy as np
import pandas as pd
inputfile = 'finance/data5.csv'
outputfile = 'finance/data5_GM11.xls'
data = pd.read_csv(inputfile)
data.index = range(2000, 2014)
data.loc[2014] = None
data.loc[2015] = None
l = ['x1', 'x4', 'x5', 'x7']
def gm(x0): # 自定义灰色预测函数
import numpy as np
x1 = x0.cumsum() # 1-AGO序列
z1 = (x1[:len(x1) - 1] + x1[1:]) / 2.0 # 紧邻均值(MEAN)生成序列
z1 = z1.reshape((len(z1), 1))
B = np.append(-z1, np.ones_like(z1), axis=1)
Yn = x0[1:].reshape((len(x0) - 1, 1))
[[a], [b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Yn) # 计算参数
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
for i in l:
f = gm(data[i][:len(data) - 2].as_matrix())[0]
data[i][2014] = f(len(data) - 1)
data[i][2015] = f(len(data))
data[i] = data[i].round()
data[l + ['y']].to_excel(outputfile)
新建python file 名为:5-yuce.py
在5-yuce.py文件中编写代码,用于对影响个人所得税的影响因素建立神经网络预测模型,其参数设置为误差精度 1 0 − 7 10^{-7} 10−7,学习次数15000次,输入层4节点,隐藏层8节点,输出层1节点。
具体的代码如下所示:
import pandas as pd
import numpy as np
inputfile = 'finance/data5_GM11.xls'
outputfile = 'finance/personal_Income.xls'
modelfile = 'finance/5-net.model'
data = pd.read_excel(inputfile)
feature = ['x1', 'x4', 'x5', 'x7']
data_train = data.loc[range(2000, 2014)].copy()
data_mean = data_train.mean()
data_std = data_train.std()
data_train = (data_train - data_mean) / data_std
x_train = data_train[feature].as_matrix()
y_train = data_train['y'].as_matrix()
from keras.models import Sequential
from keras.layers.core import Dense, Activation
net = Sequential()
net.add(Dense(8, input_shape=(4,)))
net.add(Activation('relu'))
net.add(Dense(1, input_shape=(8,)))
net.compile(loss='mean_squared_error', optimizer='adam')
net.fit(x_train, y_train, nb_epoch=15000, batch_size=16)
net.save_weights(modelfile)
x = ((data[feature] - data_mean[feature]) / data_std[feature]).as_matrix()
data['y_pred'] = net.predict(x) * data_std['y'] + data_mean['y']
data.to_excel(outputfile)
print(data)
import matplotlib.pyplot as plt
data[['y', 'y_pred']].plot(subplots=True, style=['b-o', 'r-*'])
plt.show()
运行结果如下所示:
个人所得税及其相关因素历史数据预测值如下:
将数据零均值标准化后,代入个人所得税所建立的3层神经网络预测模型(输入层4节点,隐藏层8节点,输出层1节点),得到个人所得税的2015年预测值为648785.25,相关数据见上图。
有上图可知:个人所得税的真实值与预测值的总体趋势相同,误差也相对较小。
政府性基金收入预测模式相比于2006年以往年份,2007年的该市土地出让金大幅上涨,而土地出让金收入的大幅涨直接影响了政府性基金收入。所以为了数据的连续性,利用灰色预测模型对2007年至2013年的政府性基金收入进行预测
新建python file 名为:6-yuce.py
政府性基金收入预测模式具体代码如下所示,,将其追加到6-yuce.py文件中。
from __future__ import print_function
import numpy as np
import pandas as pd
def gm(x0): # 自定义灰色预测函数
x1 = x0.cumsum() # 1-AGO序列
z1 = (x1[:len(x1) - 1] + x1[1:]) / 2.0 # 紧邻均值(MEAN)生成序列
z1 = z1.reshape((len(z1), 1))
B = np.append(-z1, np.ones_like(z1), axis=1)
Yn = x0[1:].reshape((len(x0) - 1, 1))
[[a], [b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Yn) # 计算参数
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
x0 = np.array([3152063, 2213050, 4050122, 5265142, 5556619, 4772843, 9463330])
f, a, b, x00, C, P = gm(x0)
print('2014年、2015年的预测结果分别为:\n%0.2f万元和%0.2f万元' % (f(8), f(9)))
print('后验差比值为:%0.4f' % C)
p = pd.DataFrame(x0, columns=['y'], index=range(2007, 2014))
p.loc[2014] = None
p.loc[2015] = None
p['y_pred'] = [f(i) for i in range(1, 10)]
p.index = pd.to_datetime(p.index, format='%Y')
import matplotlib.pyplot as plt
p.plot(style=['b-o', 'r-*'], xticks=p.index)
plt.show()
运行结果如下:
打印出2014年及2015年的预测结果分别为10387002.56万元和12929795.07万元。
灰色预测的后验差比值为:0.2390,小于0.35,预测精度为好。
灰色预测政府性基金真实值与预测值对比图如下图所示
由上图可得,灰色预测政府性基金真实值与预测值对比的总体趋势相同,但由于数据量小,导致模型拟合的不是很完美,还存在很大的误差。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)