泰迪智能科技(TipDM数据挖掘平台)最新推出的数据挖掘实战专栏
专栏将数据挖掘理论与项目案例实践相结合,可以让大家获得真实的数据挖掘学习与实践环境,更快、更好的学习数据挖掘知识与积累职业经验
专栏中每四篇文章为一个完整的数据挖掘案例。案例介绍顺序为:先由数据案例背景提出挖掘目标,再阐述分析方法与过程,最后完成模型构建,在介绍建模过程中同时穿插操作训练,把相关的知识点嵌入相应的操作过程中。
为方便读者轻松地获取一个真实的实验环境,本专栏使用大家熟知的Python语言对样本数据进行处理以进行挖掘建模。
————————————————
下面进入第二篇,数据探索分析~
众多学者已经对财政收入的影响因素进行了研究,但是他们大多先建立财政收入与各待定的影响因素之间的多元线性回归模型,运用最小二乘估计方法来估计回归模型的系数,通过系数来检验它们之间的关系,模型的结果对数据的依赖程度很大,并且普通最小二乘估计求得的解往往是局部最优解,后续步骤的检验可能就会失去应有的意义。
本案例在已有研究的基础上运用Lasso特征选择方法来研究影响地方财政收入的因素。在Lasso特征选择的基础上,鉴于灰色预测对少量数据预测的优良性能,对单个选定的影响因素建立灰色预测模型,得到它们在2014年及2015年的预测值。由于支持向量回归较强的适用性和容错能力,对历史数据建立训练模型,把灰色预测的数据结果代入训练完成的模型中,充分考虑历史数据信息,可以得到较为准确的预测结果,即2014年和2015年财政收入。
本案例的总体流程如图 1-1所示,主要包括以下步骤。
(1) 对原始数据进行探索性分析,了解原始属性之间的相关性。
(2) 利用Lasso特征选择模型进提取关键属性。
(3) 建立单个属性的灰色预测模型以及支持向量回归预测模型。
(4) 使用支持向量回归预测模型得出2014-2015年财政收入的预测值。
(5) 对上述建立的财政收入预测模型进行评价。
图 1-1财政收入分析预测模型流程
影响财政收入(y)的因素有很多,在查阅大量文献的基础上,通过经济理论对财政收入的解释以及对实践的观察,考虑一些与能源消耗关系密切并且直观上有线性关系的因素,初步选取以下属性为自变量,分析它们之间的关系。各项属性名称及属性说明如表 1-1所示。
表 1-1 属性名称和说明
属性名称 |
属性说明 |
社会从业人数(x1) |
就业人数的上升伴随着居民消费水平的提高,从而间接影响财政收入的增加 |
在岗职工工资总额(x2) |
反映的是社会分配情况,主要影响财政收入中的个人所得税,房产税以及潜在消费能力 |
社会消费品零售总额(x3) |
代表社会整体消费情况,是可支配收入在经济生活中的实现。当社会消费品零售总额增长时,表明社会消费意愿强烈,部分程度上会导致财政收入中增值税的增长;同时当消费增长时,也会引起经济系统中其他方面发生变动,最终导致财政收入的增长 |
城镇居民人均可支配收入(x4) |
居民收入越高消费能力越强,同时意味着其工作积极性越高,创造出的财富越多,从而能带来财政收入的更快和持续增长 |
城镇居民人均消费性支出(x5) |
居民在消费商品的过程中会产生各种税费,税费又是调节生产规模的手段之一。在商品经济发达的如今,居民消费的越多,对财政收入的贡献就越大 |
年末总人口(x6) |
在地方经济发展水平既定的条件下,人均地方财政收入与地方人口数呈反比例变化 |
全社会固定资产投资额(x7) |
是建造和购置固定资产的经济活动,即固定资产再生产活动。主要通过投资来促进经济增长,扩大税源,进而拉动财政税收收入整体增长 |
地区生产总值(x8) |
表示地方经济发展水平。一般来讲,政府财政收入来源于当期的地区生产总值。在国家经济政策不变、社会秩序稳定的情况下,地方经济发展水平与地方财政收入之间存在着密切的相关性,越是经济发达的地区,其财政收入的规模就越大 |
第一产业产值(x9) |
取消农业税,实施三农政策,第一产业对财政收入的影响更小 |
税收(x10) |
由于其具有征收的强制性、无偿性和固定性特点,可以为政府履行其职能提供充足的资金来源。因此,各国都将其作为政府财政收入的最重要的收入形式和来源 |
居民消费价格指数(x11) |
反映居民家庭购买的消费品及服务价格水平的变动情况,影响城乡居民的生活支出和国家的财政收入 |
第三产业与第二产业产值比(x12) |
表示产业结构。三次产业生产总值代表国民经济水平,是财政收入的主要影响因素,当产业结构逐步优化时,财政收入也会随之增加 |
居民消费水平(x13) |
在很大程度上受整体经济状况GDP的影响,从而间接影响地方财政收入 |
*数据详见:demo/data/data.csv。
对各个属性进行描述性统计分析,如代码清单1-1所示。
代码清单 1-1描述性统计分析
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.DataFramedescription, index = ['Min', 'Max', 'Mean', 'STD']).T # 将结果存入数据框 print('描述性统计结果:\n',np.round(description, 2)) # 保留两位小数 |
*代码详见:demo/code/summary.py。
通过代码清单1-1得到的结果如表1-2所示。其中,财政收入(y)的均值和标准差分别为618.08和609.25,这说明:某市各年份财政收入存在较大差异;2008年后,某市各年份财政收入大幅上升。
表 1-2各个属性的描述性统计
属性 |
inM |
Max |
Mean |
STD |
x1 |
3831732.00 |
7599295.00 |
5579519.95 |
126219.50 |
x2 |
181.54 |
2110.78 |
765.04 |
595.70 |
x3 |
448.19 |
6882.85 |
2370.83 |
1919.17 |
x4 |
7571.00 |
42049.14 |
19644.69 |
10203.02 |
x5 |
6212.70 |
33156.83 |
15870.95 |
8199.77 |
x6 |
6370241.00 |
8323096.00 |
7350513.60 |
621341.90 |
x7 |
525.71 |
4454.55 |
1712.24 |
1184.71 |
x8 |
985.31 |
15420.14 |
5705.80 |
4478.40 |
x9 |
60.62 |
228.46 |
129.50 |
5.05 |
x10 |
65.66 |
852.56 |
340.22 |
251.58 |
x11 |
97.50 |
120.00 |
103.31 |
5.51 |
x12 |
1.03 |
1.91 |
1.42 |
2.53 |
x13 |
5321.00 |
41972.00 |
17273.80 |
11109.19 |
y |
64.87 |
2088.14 |
618.08 |
609.25 |
采用Pearson相关系数法求解原始数据的Pearson相关系数矩阵,如代码清单 1-2所示。
代码清单1-2求解原始数据的Pearson相关系数矩阵
corr = data.corr(method='pearson') # 计算相关系数矩阵 print('相关系数矩阵为:\n',np.round(corr, 2)) # 保留两位小数 |
*代码详见:demo/code/summary.py。
对原始数据进行相关分析,得到相关系数矩阵,如表 1-3所示。
表 1-3 变量Pearson相关系数矩阵
由表 1-3可以看出,居民消费价格指数(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的相关性很强,可以用作财政收入预测分析的关键属性,但这些属性之间存在着信息的重复,需要对属性进行进一步筛选。
绘制相关性热力图,如代码清单1-3所示。
代码清单 1-3 绘制相关性热力图
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 |
*代码详见:demo/code/summary.py。
通代码清单 1-3得到相关性热力图如图 1-2所示,由颜色的深浅可看出,除各属性除了x11与y为负弱相关外,其他属性与y强相关。
图 1-2 相关性热力图
Lasso回归方法属于正则化方法的一种,是压缩估计。它通过构造一个惩罚函数得到一个较为精炼的模型,使得它压缩一些系数,同时设定一些系数为零,保留了子集收缩的优点,是一种处理具有复共线性数据的有偏估计。
Lasso以缩小特征集(降阶)为思想,是一种收缩估计方法。Lasso方法可以将特征的系数进行压缩并使某些回归系数变为0,进而达到特征选择的目的,可以广泛地应用于模型改进与选择。通过选择惩罚函数,借用Lasso思想和方法实现特征选择的目的。模型选择本质上是寻求模型稀疏表达的过程,而这种过程可以通过优化一个“损失”+“惩罚”的函数问题来完成。
Lasso参数估计定义如式(6-1)所示。
(6-1)
其中,λ 为非负正则参数,控制着模型的复杂程度,λ越大对特征较多的线性模型的惩罚力度就越大,从而最终获得一个特征较少的模型,
称为惩罚项。调整参数λ 的确定可以采用交叉验证法,选取交叉验证误差最小的值。最后,按照得到的λ 值,用全部数据重新拟合模型即可。
当原始特征中存在多重共线性时,Lasso回归不失为一种很好的处理共线性的方法,它可以有效地对存在多重共线性的特征进行筛选。在机器学习中,面对海量的数据,首先想到的就是降维,争取用尽可能少的数据解决问题,从这层意义上说,用Lasso模型进行特征选择也是一种有效的降维方法。Lasso从理论上说,对数据类型没有太多限制,可以接受任何类型的数据,而且一般不需要对特征进行标准化处理。
Lasso回归方法的优点是可以弥补最小二乘法和逐步回归局部最优估计的不足,可以很好地进行特征的选择,可以有效地解决各特征之间存在多重共线性的问题。缺点是如果存在一组高度相关的特征时,Lasso回归方法倾向于选择其中的一个特征,而忽视其他所有的特征,这种情况会导致结果的不稳定性。虽然Lasso回归方法存在弊端,但是在合适的场景中还是可以发挥不错的效果。在财政收入预测中,各原始属性存在着严重的多重共线性,多重共线性问题已成为主要问题,这里采用Lasso回归方法进行特征选取是恰当的。
使用Lasso回归方法进行关键属性选取,如代码清单 1-4所示。
代码清单 1-4 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) # 查看输出数据的维度 |
*代码详见:demo/code/lasso.py。
通过代码清单 64得到各个属性的系数,如表 1-4所示。
表 1- 4系数表
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 |
由表 1-4可看出,利用Lasso回归方法识别影响财政收入的关键影响因素是社会从业人数(x1)、社会消费品零售总额(x3)、城镇居民人均可支配收入(x4)、城镇居民人均消费性支出(x5)、全社会固定资产投资额(x7)、地区生产总值(x8)、第一产业产值(x9)和居民消费水平(x13)。
下一篇预告~
财政收入影响因素分析及预测模型(三)-模型构建
关注我可了解更多数据挖掘实战知识哦~