财政收入影响因素分析及预测

一、背景与挖掘目标

本案例所用的财政收入分为地方一般预算收入和政府性基金收入。地方一般预算收入包括税收收入和非税收收入两个部分。

结合财政收入预测的需求分析,本次数据分析建模目标主要有以下两个:(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()

 

 

 

 

posted @ 2023-03-05 18:20  熊能能  阅读(1321)  评论(0)    收藏  举报