【深度学习实验】第二次:Python财政收入影响因素分析及预测

【深度学习实验】第二次:Python财政收入影响因素分析及预测,第1张

相关知识

设变量 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^]ea^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)=(ea^1)[X^(0)(n)a^u^]ea^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} 107,学习次数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} 107.

新建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} 107.

新建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} 107,学习次数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,预测精度为好。

灰色预测政府性基金真实值与预测值对比图如下图所示

由上图可得,灰色预测政府性基金真实值与预测值对比的总体趋势相同,但由于数据量小,导致模型拟合的不是很完美,还存在很大的误差。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/916892.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存