以财政收入为例:详解如何利用数据分析提供企业决策及发展依据

it2025-08-22  10

随着信息化的发展和科学技术的进步,数据分析与挖掘技术开始得到广泛应用。人们无时无刻不面对着海量的数据,这些海量数据中隐藏着人们所需要的具有决策意义的信息。数据分析与挖掘技术的产生和发展就是帮助人们来利用这些数据并从中发现有用的,隐藏的信息。

在此背景下,本文主要运用数据分析与挖掘技术对市财政收入进行分析,挖掘其中隐藏的运行模式,并对未来两年的财政收入进行预测,希望能够帮助政府合理的控制财政收支,优化财源建设,为制定相关决策提供依据。

1.背景与挖掘目标

财政收入,是指政府为履行其职能、实施公共政策和提供公共物品与服务需要而筹集的一切资金的总和。财政收入表现为政府部门在一定时期内(一般为一个财政年度)所取得的货币收入。财政收入是衡量一国政府财力的重要特征,政府在社会经济活动中提供公共物品和服务的范围和数量,在很大程度上取决于财政收入的充裕状况。

在我国现行的分税制财政管理体制下,地方财政收入不但是国家财政收入的重要组成部分,而且具有其相对独立的构成内容。如何制定地方财政支出计划,合理分配地方财政收入,促进地方的发展,提高市民的收入和生活质量是每个地方政府需要考虑的首要问题。因此,地方财政收入预测是非常必要的。 考虑到数据的可得性,本案例所用的财政收入分为地方一般预算收入和政府性基金收入。地方一般预算收入包括以下2个部分。

(1)税收收入。主要包括企业所得税与地方所得税中中央和地方共享的40%,地方享有的25%的增值税,营业税和印花税等。

(2)非税收收入。包括专项收入、行政事业性收费、罚没收入、国有资本经营收入和其他收入等。

政府性基金收入是国家通过向社会征收以及出让土地、发行彩票等方式取得收入,并专项用于支持特定基础设施建设和社会事业发展的收入。

由于1994年我国对财政体制进行了重大改革,开始实行分税制财政体制,影响了财政收入相关数据的连续性,在1994年前后不具有可比性。由于没有合适的方法来调整这种数据的跃变,因此本案例仅对1994年至2013年的数据进行分析(本案例所用数据均来自《统计年鉴》)。

结合财政收入预测的需求分析,本次数据分析建模目标主要有以下2个。

(1)分析、识别影响地方财政收入的关键属性。

(2)预测2014年和2015年的财政收入。

2.分析方法与过程

众多学者已经对财政收入的影响因素进行了研究,但是他们大多先建立财政收入与各待定的影响因素之间的多元线性回归模型,运用最小二乘估计方法来估计回归模型的系数,通过系数来检验它们之间的关系,模型的结果对数据的依赖程度很大,并且普通最小二乘估计求得的解往往是局部最优解,后续步骤的检验可能就会失去应有的意义。

本案例在已有研究的基础上运用Lasso特征选择方法来研究影响地方财政收入的因素。在Lasso特征选择的基础上,鉴于灰色预测对少量数据预测的优良性能,对单个选定的影响因素建立灰色预测模型,得到它们在2014年及2015年的预测值。由于支持向量回归较强的适用性和容错能力,对历史数据建立训练模型,把灰色预测的数据结果代入训练完成的模型中,充分考虑历史数据信息,可以得到较为准确的预测结果,即2014年和2015年财政收入。

2.1分析步骤与流程

本案例的总体流程如图1所示,主要包括以下步骤。

(1)对原始数据进行探索性分析,了解原始属性之间的相关性。 (2)利用Lasso特征选择模型进提取关键属性。 (3)建立单个属性的灰色预测模型以及支持向量回归预测模型。 (4)使用支持向量回归预测模型得出2014-2015年财政收入的预测值。 (5)对上述建立的财政收入预测模型进行评价。

图1 财政收入分析预测模型流程

2.2数据探索分析

影响财政收入(y)的因素有很多,在查阅大量文献的基础上,通过经济理论对财政收入的解释以及对实践的观察,考虑一些与能源消耗关系密切并且直观上有线性关系的因素,初步选取以下属性为自变量,分析它们之间的关系。各项属性名称及属性说明如表1所示。

表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)) # 保留两位小数

微信关注泰迪学院,回复财政领取数据和代码

通过代码清单1得到的结果如表2所示。其中,财政收入(y)的均值和标准差分别为618.08和609.25,这说明:某市各年份财政收入存在较大差异;2008年后,某市各年份财政收入大幅上升。

表2 各个属性的描述性统计

2.相关性分析

采用Pearson相关系数法求解原始数据的Pearson相关系数矩阵,如代码清单2所示。

代码清单2 求解原始数据的Pearson相关系数矩阵

corr = data.corr(method='pearson') # 计算相关系数矩阵 print('相关系数矩阵为:\n',np.round(corr, 2)) # 保留两位小数

微信关注泰迪学院,回复财政领取数据和代码

对原始数据进行相关分析,得到相关系数矩阵,如表3所示。

表3 变量Pearson相关系数矩阵

由表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的相关性很强,可以用作财政收入预测分析的关键属性,但这些属性之间存在着信息的重复,需要对属性进行进一步筛选。

绘制相关性热力图,如代码清单3所示。

代码清单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

微信关注泰迪学院,回复财政领取数据和代码

通代码清单3得到相关性热力图如图2所示,由颜色的深浅可看出,除各属性除了x11与y为负弱相关外,其他属性与y强相关。 图2 相关性热力图

2.3数据预处理

Lasso回归方法属于正则化方法的一种,是压缩估计。它通过构造一个惩罚函数得到一个较为精炼的模型,使得它压缩一些系数,同时设定一些系数为零,保留了子集收缩的优点,是一种处理具有复共线性数据的有偏估计。

Lasso以缩小特征集(降阶)为思想,是一种收缩估计方法。Lasso方法可以将特征的系数进行压缩并使某些回归系数变为0,进而达到特征选择的目的,可以广泛地应用于模型改进与选择。通过选择惩罚函数,借用Lasso思想和方法实现特征选择的目的。模型选择本质上是寻求模型稀疏表达的过程,而这种过程可以通过优化一个“损失”+“惩罚”的函数问题来完成。 Lasso参数估计定义如式(1)所示。 β ^ ( l a s s o ) = a r g β m i n 2 ∣ ∣ y − ∑ j = 1 p x i β i ∣ ∣ 2 + λ ∑ j = 1 p ∣ β i ∣ ( 1 ) \hat{\beta}(lasso)=arg_{\beta}min^2{\mid\mid y-\sum_{j=1}^{p}x_{i} \beta_{i}\mid\mid}^2+\lambda\sum_{j=1}^{p}\mid{\beta_{i}}\mid(1) β^(lasso)=argβmin2yj=1pxiβi2+λj=1pβi1

其中,为非负正则参数,控制着模型的复杂程度,越大对特征较多的线性模型的惩罚力度就越大,从而最终获得一个特征较少的模型,称为惩罚项。调整参数的确定可以采用交叉验证法,选取交叉验证误差最小的值。最后,按照得到的值,用全部数据重新拟合模型即可。

当原始特征中存在多重共线性时,Lasso回归不失为一种很好的处理共线性的方法,它可以有效地对存在多重共线性的特征进行筛选。在机器学习中,面对海量的数据,首先想到的就是降维,争取用尽可能少的数据解决问题,从这层意义上说,用Lasso模型进行特征选择也是一种有效的降维方法。Lasso从理论上说,对数据类型没有太多限制,可以接受任何类型的数据,而且一般不需要对特征进行标准化处理。

Lasso回归方法的优点是可以弥补最小二乘法和逐步回归局部最优估计的不足,可以很好地进行特征的选择,可以有效地解决各特征之间存在多重共线性的问题。缺点是如果存在一组高度相关的特征时,Lasso回归方法倾向于选择其中的一个特征,而忽视其他所有的特征,这种情况会导致结果的不稳定性。虽然Lasso回归方法存在弊端,但是在合适的场景中还是可以发挥不错的效果。在财政收入预测中,各原始属性存在着严重的多重共线性,多重共线性问题已成为主要问题,这里采用Lasso回归方法进行特征选取是恰当的。

使用Lasso回归方法进行关键属性选取,如代码清单4所示。

代码清单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) # 查看输出数据的维度

微信关注泰迪学院,回复财政领取数据和代码

通过代码清单4得到各个属性的系数,如表4所示。 表4 系数表 由表4可看出,利用Lasso回归方法识别影响财政收入的关键影响因素是社会从业人数(x1)、社会消费品零售总额(x3)、城镇居民人均可支配收入(x4)、城镇居民人均消费性支出(x5)、全社会固定资产投资额(x7)、地区生产总值(x8)、第一产业产值(x9)和居民消费水平(x13)。

2.4模型构建

1.灰色预测算法

灰色预测法是一种对含有不确定因素的系统进行预测的方法。在建立灰色预测模型之前,需先对原始时间序列进行数据处理,经过数据处理后的时间序列即称为生成列。灰色系统常用的数据处理方式有累加和累减两种。

灰色预测是以灰色模型为基础的,在众多的灰色模型中,GM(1,1)模型最为常用。

设特征 X ( 0 ) = [ X ( 0 ) ( i ) , i = 1 , 2 , 3 , . . , n ] X ( 0 ) = [ X ( 0 ) ( i ) , i = 1 , 2 , 3 , . . , n ] X^{(0)}=[X^{(0)}(i),i=1,2,3,.., n]X^{(0)}=[X^{(0)}(i),i=1,2,3,.., n] X(0)=[X(0)(i),i=1,2,3,..,n]X(0)=[X(0)(i),i=1,2,3,..,n]为一非负单调原始数据序列,建立灰色预测模型如下。

(1)首先对 X ( 0 ) X^{(0)} X(0)进行一次累加,得到一次累加序列 X ( 1 ) = [ X ( 1 ) ( k ) , k = 1 , 2 , 3 , . . , n ] X ( 1 ) = [ X ( 1 ) ( k ) , k = 1 , 2 , 3 , . . , n ] X^{(1)}=[X^{(1)}(k),k=1,2,3,.., n]X^{(1)}=[X^{(1)}(k),k=1,2,3,.., n] X(1)=[X(1)(k),k=1,2,3,..,n]X(1)=[X(1)(k),k=1,2,3,..,n]

(2)对 X ( 1 ) X^{(1)} X(1)可建立下述一阶线性微分方程,如式(2)所示,即GM(1,1)模型。 d X ( 1 ) d t + a X ( 1 ) = μ ( 2 ) \frac{dX^{(1)}}{d_{t}}+aX^{(1)}=\mu(2) dtdX(1)+aX(1)=μ2(2) (3)求解微分方程,即可得到预测模型,如式(3)所示。 X ( 1 ) ^ ( k + 1 ) = [ X ( 0 ) ( 1 ) ] − μ a ] e − a k + μ a ( 3 ) \hat{X^{(1)}}(k+1)=[X^{(0)}(1)]-\frac{\mu}a]e^{-ak}+\frac{\mu}a(3) X(1)^(k+1)=[X(0)(1)]aμ]eak+aμ3 (4)由于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)的灰色预测模型如式(4)所示。 X ( 0 ) ^ ( k + 1 ) = ( e − a ^ − 1 ) [ X ( 0 ) ( n ) ] − μ ^ a ^ ] e − a ^ k ( 4 ) \hat{X^{(0)}}(k+1)=(e^{-\hat{a}}-1)[X^{(0)}(n)]-\frac{\hat\mu}{\hat{a}}]e^{-\hat{a}k}(4) X(0)^(k+1)=(ea^1)[X(0)(n)]a^μ^]ea^k4

后验差检验模型精度如表5所示。

表5 后验差检验判别参照表

灰色预测法的通用性较强,一般的时间序列场合都适用,尤其适合那些规律性差且不清楚数据产生机理的情况。灰色预测模型的优点是具有预测精度高、模型可检验、参数估计方法简单、对小数据集有很好的预测效果。缺点是对原始数据序列的光滑度要求很高,在原始数据列光滑性较差的情况下灰色预测模型的预测精度不高甚至通不过检验,结果只能放弃使用灰色模型进行预测。

2.SVR算法

SVR(Support Vector Regression,支持向量回归)是在做拟合时,采用了支持向量的思想,来对数据进行回归分析。给定训练数据集 T = { ( x 1 ⃗ , y 1 ) , ( x 2 ⃗ , y 2 ) , . . . , ( x n ⃗ , y n ) } T=\{ (\vec{x_{1}},y_{1}),(\vec{x_{2}},y_{2}),...,(\vec{x_{n}},y_{n}) \} T={(x1 ,y1),(x2 ,y2)...(xn ,yn)},其中 x 1 ⃗ = ( x i ( 1 ) , x i ( 2 ) , . . . , x i ( n ) ) T ∈ R n \vec{x_{1}}=(x_{i}^{(1)},x_{i}^{(2)},...,x_{i}^{(n)})^{T}\in R^{n} x1 =(xi(1),xi(2),...,xi(n))TRn y i ∈ R y_{i}\in R yiR ,i=1,2,…,n。对于样本 ( x 1 ⃗ , y 1 ) (\vec{x_{1}},y_{1}) x1 ,y1通常根据模型输出 f ( x i ⃗ ) f(\vec{x_{i}}) f(xi )与真实值 y i y_{i} yi之间的差别来计算损失,当且仅当 f ( x i ⃗ ) = y i f(\vec{x_{i}})=y_{i} f(xi )=yi时损失才为零。

SVR的基本思路是:允许 f ( x i ⃗ ) f(\vec{x_{i}}) f(xi ) y i y_{i} yi之间最多有 ε \varepsilon ε的偏差。仅当 ∣ f ( x i ⃗ ) = y i ∣ > ε |f(\vec{x_{i}})=y_{i}|>\varepsilon f(xi )=yi>ε时,才计算损失。当 ∣ f ( x i ⃗ ) = y i ∣ ≤ ε |f(\vec{x_{i}})=y_{i}|\leq\varepsilon f(xi )=yiε时,认为预测准确。用数学语言描述SVR问题如式(5)所示。 m i n w ⃗ , b 1 2 ∣ ∣ w ⃗ ∣ ∣ 2 2 + C ∑ i = 1 n L ε ( f ( x i ⃗ ) − y i ) ( 5 ) \underset{\vec{w},b}{min}\frac{1}{2}||\vec{w}||_2^2+C\sum_{i=1}^nL_{\varepsilon}(f(\vec{x_{i}})-y_{i})(5) w ,bmin21w 22+Ci=1nLε(f(xi )yi)5) 其中为罚项系数,L为损失函数。 更进一步,引入松弛变量i、,则新的最优化问题如式(6)和式(7)所示。 m i n w ⃗ , b , ξ , ξ ^ 1 2 ∣ ∣ w ⃗ ∣ ∣ 2 2 + C ∑ i = 1 n ( ξ i + ξ ^ i ) ( 6 ) \underset{\vec{w},b,\xi,\hat\xi}{min}\frac{1}{2}||\vec{w}||_2^2+C\sum_{i=1}^n(\xi_{i}+\hat\xi_{i})(6) w ,b,ξ,ξ^min21w 22+Ci=1n(ξi+ξ^i)6) { s . t . f ( x ⃗ i ) − y i ≤ ε + ξ i y i − f ( x ⃗ i ) ≤ ε + ξ ^ i ξ i ≥ 0 , ξ ^ i ≥ 0 , i = 1 , 2 , . . . , n ( 7 ) \begin{cases}s.t.f(\vec x_{i})-y_{i}\leq\varepsilon+\xi_{i} \\ y_{i}-f(\vec x_{i})\leq\varepsilon+\hat\xi_{i} \\ \xi_{i} \geq0,\hat\xi_{i} \geq0,i=1,2,...,n\\ \end{cases}(7) s.t.f(x i)yiε+ξiyif(x i)ε+ξ^iξi0,ξ^i0,i=1,2,...,n7

这就是SVR原始问题。类似的,引入拉格朗日乘子, μ i ≥ 0 \mu_{i}\geq0 μi0 μ ^ i ≥ 0 \hat\mu_{i}\geq0 μ^i0, α i ≥ 0 \alpha_{i}\geq0 αi0 α ^ i ≥ 0 \hat\alpha_{i}\geq0 α^i0,定义拉格朗日函数如式(8)所示。 L ( w ⃗ , b , α ⃗ , α ⃗ ^ , ξ ⃗ , ξ ⃗ ^ , μ ⃗ , μ ⃗ ^ ) = 1 2 ∣ ∣ w ⃗ ∣ ∣ 2 2 + C ∑ i = 1 n ( ξ i + ξ ^ i ) − ∑ i = 1 n μ i ξ i − ∑ i = 1 n μ ^ i ξ ^ i + ∑ i = 1 n α i ( f ( x ⃗ i ) − y i − ε − ξ i ) + ∑ i = 1 n α ^ i ( y i − f ( x ⃗ i ) − ε − ξ ^ i ) ( 8 ) L(\vec w,b,\vec\alpha,\hat{\vec\alpha},\vec\xi,\hat{\vec\xi},\vec\mu,\hat{\vec\mu})=\frac{1}{2}||\vec{w}||_2^2+C\sum_{i=1}^n(\xi_{i}+\hat\xi_{i})-\sum_{i=1}^n\mu_{i}\xi_{i}-\sum_{i=1}^n\hat\mu_{i}\hat\xi_{i}+\sum_{i=1}^n\alpha_{i}(f(\vec x_{i})-y_{i}-\varepsilon-\xi_{i})+\sum_{i=1}^n\hat\alpha_{i}(y_{i}-f(\vec x_{i})-\varepsilon-\hat\xi_{i})(8) L(w ,b,α ,α ^,ξ ,ξ ^,μ ,μ ^)=21w 22+Ci=1n(ξi+ξ^i)i=1nμiξii=1nμ^iξ^i+i=1nαi(f(x i)yiεξi)+i=1nα^i(yif(x i)εξ^i)8 根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题,如式(9)所示。 m a x α ⃗ , α ⃗ ^ m i n w ⃗ , b , ξ ⃗ , ξ ⃗ ^ L ( w ⃗ , b , α ⃗ , α ⃗ ^ , ξ ⃗ , ξ ⃗ ^ , μ ⃗ , μ ⃗ ^ ) ( 9 ) \underset{\vec{\alpha},\hat{ \vec{\alpha}}}{max}\underset{\vec{w},b,\vec\xi,\hat{\vec\xi}}{min}L(\vec{w},b,\vec{\alpha},\hat{ \vec{\alpha}},\vec\xi,\hat{\vec\xi},\vec\mu,\hat{\vec\mu})(9) α ,α ^maxw ,b,ξ ,ξ ^minL(w ,b,α ,α ^,ξ ,ξ ^,μ ,μ ^)9 先求极小问题 L ( w ⃗ , b , α ⃗ , α ⃗ ^ , ξ ⃗ , ξ ⃗ ^ , μ ⃗ , μ ⃗ ^ ) L(\vec{w},b,\vec{\alpha},\hat{ \vec{\alpha}},\vec\xi,\hat{\vec\xi},\vec\mu,\hat{\vec\mu}) L(w ,b,α ,α ^,ξ ,ξ ^,μ ,μ ^):根据对 w ⃗ \vec{w} w 、b、 ξ ⃗ \vec\xi ξ ξ ⃗ ^ \hat{\vec\xi} ξ ^偏导数可得式(10)。 { w ⃗ = ∑ i = 1 n ( α i ^ − α i ) x i ⃗ 0 = ∑ i = 1 n ( α i ^ − α i ) C = ∑ i = 1 n ( α i ^ − α i ) C = α i ^ + μ i ^ ( 10 ) \begin{cases}\vec{w}=\sum_{i=1}^{n}(\hat{\alpha_{i}}-\alpha_{i})\vec{x_{i}} \\ 0=\sum_{i=1}^{n}(\hat{\alpha_{i}}-\alpha_{i}) \\C=\sum_{i=1}^{n}(\hat{\alpha_{i}}-\alpha_{i})\\C=\hat{\alpha_{i}}+\hat{\mu_{i}} \end{cases}(10) w =i=1n(αi^αi)xi 0=i=1n(αi^αi)C=i=1n(αi^αi)C=αi^+μi^10 再求极大问题(取负号变极小问题)如式(11)和式(12)所示。

m i n α ⃗ , α ⃗ ^ ∑ i = 1 n [ y i ( α i ^ − α i ) − ε ( α i ^ + α i ) ] − 1 2 ∑ i = 1 n ∑ j = 1 n ( α i ^ − α i ) ( α j ^ − α j ) x i ⃗ T x j ⃗ ( 11 ) \underset{\vec{\alpha},\hat{\vec{\alpha}}}{min}\sum_{i=1}^{n}[y_{i}(\hat{\alpha_{i}}-\alpha_{i})-\varepsilon(\hat{\alpha_{i}}+\alpha_{i})]-\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}(\hat{\alpha_{i}}-\alpha_{i})(\hat{\alpha_{j}}-\alpha_{j})\vec{x_{i}}^{T}\vec{x_{j}}(11) α ,α ^mini=1n[yi(αi^αi)ε(αi^+αi)]21i=1nj=1n(αi^αi)(αj^αj)xi Txj 11 { s . t . ∑ i n ( α i ^ − α i ) = 0 0 ≤ α i , α i ^ ≤ C ( 12 ) \begin{cases}s.t.\sum_{i}^{n} (\hat{\alpha_{i}}-\alpha_{i})=0\\0\leq\alpha_{i},\hat{\alpha_{i}}\leq{C}\end{cases}(12) {s.t.in(αi^αi)=00αi,αi^C12

KKT条件如式(13)所示。 { α i ( f ( x ⃗ i ) − y i − ε − ξ i ) = 0 α i ( y i − f ( x ⃗ i ) − ε − ξ i ) = 0 α i ^ α i = 0 ξ i ^ ξ i = 0 ( C − α i ) ξ i = 0 ( C − α ^ i ) ξ ^ i = 0 ( 13 ) \begin{cases}\alpha_{i}(f(\vec x_{i})-y_{i}-\varepsilon -\xi_{i})=0\\\alpha_{i}(y_{i}-f(\vec x_{i})-\varepsilon -\xi_{i})=0\\\hat{\alpha_{i}}\alpha_{i}=0\\\hat{\xi_{i}}\xi_{i}=0\\(C-\alpha_{i})\xi_{i}=0\\(C-\hat\alpha_{i})\hat\xi_{i}=0\end{cases}(13) αi(f(x i)yiεξi)=0αi(yif(x i)εξi)=0αi^αi=0ξi^ξi=0(Cαi)ξi=0(Cα^i)ξ^i=013 假设最终解为 α ⃗ ∗ = ( α 1 ∗ + α 2 ∗ + , . . . + α n ∗ ) T \vec\alpha^{*}=(\alpha_{1}^{*}+\alpha_{2}^{*}+,...+\alpha_{n}^{*})^{T} α =(α1+α2+,...+αn)T,在 α ⃗ ^ = ( α ^ 1 ∗ + α ^ 2 ∗ + , . . . + α ^ n ∗ ) T \hat{\vec\alpha}=(\hat\alpha_{1}^{*}+\hat\alpha_{2}^{*}+,...+\hat\alpha_{n}^{*})^{T} α ^=(α^1+α^2+,...+α^n)T中,找出 α ⃗ ∗ \vec\alpha^{*} α 的某个分量 C > α j ∗ > 0 C>\alpha_{j}^{*}>0 C>αj>0,则有式(14)和式(15)。 b ∗ = y i + ε − ∑ i = 1 n ( α i ∗ ^ + α j ∗ ) x i ⃗ T x j ⃗ ( 14 ) b^{*}=y_{i}+\varepsilon-\sum_{i=1}^{n}(\hat{\alpha_{i}^{*}}+\alpha_{j}^{*})\vec{x_{i}}^{T}\vec{x_{j}}(14) b=yi+εi=1nαi^+αjxi Txj 14 f ( x ⃗ ) = ∑ i = 1 n ( α i ∗ ^ + α i ∗ ) x i ⃗ T x ⃗ + b ∗ ( 15 ) f(\vec{x})=\sum_{i=1}^{n}(\hat{\alpha_{i}^{*}}+\alpha_{i}^{*})\vec{x_{i}}^{T}\vec{x}+b^{*}(15) f(x )=i=1n(αi^+αi)xi Tx +b15 更进一步,如果考虑使用核技巧,给定核函数 K ( x i ⃗ , x ⃗ ) K(\vec{x_{i}},\vec{x}) K(xi ,x ),则SVR可以表示为如式(16)所示。 f ( x ⃗ ) = ∑ i = 1 n ( α ^ l − α i ) K ( x i ⃗ , x ⃗ ) + b ( 16 ) f(\vec{x})=\sum_{i=1}^{n}(\hat\alpha_{l}-\alpha_{i})K(\vec{x_{i}},\vec{x})+b(16) f(x )=i=1n(α^lαi)K(xi ,x )+b16 由于支持向量机拥有完善的理论基础和良好的特性,人们对其进行了广泛的研究和应用,涉及分类、回归、聚类、时间序列分析、异常点检测等诸多方面。具体的研究内容包括统计学习理论基础、各种模型的建立、相应优化算法的改进以及实际应用。支持向量回归也在这些研究中得到了发展和逐步完善,已有许多富有成果的研究工作。

相比较于其他方法,支持向量回归优点是:支持向量回归不仅适用于线性模型,对于数据和特征之间的非线性关系也能很好抓住;支持向量回归不需要担心多重共线性问题,可以避免局部极小化问题,提高泛化性能,解决高维问题;支持向量回归虽然不会在过程中直接排除异常点,但会使得由异常点引起的偏差更小。缺点是计算复杂度高,在面临数据量大的时候,计算耗时长。

3.构建财政收入预测模型

依据Lasso回归选取的关键变量构建灰色预测模型,并预测2014年和2015年的财政收入,如代码清单5所示。

代码清单5 构建灰色预测模型并预测

import sys sys.path.append('E/chapter6/demo/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 cols = ['x1', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x13'] for i in cols: 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年的财政收入,如代码清单6所示。

代码清单6 构建支持向量回归预测模型

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[u'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()

微信关注泰迪学院,回复财政领取数据和代码

4.结果分析

对Lasso回归选取的社会从业人数(x1)、社会消费品零售总额(x3)、城镇居民人均可支配收入(x4)、城镇居民人均消费性支出(x5)、全社会固定资产投资额(x6)、地区生产总值(x7)、第一产业产值(x8)和居民消费水平(x13)属性的2014年及2015年通过建立的灰色预测模型得出的预测值,如表6所示。

表6 通过灰色预测模型得出的预测值

将表6的预测结果代入地方财政收入建立的支持向量回归预测模型,得到1994年至2015年财政收入的预测值,如表7所示,其中y_pred表示预测值。

表7 2014年与2015年财政收入的预测值

地方财政收入真实值与预测值对比图如图3所示。

图 3 地方财政收入真实值与预测值对比图

采用回归模型评价指标对地方财政收入的预测值进行评价,得到的结果如表8所示。

表8 模型评价指标

由表8可以看出,平均绝对误差与中值绝对误差较小,可解释方差值与R方值十分接近1,表明建立的支持向量回归模型拟合效果优良,可以用于预测财政收入。

小结

本章结合某市地方财政收入预测的案例,介绍了原始数据的相关性分析、特征的选取、构建灰色预测和支持向量回归预测模型、模型的评价四部分内容。重点研究影响某市地方财政收入的关键因素,运用了广泛使用的Lasso回归模型。在模型的构建阶段,针对历史数据首先构建了灰色预测模型,对所选特征的2014年与2015年的值进行预测,然后根据所选特征的原始数据与预测值,建立支持向量回归模型,得到财政收入的最终预测值。模型很好的拟合了财政收入的变化情况,同时还具有很高的预测精度,可以用来指导实际的工作。

最新回复(0)