01案例 - 财政收入影响因素分析及预测模型
案例背景
在我国现行的分税制财政管理体制下,地方财政收人不仅是国家财政收入的重要组成部分,而且具有其相对独立的构成内容。如何有效的利用地方财政收入,合理的分配,来促进地方的发展,提高市民的收入和生活质量是每个地方政府需要考虑的首要问题。因此,对地方财政收人进行预测,不仅是必要的,而且也是可能的。科学、合理地预测地方财政收人,对于克服年度地方预算收支规模确定的随意性和盲目性,正确处理地方财政与经济的相互关系具有十分重要的意义。
- 某市作为改革开放的前沿城市,其经济发展在全国经济中的地位举足轻重。目前,该市在财政收入规模、结构等方面与北京、上海、深圳等城市仍有一定差距,存在不断完善的空间。本案例旨在通过研究,发现影响该市目前以及未来地方财源建设的因素,并对其进行深入分析,提出对该市地方财源优化的具体建议,供政府决策参考,同时为其他经济发展较快的城市提供借鉴。
- 考虑到数据的可得性,本案例所用的财政收入分为地方一般预算收入和政府性基金收入。地方一般预算收入包括:(1)税收收入,主要包括企业所得税和地方所得税中中央和地方共享的40%,地方享有的 25%的增值税、营业税、印花税等;(2)非税收入,包括专项收入、行政事业性收费、罚没收入、国有资本经营收入和其他收入等。政府性基金收入是国家通过向社会征收以及出让土地、发行彩票等方式取得收入,并专项用于支持特定基础设施建设和社会事业发展的收入。
- 由于1994年我国对财政体制进行了重大改革,开始实行分税制财政体制,影响了财政收入相关数据的连续性,在1994年前后不具有可比性。由于没有合适的数学手段来调整这种数据的跃变,仅对1994年及其以后的数据进行分析,本案例所用数据均来自《某市统计年鉴》(1995-2014)。
原始数据样例:
简单处理数据:
挖掘目标
- 分析、识别影响地方财政收入的关键属性;
- 预测2014年和2015年的财政收入。
分析方法
-
在以往的文献中,大多先建立财政收入与各待定的影响因素之间的多元线性回归模型,运用最小二乘估计方法来估计回归模型的系数,通过系数来检验它们之间的关系,模型的结果对数据的依赖程度很大,并且普通最小二乘估计求得的解往往是局部最优解。
-
Lasso是近年来被广泛应用于参数估计和变量选择的方法之一,并且Lasso进行变量选择在确定的条件下已经被证明是一致的。案例选用了Lasso特征选择方法来研究地方财政收入与各因素之间的关系。
总体流程
1.对原始数据进行探索性分析,了解原始属性之间的相关性。
2.利用Lasso特征选择模型进提取关键属性。
3.建立单个属性的灰色预测模型以及支持向量回归预测模型。
4.使用支持向量回归预测模型得出2014-2015年财政收入的预测值。
5.对上述建立的财政收入预测模型进行评价。
数据探索分析
影响财政收入(y)的因素有很多,通过经济理论对财政收入的解释以及对实践的观察,考虑一些与能源消耗关系密切并且直观上有线性关系的因素,选取以下因素为自变量,分析它们之间的关系。
-
社会从业人数(x1):就业人数的上升伴随着居民消费水平的提高,从而间接影响财政收入的增加。
-
在岗职工工资总额(x2):反映的是社会分配情况,主要影响财政收入中的个人所得税、房产税以及潜在消费能力。
-
社会消费品零售总额(x3):代表社会整体消费情况,是可支配收入在经济生活中的实现。当社会消费品零售总额增长时,表明社会消费意愿强烈,部分程度上会导致财政收入中增值税的增长;同时当消费增长时,也会引起经济系统中其他方面发生变动,最终导致财政收入的增长。
-
城镇居民人均可支配收入(x4):居民收入越高消费能力越强,同时意味着其工作积极性越高,创造出的财富越多,从而能带来财政收入的更快和持续增长。
-
城镇居民人均消费性支出(x5):居民在消费商品的过程中会产生各种税费,税费又是调节生产规模的手段之一。在商品经济发达的如今,居民消费的越多,对财政收入的贡献就越大。
-
年末总人口(x6):在地方经济发展水平既定的条件下,人均地方财政收入与地方人口数呈反比例变化。
-
全社会固定资产投资额(x7):是建造和购置固定资产的经济活动,即固定资产再生产活动。主要通过投资来促进经济增长,扩大税源,进而拉动财政税收收入整体增长。
-
地区生产总值(x8):表示地方经济发展水平。一般来讲,政府财政收入来源于即期的地区生产总值。在国家经济政策不变、社会秩序稳定的情况下,地方经济发展水平与地方财政收入之间存在着密切的相关性,越是经济发达的地区,其财政收入的规模就越大。
-
第一产业产值(x9):取消农业税、实施三农政策,第一产业对财政收入的影响更小。
-
税收(x10):由于其具有征收的强制性、无偿性和固定性特点,可以为政府履行其职能提供充足的资金来源。因此,各国都将其作为政府财政收入的最重要的收入形式和来源。
-
居民消费价格指数(x11):反映居民家庭购买的消费品及服务价格水平的变动情况,影响城乡居民的生活支出和国家的财政收入。
-
第三产业与第二产业产值比(x12):表示产业结构。三次产业生产总值代表国民经济水平,是财政收入的主要影响因素,当产业结构逐步优化时,财政收入也会随之增加。
-
居民消费水平(x13):在很大程度上受整体经济状况GDP的影响,从而间接影响地方财政收入。
描述分析
对各个属性进行描述性统计分析
代码:
import numpy as np
import pandas as pd
inputfile = '../data/data.csv' # 输入的数据文件
data = pd.read_csv(inputfile) # 读取数据
# 描述性统计分析
description = [data.min(), data.max(), data.mean(), data.std()] # 依次计算最小值、最大值、均值、标准差
description = pd.DataFrame(description, index = ['Min', 'Max', 'Mean', 'STD']).T # 将结果存入数据框
print('描述性统计结果:\n',np.round(description, 2)) # 保留两位小数
表1 各个属性的描述性分析
分析:可见财政收入(y)的均值和标准差分别为618.08和609.25,这说明:第一,某市各年份财政收入存在较大差异。第二,2008年后,某市各年份财政收入大幅上升。
相关分析
采用Person相关系数法求解原始数据的 Person 相关系数矩阵
# 相关性分析
corr = data.corr(method = 'pearson') # 计算相关系数矩阵
print('相关系数矩阵为:\n',np.round(corr, 2)) # 保留两位小数
表2 变量 Person 相关系数矩阵
由相关矩阵可以看出居民消费价格指数(x11) 与财政收入的线性关系不显著,而且呈现负相关。其余变量均与财政收入呈现高度的正相关关系。
绘制相关性热力图进一步分析
import matplotlib.pyplot as plt
import seaborn as sns
plt.subplots(figsize=(10, 10)) # 设置画面大小
sns.heatmap(corr, annot=True, vmax=1, square=True, cmap="Blues")
plt.title('相关性热力图')
plt.show()
plt.close
由颜色深浅可以看出各属性除x11与y为负弱相关,其他属性与y强相关
数据预处理
运用Lasso回归方法进行关键属性选取
import numpy as np
import pandas as pd
from sklearn.linear_model import Lasso
inputfile = '../data/data.csv' # 输入的数据文件
data = pd.read_csv(inputfile) # 读取数据
lasso = Lasso(1000) # 调用Lasso()函数,设置λ的值为1000
lasso.fit(data.iloc[:,0:13],data['y'])
print('相关系数为:',np.round(lasso.coef_,5)) # 输出结果,保留五位小数
print('相关系数非零个数为:',np.sum(lasso.coef_ != 0)) # 计算相关系数非零的个数
mask = lasso.coef_ != 0 # 返回一个相关系数是否为零的布尔数组
print('相关系数是否为零:',mask)
outputfile ='../tmp/new_reg_data.csv' # 输出的数据文件
new_reg_data = data.iloc[:, mask] # 返回相关系数非零的数据
new_reg_data.to_csv(outputfile) # 存储数据
print('输出数据的维度为:',new_reg_data.shape) # 查看输出数据的维度
各个属性的系数,如下表
x1 | x2 | x3 | x4 | x5 | x6 | x7 |
---|---|---|---|---|---|---|
-0.0001 | 0.000 | 0.124 | -0.010 | 0.065 | 0.000 | 0.317 |
x8 | x9 | x10 | x11 | x12 | x13 | |
0.035 | -0.001 | 0.000 | 0.000 | 0.000 | -0.040 |
利用Lasso回归方法识别影响财政收入的关键影响因素是社会从业人数(x1)、社会消费品零售总额(x3)、城镇居民人均可支配收入(x4)、城镇居民人均消费性支出(x5)、全社会固定资产投资额(x7)、地区生产总值(x8)、第一产业产值(x9)和居民消费水平(x13)
在岗职工工资总额、年末总人口、税收、居民消费价格指数、第三产业与第二产业产值比等因素的系数为0,即在模型建立的过程中这几个变量被剔除了。由于某市存在流动人口与外来打工人口多的特性,年末总人口并不显著影响某市财政收入;居民消费价格指数与财政收入的相关性太小以致可以忽略;由于农牧业各税在各项税收总额中所占比重过小,而且该市于2005年取消了农业税,其他变量被剔除均有类似于上述的原因。
模型建立
对Lasso 变量选择方法识别的影响财政收入的因素建立灰色预测预测模型, Python及流行的扩展库并没有提供灰色预测功能,因此自行编写灰色预测函数
def GM11(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 #返回灰色预测函数、a、b、首项、方差比、小残差概率
构建灰色预测模型并预测
import sys
sys.path.append('../code') # 设置路径
import numpy as np
import pandas as pd
from GM11 import GM11 # 引入自编的灰色预测函数
inputfile1 = '../tmp/new_reg_data.csv' # 输入的数据文件
inputfile2 = '../data/data.csv' # 输入的数据文件
new_reg_data = pd.read_csv(inputfile1) # 读取经过特征选择后的数据
data = pd.read_csv(inputfile2) # 读取总的数据
new_reg_data.index = range(1994, 2014)
new_reg_data.loc[2014] = None
new_reg_data.loc[2015] = None
l = ['x1', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x13']
for i in l:
f = GM11(new_reg_data.loc[range(1994, 2014),i].as_matrix())[0]
new_reg_data.loc[2014,i] = f(len(new_reg_data)-1) # 2014年预测结果
new_reg_data.loc[2015,i] = f(len(new_reg_data)) # 2015年预测结果
new_reg_data[i] = new_reg_data[i].round(2) # 保留两位小数
outputfile = '../tmp/new_reg_data_GM11.xls' # 灰色预测后保存的路径
y = list(data['y'].values) # 提取财政收入列,合并至新数据框中
y.extend([np.nan,np.nan])
new_reg_data['y'] = y
new_reg_data.to_excel(outputfile) # 结果输出
print('预测结果为:\n',new_reg_data.loc[2014:2015,:]) # 预测结果展示
预测结果的精度等级见下表:
变量名 | 2014****预测值 | 2015****预测值 | 预测精度等级 |
---|---|---|---|
x1 | 8142148.2 | 8460489.3 | 好 |
x3 | 7042.31 | 8166.92 | 好 |
x4 | 43611.84 | 47792.22 | 好 |
x5 | 35046.63 | 38384.22 | 好 |
x6 | 8505523 | 8627139 | 好 |
x7 | 4600.4 | 5214.78 | 好 |
x8 | 18686.28 | 21474.47 | 好 |
x13 | 44506.47 | 49945.88 | 好 |
构建支持向量回归预测模型
import matplotlib.pyplot as plt
from sklearn.svm import LinearSVR
inputfile = '../tmp/new_reg_data_GM11.xls' # 灰色预测后保存的路径
data = pd.read_excel(inputfile) # 读取数据
feature = ['x1', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x13'] # 属性所在列
data_train = data.loc[range(1994,2014)].copy() # 取2014年前的数据建模
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() # 标签数据
linearsvr = LinearSVR() # 调用LinearSVR()函数
linearsvr.fit(x_train,y_train)
x = ((data[feature] - data_mean[feature])/data_std[feature]).as_matrix() # 预测,并还原结果。
data['y_pred'] = linearsvr.predict(x) * data_std['y'] + data_mean['y']
outputfile = '../tmp/new_reg_data_GM11_revenue.xls' # SVR预测后保存的结果
data.to_excel(outputfile)
print('真实值与预测值分别为:\n',data[['y','y_pred']])
fig = data[['y','y_pred']].plot(subplots = True, style=['b-o','r-*']) # 画出预测结果图
plt.show()
1994年至2015年财政收入的预测值,如表所示:
年份 | y | y_pred | 年份 | y | y_pred |
---|---|---|---|---|---|
1994 | 64.87 | 37.47637653 | 2005 | 408.86 | 463.4257871 |
1995 | 99.75 | 83.97783525 | 2006 | 476.72 | 555.1990364 |
1996 | 88.11 | 94.64956902 | 2007 | 838.99 | 691.7526587 |
1997 | 106.07 | 106.490953 | 2008 | 843.14 | 843.4121032 |
1998 | 137.32 | 151.1041878 | 2009 | 1107.67 | 1088.474868 |
1999 | 188.14 | 188.14 | 2010 | 1399.16 | 1380.1211 |
2000 | 219.91 | 219.5298325 | 2011 | 1535.14 | 1537.555406 |
2001 | 271.91 | 230.1994976 | 2012 | 1579.68 | 1739.783625 |
2002 | 269.1 | 219.7273221 | 2013 | 2088.14 | 2086.429911 |
2003 | 300.55 | 300.5917203 | 2014 | 2189.279622 | |
2004 | 338.45 | 383.5338702 | 2015 | 2540.638153 |
补充:
后验差检验模型精度:
P | c | 模型精度 |
---|---|---|
>0.95 | <0.35 | 好 |
>0.80 | <0.5 | 合格 |
>0.70 | <0.65 | 勉强合格 |
<0.70 | >0.65 | 不合格 |
灰色预测法的通用性强,一般的时间序列场合都适用,尤其适用那些规律性差且不清楚数据产生机理的情况。
优缺点:
- 优点:预测精准度高、模型可检验、参数估计方法简单、对小数据集有很好的预测效果
- 缺点:对原始数据序列的光滑度要求很高,在原始数据光滑性较差的情况下灰色预测模型的预测精度不高,甚至无法通过检验,
将上表预测结果代入地方财政收入建立的支持向量回归预测模型,得到1994年至2015年财政收入的预测值,如表所示。
支持向量机拥有完善的理论基础和良好的特性,设计分类、回归、聚类、时间序列分析、异常点检测等诸多方面。
优缺点:
- 不仅适用于线性模型、也可以很好的抓住数据和特征之间的非线性关系;不需要担心多重共线性问题,可以避免局部极小化问题,提高泛化性能,解决高维度问题;虽然不会在过程中直接排除异常点,但是会使得由异常点引起的偏差更小,
- 缺点:计算复杂度高,在面临数据量大的时候,计算耗时长
真实收入和预测值比较
模型评估
采用回归模型评价指标对地方财政收入的预测值进行评价,得到的结果如下表所示。
平均绝对误差 | 中值绝对误差 | 可解释方差值 | R****方值 |
---|---|---|---|
34.203681 | 17.415739 | 0.9908897 | 0.9908781 |
平均绝对误差与中值绝对误差较小,可解释方差值与R方值十分接近1,表明建立的支持向量回归模型拟合效果优良,可以用于预测财政收入。
归模型评价指标对地方财政收入的预测值进行评价,得到的结果如下表所示。
平均绝对误差 | 中值绝对误差 | 可解释方差值 | R****方值 |
---|---|---|---|
34.203681 | 17.415739 | 0.9908897 | 0.9908781 |
平均绝对误差与中值绝对误差较小,可解释方差值与R方值十分接近1,表明建立的支持向量回归模型拟合效果优良,可以用于预测财政收入。