财政收入影响因素分析及预测
一、背景与挖掘目标
本案例所用的财政收入分为地方一般预算收入和政府性基金收入。地方一般预算收入包括税收收入和非税收收入两个部分。
结合财政收入预测的需求分析,本次数据分析建模目标主要有以下两个:(1)分析、识别影响地方财政收入的关键属性。(2)预测2014年、2015年和2016年的财政收入。
二、分析方法与过程
本案例在已有研究的基础上运用Lasso特征选择方法来研究影响地方财政收入的因素。在Lasso特征选择的基础上,鉴于灰色预测对少量数据预测的优良性能,对单个选定的影响因素建立灰色预测模型,得到它们在2014年及2015年的预测值。由于支持向量回归较强的实用性和容错能力,对历史数据建立训练模型,把灰色预测的数据结果代入训练完成的模型中,充分考虑历史数据信息,可以得到较为准确的预测结果,即2014年、2015年和2016年财政收入。
1、分析步骤与流程
本案例的总体流程如图所示:

主要包括以下步骤:
1)对原始数据进行探索性分析,了解原始属性之间的相关性。
2)利用Lasso特征选择模型提取关键属性。
3)建立单个属性的灰色预测模型以及支持向量回归预测模型。
4)使用支持向量回归预测模型得出2014年至2016年财政收入的预 测值。
5)对上述建立的财政收入预测模型进行评价。
2、数据探索分析
影响财政收入(y)的因素有很多,通过经济理论对财政收入的解释以及对实践的观察,考虑一些与能源消耗关系密切并且直观上有线性关系的因素,初步选取以下属性为自变量, 分析它们之间的关系。各项属性名称及属性说明如表所示。


具体数据如下:

(1)描述性统计分析
1 #代码6-1 描述性统计分析 2 import numpy as np 3 import pandas as pd 4 inputfile = 'E:/大三下/数据分析/数据/第六章/data.csv' # 输入的数据文件 5 data = pd.read_csv(inputfile) # 读取数据 6 7 # 描述性统计分析 8 # 依次计算最小值、最大值、均值、标准差 9 description = [data.min(), data.max(), data.mean(), data.std()] 10 # 将结果存入数据框 11 description = pd.DataFrame(description,index = ['Min', 'Max', 'Mean', 'STD']).T 12 print('2019114243032 描述性统计结果:\n',np.round(description, 2)) # 保留两位小数
得到的结果如下图所示,其中,财政收入(y)的均值和标准差分别为618.08和609.25,这说明某市各年份财政收入存在较大差异;2008年后,某市各年份财政收入大幅上升。

(2)相关性分析
采用Person相关系数法求解原始数据的Person相关系数矩阵,对原始数据进行相关分析,得到相关系数矩阵。
1 #代码6-2 求解原始数据的Pearson相关系数矩阵 2 corr = data.corr(method='pearson') #计算相关系数矩阵 3 print('2019114243032 相关系数矩阵为:\n',np.round(corr,2)) #保留两位小数

由上图可以看出,居民消费价格指数(x11)与财政收入(y)的 线性关系不显著,呈现负相关。其余属性均与财政收入呈现高度的正相关关系,按相关性大小,依次是x3、x4、x5、x7、x8、x10、x13、x2、 x9、x1、x6和x12。同时,各属性之间存在着严重的多重共线性,例如,属性x1、x4、x5、x6、x8、x9、x10与除了x11之外的属性均存在严重的共线性;属性x2、x3、x7与除了x11和x12外的其他属性存在着严重的多重共线性;x11与各属性的共线性不明显;x12与除了x2、x3、x7、 x11之外的其他属性有严重的共线性;x13与除了x11之外的各属性有严重的共线性。除此之外,x2和x3、x2和x13、x3和x13等多对属性之间存在完全的共线性。
由上述分析可知,选取的各属性除了x11外,其他属性与y的相关性很强,可以用作财政收入预测分析的关键属性,但这些属性之间存在着信息的重复,需要对属性进行进一步筛选。
(3)绘制相关性热力图
1 #代码6-3 绘制相关性热力图 2 import matplotlib.pyplot as plt 3 import seaborn as sns 4 plt.subplots(figsize=(10, 10)) # 设置画面大小 5 sns.heatmap(corr, annot=True, vmax=1, square=True, cmap="Blues") 6 plt.rcParams['font.sans-serif'] = ['SimHei'] 7 plt.title('2019114243032 相关性热力图') 8 plt.show() 9 plt.close

由相关性热力图颜色的深浅可以看出各属性除了x11与y为负弱相关外,其他属性与y强相关。
3、数据预处理
在财政收入预测中,各原始属性存在着严重的多重共线性,多重共线性已成为主要问题,这里采用Lasso回归方法进行特征选取是恰当的。以下代码使用Lasso回归方法进行关键属性选取。
1 #代码6-4 Lasso回归选取关键属性 2 import numpy as np 3 import pandas as pd 4 from sklearn.linear_model import Lasso 5 6 inputfile = 'E:/大三下/数据分析/数据/第六章/data.csv' # 输入的数据文件 7 data = pd.read_csv(inputfile) # 读取数据 8 lasso = Lasso(1000) # 调用Lasso()函数,设置λ的值为1000 9 lasso.fit(data.iloc[:,0:13],data['y']) 10 print('相关系数为:',np.round(lasso.coef_,5)) # 输出结果,保留五位小数 11 print('相关系数非零个数为:',np.sum(lasso.coef_ != 0)) # 计算相关系数非零的个数 12 13 mask = lasso.coef_ != 0 # 返回一个相关系数是否为零的布尔数组 14 mask = np.append(mask,True) 15 print('相关系数是否为零:',mask) 16 17 outputfile ='E:/大三下/数据分析/数据/第六章/new_reg_data.csv' # 输出的数据文件 18 new_reg_data = data.iloc[:, mask] # 返回相关系数非零的数据 19 new_reg_data.to_csv(outputfile) # 存储数据 20 print('输出数据的维度为:',new_reg_data.shape) # 查看输出数据的维度


由上述结果可看出,利用Lasso回归方法识别影响财政收入的关键影响因素是社会从业人数(x1)、社会消费品零售总额(x3)、城镇居民人均可支配收入(x4)、城镇居民人均消费性支出(x5)、全社会固定资产投资额(x7)、地区生产总值(x8)、第一产业产值(x9)和居民消费水平(x13)。
4、模型预测
(1)灰色预测算法
依据Lasso回归选取的关键变量构建灰色预测模型,并预测2014年、2015年和2016年的财政收入。
1 # 代码6-5 构建灰色预测模并预测 2 3 import sys 4 sys.path.append('../code') # 设置路径 5 import numpy as np 6 import pandas as pd 7 from GM11 import GM11 # 引入自编的灰色预测函数 8 9 inputfile1 = 'E:/大三下/数据分析/数据/第六章/new_reg_data.csv' # 输入的数据文件 10 inputfile2 = 'E:/大三下/数据分析/数据/第六章/data.csv' # 输入的数据文件 11 new_reg_data = pd.read_csv(inputfile1) # 读取经过特征选择后的数据 12 data = pd.read_csv(inputfile2) # 读取总的数据 13 new_reg_data.index = range(1994, 2014) 14 new_reg_data.loc[2014] = None 15 new_reg_data.loc[2015] = None 16 l = ['x1', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x13'] 17 for i in l: 18 f = GM11(new_reg_data.loc[range(1994, 2014),i].values)[0] 19 new_reg_data.loc[2014,i] = f(len(new_reg_data)-1) # 2014年预测结果 20 new_reg_data.loc[2015,i] = f(len(new_reg_data)) # 2015年预测结果 21 new_reg_data.loc[2016,i] = f(len(new_reg_data)+1) # 2016年预测结果 22 new_reg_data[i] = new_reg_data[i].round(2) # 保留两位小数 23 outputfile = 'E:/大三下/数据分析/数据/第六章/new_reg_data_GM11.xls' # 灰色预测后保存的路径 24 y = list(data['y'].values) # 提取财政收入列,合并至新数据框中 25 y.extend([np.nan,np.nan,np.nan]) 26 new_reg_data['y'] = y 27 new_reg_data.to_excel(outputfile) # 结果输出 28 print('2019114243032 预测结果为:\n',new_reg_data.loc[2014:2016,:]) # 预测结果展示


(2)SVR算法(支持向量回归)
依据灰色预测的结果构建支持向量回归预测模型,并预测2014年、2015年和2016年的财政收入。
1 # 代码6-6 构建支持向量回归预测模型SVR 2 3 import matplotlib.pyplot as plt 4 from sklearn.svm import LinearSVR 5 import pandas as pd 6 7 inputfile = 'E:/大三下/数据分析/数据/第六章/new_reg_data_GM11.xls' # 灰色预测后保存的路径 8 data = pd.read_excel(inputfile,index_col = 0) # 读取数据 9 feature = ['x1', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x13'] # 属性所在列 10 data_train = data.loc[range(1994,2014)].copy() # 取2014年前的数据建模 11 data_mean = data_train.mean() 12 data_std = data_train.std() 13 data_train = (data_train - data_mean)/data_std # 数据标准化 14 x_train = data_train[feature].values # 属性数据 15 y_train = data_train['y'].values # 标签数据 16 17 linearsvr = LinearSVR() # 调用LinearSVR()函数 18 linearsvr.fit(x_train,y_train) 19 x = ((data[feature] - data_mean[feature])/data_std[feature]).values # 预测,并还原结果。 20 data['y_pred'] = linearsvr.predict(x) * data_std['y'] + data_mean['y'] 21 outputfile = 'E:/大三下/数据分析/数据/第六章/new_reg_data_GM11_revenue.xls' # SVR预测后保存的结果 22 data.to_excel(outputfile) 23 24 print('真实值与预测值分别为:\n',data[['y','y_pred']]) 25 26 fig = data[['y','y_pred']].plot(subplots = True, style=['b-o','r-*']) # 画出预测结果图 27 plt.rcParams['font.sans-serif'] = ['SimHei'] 28 plt.title('2019114243032 财政收入真实值与预测值对比图') 29 plt.show()




浙公网安备 33010602011771号