【机器学习与数据挖掘实战】案例01:基于支持向量回归的市财政收入分析

news2025/7/17 7:05:03

在这里插入图片描述

【作者主页】Francek Chen
【专栏介绍】 ⌈ ⌈ 机器学习与数据挖掘实战 ⌋ ⌋ 机器学习是人工智能的一个分支,专注于让计算机系统通过数据学习和改进。它利用统计和计算方法,使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数据集中发现模式、关联和异常的过程,旨在提取有价值的信息和知识。机器学习为数据挖掘提供了强大的分析工具,而数据挖掘则是机器学习应用的重要领域,两者相辅相成,共同推动数据科学的发展。本专栏介绍机器学习与数据挖掘的相关实战案例。
【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/ML-DM_cases。

文章目录

    • 一、目标分析
      • (一)背景
      • (二)数据说明
      • (三)分析目标
    • 二、数据准备
    • 三、特征工程
      • (一)Lasso回归
      • (二)特征选择
    • 四、模型训练
      • (一)灰色预测模型
      • (二)关键特征预测
      • (三)SVR模型预测
    • 五、性能度量
    • 小结


一、目标分析

(一)背景

财政收入是政府理财的重要环节,是政府进行宏观调控的重要手段之一,也是政府提供公共产品满足公共支出需要的重要经济基础。财政收入规模是衡量一个国家或一个地区财力和相关政府在社会经济生活中职能范围的重要指标。只有在组织财政收入的过程中正确处理各种物质利益关系,才能达到充分调动各方面的积极性,达到优化资源配置,协调分配关系的目的。财政收入的变化受到经济发展水平和分配政策的制约,同时也会影响到后续财政支出的规划,从而影响到下一阶段的发展规划与相关决策。

本案例利用某市财政收入的历史数据,建立合理的模型,对该市2014年和2015年财政收入进行预测,希望预测结果能够帮助政府合理的控制财政收支,优化财源建设,为制政府定相关决策提供依据。

(二)数据说明

考虑到数据的可得性,本案例所用的财政收入数据分为地方一般预算收入和政府性基金收入。

地方一般预算收入包括以下两个部分。

  • 税收收入。主要包括企业所得税与地方所得税中中央和地方共享的40%,地方享有的25%的增值税、营业税和印花税等。
  • 非税收收入。包括专项收入、行政事业性收费收入、罚没收入、国有资本经营收入和其他收入等。

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

本案例所用数据集data.csv内容如下。

在这里插入图片描述

本案例所用数据特征名称及说明如下表所示。

特征名称特征说明
社会从业人数 x 1 x_1 x1就业人数的上升伴随着居民消费水平的提高,从而间接影响财政收入的增加。
在岗职工工资总额 x 2 x_2 x2反映的是社会分配情况,主要影响财政收入中的个人所得税,房产税以及潜在消费能力。
社会消费品零售总额 x 3 x_3 x3代表社会整体消费情况,是可支配收入在经济生活中的实现。当社会消费品零售总额增长时,表明社会消费意愿强烈,部分程度上会导致财政收入中增值税的增长,当消费增长时,也会引起经济系统中其他方面发生变动,最终导致财政收入的增长。
城镇居民人均可支配收入 x 4 x_4 x4居民收入越高消费能力越强,同时意味着其工作积极性越高,创造出的财富越多,从而能带来财政收入更快和持续的增长。
城镇居民人均消费性支出 x 5 x_5 x5居民在消费商品的过程中会产生各种税费,税费又是调节生产规模的手段之一。在商品经济发达的如今,居民消费的越多,对财政收入的贡献就越大。
年末总人口 x 6 x_6 x6在地方经济发展水平既定的条件下,人均地方财政收入与地方人口数呈反比例变化。
全社会固定资产投资额 x 7 x_7 x7全社会固定资产投资是建造和购置固定资产的经济活动,即固定资产再生产活动。主要通过投资来促进经济增长,扩大税源,进而拉动财政税收收入整体增长。
地区生产总值 x 8 x_8 x8表示地方经济发展水平。一般来讲,政府财政收入来源于当期的地区生产总值。在国家经济政策不变、社会秩序稳定的情况下,地方经济发展水平与地方财政收入之间存在着密切的相关性,越是经济发达的地区,其财政收入的规模就越大。
第一产业产值 x 9 x_9 x9由于取消农业税,实施三农政策,使得第一产业产值对财政收入的影响更小。
税收 x 10 x_{10} x10由于其具有征收的强制性、无偿性和固定性特点,可以为政府履行其职能提供充足的资金来源。因此,各国都将其作为政府财政收入的最重要的收入形式和来源。
居民消费价格指数 x 11 x_{11} x11反映居民家庭购买的消费品及服务价格水平的变动情况,影响城乡居民的生活支出和国家的财政收入。
第三产业与第二产业产值比 x 12 x_{12} x12表示产业结构。第三产业生产总值代表国民经济水平,是财政收入的主要影响因素,当产业结构逐步优化时,财政收入也会随之增加。
居民消费水平 x 13 x_{13} x13在很大程度上受整体经济状况GDP的影响,从而间接影响地方财政收入。

(三)分析目标

结合某市财政收入的数据情况,可以实现以下目标。

  1. 分析、识别影响地方财政收入的关键特征。
  2. 预测2014年和2015年的财政收入。

本案例包括以下步骤。

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

本案例的总体流程图如下图所示。

在这里插入图片描述

二、数据准备

本案例采用的数据是某市财政收入数据,均来自某市的统计年鉴。本案例仅对1994–2013年的数据进行分析。获取数据后,发现影响地方财政收入的特征有很多,在建立模型之前需要判断财政收入与所给特征之间的相关性、各特征之间的相关性,以此判断所给特征是否可以用作建模的关键特征,不能用作关键特征的需要删除,本案例利用Pearson相关系数判断各特征之间的相关性。

相关代码如下。

import numpy as np
import pandas as pd

data = pd.read_csv('../data/data.csv')  # 读取数据
# 保留两位小数,并将结果保存为’.csv’文件
np.round(data.corr(method = 'pearson'), 2).to_csv('../tmp/data_cor.csv')
print('相关系数矩阵为:\n', np.round(data.corr(method = 'pearson'), 2))

在这里插入图片描述

数据各特征之间的Pearson相关系数,如下表所示。

x 1 x_1 x1 x 2 x_2 x2 x 3 x_3 x3 x 4 x_4 x4 x 5 x_5 x5 x 6 x_6 x6 x 7 x_7 x7 x 8 x_8 x8 x 9 x_9 x9 x 10 x_{10} x10 x 11 x_{11} x11 x 12 x_{12} x12 x 13 x_{13} x13 y y y
x 1 x_1 x11.000.950.950.970.970.990.950.970.980.98-0.290.940.960.94
x 2 x_2 x20.951.001.000.990.990.920.990.990.980.98-0.130.891.000.98
x 3 x_3 x30.951.001.000.990.990.921.000.990.980.99-0.150.891.000.99
x 4 x_4 x40.970.990.991.001.000.950.991.000.991.00-0.190.911.000.99
x 5 x_5 x50.970.990.991.001.000.950.991.000.991.00-0.180.900.990.99
x 6 x_6 x60.990.920.920.950.951.000.930.950.970.96-0.340.950.940.91
x 7 x_7 x70.950.991.000.990.990.931.000.990.980.99-0.150.891.000.99
x 8 x_8 x80.970.990.991.001.000.950.991.000.991.00-0.150.901.000.99
x 9 x_9 x90.980.980.980.990.990.970.980.991.000.99-0.230.910.990.98
x 10 x_{10} x100.980.980.991.001.000.960.991.000.991.00-0.170.900.990.99
x 11 x_{11} x11-0.29-0.13-0.15-0.19-0.18-0.34-0.15-0.15-0.23-0.171.00-0.43-0.16-0.12
x 12 x_{12} x120.940.890.890.910.900.950.890.900.910.90-0.431.000.900.87
x 13 x_{13} x130.961.001.001.000.990.941.001.000.990.99-0.160.901.000.99
y y y0.940.980.990.990.990.910.990.990.980.99-0.120.870.991.00

根据相关系数表所示的结果得到以下分析。

居民消费价格指数( x 11 x_{11} x11)与财政收入( y y y)的线性关系不显著,呈现一定程度的负相关。其余特征均与财政收入呈现高度的正相关关系。按相关性大小,依次是 x 3 , x 4 , x 5 , x 7 , x 8 , x 10 , x 13 , x 2 , x 9 , x 1 , x 6 x_3, x_4, x_5, x_7, x_8, x_{10}, x_{13}, x_2, x_9, x_1, x_6 x3,x4,x5,x7,x8,x10,x13,x2,x9,x1,x6 x 12 x_{12} x12
同时,各特征之间存在着严重的共线性。特征 x 1 , x 4 , x 5 , x 6 , x 8 , x 9 , x 10 x_1, x_4, x_5, x_6, x_8, x_9, x_{10} x1,x4,x5,x6,x8,x9,x10 与除了 x 11 x_{11} x11之外的特征均存在严重的共线性,特征 x 2 , x 3 , x 7 x_2, x_3, x_7 x2,x3,x7 与除了 x 11 x_{11} x11 x 12 x_{12} x12外的其他特征存在着严重的共线性。 x 11 x_{11} x11与各特征的共线性不明显, x 12 x_{12} x12与除了 x 2 , x 3 , x 7 , x 11 x_2, x_3, x_7, x_{11} x2,x3,x7,x11 之外的其他特征有严重的共线性, x 13 x_{13} x13与除了 x 11 x_{11} x11之外的各特征有严重的共线性。 x 2 x_2 x2 x 3 x_3 x3 x 2 x_2 x2 x 13 x_{13} x13 x 3 x_3 x3 x 13 x_{13} x13等多对特征之间存在完全的共线性。

根据对相关系数表分析可知以下两点。选取的各特征除了 x 11 x_{11} x11外,其他特征与 y y y的相关性很强,可以用作财政收入预测分析的关键特征,特征之间存在着信息的重复,在建立模型之前需要对特征进行进一步筛选。

三、特征工程

虽然在数据准备过程中对特征进行了初步筛选,但是引入的特征太多,而且这些特征之间存在着信息的重复。为了保留重要的特征,建立精确、简单的模型,需要对原始特征进一步筛选,考虑到传统的特征选择方法存在一定的局限性,本案例采用最近广泛使用的Lasso特征选择方法对原始特征进一步筛选。

(一)Lasso回归

Lasso回归方法以缩小特征集(降阶)为思想,是一种收缩估计方法。Lasso方法可以将特征的系数进行压缩并使某些回归系数变为0,进而达到特征选择的目的,可以广泛地应用于模型改进与选择。通过选择惩罚函数,借用Lasso思想和方法实现特征选择的目的。模型选择本质上是寻求模型稀疏表达的过程,而这种过程可以通过优化一个“损失”+“惩罚”的函数问题来完成。

Lasso参数估计如下式所示。

β ^ ( lasso ) = arg min ⁡ β 2 ∥ y − ∑ j = 1 p x i β i ∥ 2 + λ ∑ j = 1 p ∣ β i ∣ \hat\beta(\text{lasso}) = \argmin_\beta^2 \left\Vert y-\sum_{j=1}^p x_i\beta_i\right\Vert^2 + \lambda\sum_{j=1}^p|\beta_i| β^(lasso)=βargmin2 yj=1pxiβi 2+λj=1pβi

λ \lambda λ为非负正则参数,控制着模型的复杂程度, λ \lambda λ越大对特征较多的线性模型的惩罚力度就越大,从而最终获得一个特征较少的模型; λ ∑ j = 1 p ∣ β i ∣ \lambda\sum_{j=1}^p|\beta_i| λj=1pβi称为惩罚项。调整参数 λ \lambda λ可以采用交叉验证法,选取交叉验证误差最小的 λ \lambda λ值。最后,按照得到的 λ \lambda λ值,用全部数据重新拟合模型即可。

值得注意的是,当原始特征中存在共线性时,Lasso回归不失为一种很好的处理共线性的方法,它可以有效地对存在共线性的特征进行筛选。

(二)特征选择

根据相关系数表的结果分析可知,原始数据中各特征之间存在严重的共线性。

  • 特征 x 1 、 x 4 、 x 5 、 x 6 、 x 8 、 x 9 、 x 10 x_1、x_4、x_5、x_6、x_8、x_9、x_{10} x1x4x5x6x8x9x10与除了 x 11 x_{11} x11之外的特征均存在严重的共线性。
  • 特征 x 2 、 x 3 、 x 7 x_2、x_3、x_7 x2x3x7与除了 x 11 x_{11} x11 x 12 x_{12} x12外的其他特征存在着严重的共线性。

本案例可以利用Lasso回归方法进行特征筛选。相关代码如下。

import pandas as pd
import numpy as np
from sklearn.linear_model import Lasso

data = pd.read_csv('../data/data.csv')  # 读取数据
# 调用Lasso()函数,设置λ的值为1000
lasso = 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)

data = data.iloc[:, 0:13]
new_reg_data = data.iloc[:, mask]  # 返回相关系数非零的数据
new_reg_data.to_csv('../tmp/new_reg_data.csv')  # 存储数据
print('输出数据的维度为:', new_reg_data.shape)  # 查看输出数据的维度

在这里插入图片描述

各特征对应的系数如下表所示。从表的结果可以看出,利用Lasso回归方法识别影响财政收入的关键影响因素是社会从业人数( x 1 x_1 x1)、社会消费品零售总额( x 3 x_3 x3)、城镇居民人均可支配收入( x 4 x_4 x4)、城镇居民人均消费性支出( x 5 x_5 x5)、全社会固定资产投资额( x 7 x_7 x7)、地区生产总值( x 8 x_8 x8)、第一产业产值( x 9 x_9 x9) 、居民消费水平( x 13 x_{13} x13)。

x 1 x_1 x1 x 2 x_2 x2 x 3 x_3 x3 x 4 x_4 x4 x 5 x_5 x5 x 6 x_6 x6 x 7 x_7 x7 x 8 x_8 x8 x 9 x_9 x9 x 10 x_{10} x10 x 11 x_{11} x11 x 12 x_{12} x12 x 13 x_{13} x13
-0.00010.0000.124-0.0100.0650.0000.3170.035-0.0010.0000.0000.000-0.040

四、模型训练

为实现对2014年和2015年的财政预测,本案例利用SVR(Support Vector Regression,支持向量回归)建立预测模型。由于原始数据中没有提供关键特征2014年和2015年的数据,所以本案例利用灰色预测模型预测关键特征2014年和2015年的值。利用支持向量回归(Support Vector Regression,SVR)预测模型和灰色模型预测值预测2014年和2015年的财政收入。

(一)灰色预测模型

灰色预测模型是一种对含有不确定因素的系统进行预测的方法。在建立灰色预测模型之前,需先对原始时间序列进行数据处理,经过数据处理后的时间序列即称为生成列,灰色系统常用的数据处理方式有累加、累减和加权累加3种。灰色预测模型是利用离散随机数经过生成变为随机性被显著削弱而且较有规律的生成数,建立起的微分方程形式的模型。灰色预测是以灰色模型为基础的,在众多的灰色模型中,GM(1,1)模型最为常用。

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

X ( 0 ) X^{(0)} X(0) 进行一次累加得到累加序列 X ( 1 ) = { X ( 1 ) ( k ) , k = 0 , 1 , 2 , ⋯   , n } X^{(1)} = \{X^{(1)}(k), k=0,1,2,\cdots,n\} X(1)={X(1)(k),k=0,1,2,,n}

X ( 1 ) X^{(1)} X(1) 建立一阶线性微分方程,如下式所示,即GM(1,1)模型。
d X ( 1 ) d t + a X ( 1 ) = μ \frac{\mathrm{d}X^{(1)}}{\mathrm{d}t} + aX^{(1)} = \mu dtdX(1)+aX(1)=μ

求解微分方程,得到预测模型如下式所示。
X ^ ( 1 ) ( k + 1 ) = [ X ( 0 ) ( 1 ) − μ a ] e − a k + μ a \hat X^{(1)}(k+1) = \left[X^{(0)}(1)-\frac{\mu}{a}\right]\mathrm{e}^{-ak}+\frac{\mu}{a} X^(1)(k+1)=[X(0)(1)aμ]eak+aμ

由于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) 的灰色预测模型如下式所示。
X ^ ( 0 ) ( k + 1 ) = ( e − a ^ − 1 ) [ X ( 0 ) ( n ) − μ ^ a ^ ] e − a ^ k \hat X^{(0)}(k+1) = (\mathrm{e}^{-\hat a}-1)\left[X^{(0)}(n)-\frac{\hat\mu}{\hat a}\right]\mathrm{e}^{-\hat ak} X^(0)(k+1)=(ea^1)[X(0)(n)a^μ^]ea^k

灰色预测模型可以利用后验差检验模型精度,使用后验差检验法的判别规则如下表所示。

PC模型精度
>0.95<0.35
>0.80<0.5合格
>0.70<0.65勉强合格
<0.70>0.65不合格

在后验差检验判别参照表中,P和C计算公式如下式所示。
C = σ ( delta ) σ ( X ( 0 ) ) C=\frac{\sigma(\text{delta})}{\sigma(X^{(0)})} C=σ(X(0))σ(delta) P = S L P=\frac{S}{L} P=LS

在C的计算公式中, delta = ∣ X ( 0 ) − X ^ ( 0 ) ∣ \text{delta}=|X^{(0)}-\hat X^{(0)}| delta=X(0)X^(0) σ \sigma σ表示标准差, S S S表示的 ∣ delta − mean ( delta ) ∣ < 0.6745 ⋅ σ ( X ( 0 ) ) |\text{delta} - \text{mean}(\text{delta})|<0.6745\cdot\sigma(X^{(0)}) deltamean(delta)<0.6745σ(X(0)) 数量,mean(delta)表示delta的平均值, L L L表示 X ( 0 ) X^{(0)} X(0)的长度。

灰色预测法的通用性比较强些,一般的时间序列场合都可以用,尤其适合那些规律性差且不清楚数据产生机理的情况。

相关代码如下。

# 自定义灰色预测函数 
def GM11(x0):  # x0为矩阵形式
    import numpy as np
    x1 = x0.cumsum()  # 1-AGO序列
    # 紧邻均值(MEAN)生成序列
    z1 = (x1[:len(x1) - 1] + x1[1:]) / 2.0
    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)
    # 返回灰色预测函数、a、b、首项、方差比、小残差概率
    return f, a, b, x0[0], C, P

(二)关键特征预测

利用灰色预测模型得到以下特征的2014年和2015年的预测值。

  • 社会从业人数( x 1 x_1 x1
  • 社会消费品零售总额( x 3 x_3 x3
  • 城镇居民人均可支配收入( x 4 x_4 x4
  • 城镇居民人均消费性支出( x 5 x_5 x5
  • 年末总人口( x 6 x_6 x6
  • 全社会固定资产投资额( x 7 x_7 x7
  • 地区生产总值( x 8 x_8 x8
  • 居民消费水平( x 13 x_{13} x13

相关代码如下。

import pandas as pd
import numpy as np

new_reg_data = pd.read_csv('../tmp/new_reg_data.csv')  # 读取经过特征选择后的数据
data = pd.read_csv('../data/data.csv')  # 读取总的数据
new_reg_data.index = range(1994, 2014)
new_reg_data.loc[2014] = None
new_reg_data.loc[2015] = None
Accuracy = []  # 存放灰色预测模型精度
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)  # 保留两位小数
    C = GM11(new_reg_data.loc[range(1994, 2014), 'x1'].as_matrix())[4]
    P = GM11(new_reg_data.loc[range(1994, 2014), 'x1'].as_matrix())[5]
    if P>0.95 and C<0.35:
        Accuracy.append('好')
    elif 0.8<P<=0.95 and 0.35<=C<0.5:
        Accuracy.append('合格')
    elif 0.7<P<=0.8 and 0.5<=C<0.65:
        Accuracy.append('勉强合格')
    else :
        Accuracy.append('不合格')

new_reg_data = new_reg_data.iloc[:, 1:]
new_reg_data.loc['模型精度', :] = Accuracy
outputfile = '../tmp/new_reg_data_GM11.xls'  # 灰色预测后保存的路径
# 提取财政收入列,合并至新数据框中
y = list(data['y'].values)
y.extend([np.nan, np.nan])
new_reg_data.loc[range(1994, 2016),'y'] = y
new_reg_data.to_excel(outputfile)  # 结果输出
# 预测结果展示
print('预测结果为:\n', new_reg_data.loc[[2014, 2015, '模型精度'], :])

在这里插入图片描述

(三)SVR模型预测

构建支持向量回归预测模型,并将关键特征灰色预测代码中的预测结果代入建立的地方财政收入支持向量回归预测模型,预测2014年和2015年的财政收入。地方财政收入真实值与预测值的对比图如下图所示。

相关代码如下。

from sklearn.svm import LinearSVR
import matplotlib.pyplot as plt

data = pd.read_excel('../tmp/new_reg_data_GM11.xls')  # 读取数据
data = data.drop('Unnamed: 0', axis=1, errors='ignore')  # 如果该列存在则删除,不存在则跳过
data = data.drop(labels='模型精度', axis=0, errors='ignore')  # 删除行
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(random_state=123)  # 调用LinearSVR()函数
linearsvr.fit(x_train, y_train)

# 预测2014年和2015年财政收入,并还原结果。
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'
data.to_excel(outputfile)
print('真实值与预测值分别为:\n', data[['y', 'y_pred']])

print('预测图为:', data[['y', 'y_pred']].plot(style = ['b-o', 'r-*']))  # 画出预测结果图
plt.xlabel('年份')
plt.xticks(range(1994,2015,2))
plt.show()

在这里插入图片描述

五、性能度量

整理关键特征灰色预测的结果,如下表所示。从表中可以看出,2014年和2015年关键特征的灰色模型预测值精度均较高,可以用于预测2014年和2015年财政收入的关键特征数据。

2014预测值2015预测值预测精度等级
x 1 x_1 x18142148.248460489.28
x 3 x_3 x37042.318166.92
x 4 x_4 x443611.8447792.22
x 5 x_5 x535046.6338384.22
x 6 x_6 x68505522.588627139.31
x 7 x_7 x74600.45214.78
x 8 x_8 x818686.2821474.47
x 13 x_{13} x1344506.4749945.88

利用关键特征灰色预测的结果中的预测值和SVR模型预测2014年和2015年财政收入。整理后如下表所示,y_pred表示预测值。

年份yy_pred年份yy_pred年份yy_pred
199464.8737.8258552002269.1220.0294420101399.161378.7089
199599.7584.4605662003300.55300.8219420111535.141536.3989
199688.1195.4007222004338.45383.7249820121579.681739.0082
1997106.07107.012122005408.86463.3493620132088.142085.4473
1998137.32151.497112006476.72554.9438520142187.1799
1999188.14188.540742007838.99691.3577220152538.0938
2000219.91219.912008843.14843.01617
2001271.91230.7646220091107.671087.4603

支持向量回归预测模型的代码结果中已给出地方财政收入真实值预测值的对比图。利用回归模型性能度量指标对地方财政收入预测模型进行性能度量。如下表所示,平均绝对误差中值绝对误差较小,可解释方差值R方值十分接近1,从真实值与预测值的对比图可以看出,预测值和真实值曲线基本重合,表明建立的支持向量回归模型拟合效果优良,可以用于预测财政收入。

相关代码如下。

from sklearn.metrics import mean_absolute_error  # 平均绝对误差 
from sklearn.metrics import median_absolute_error  # 中值绝对误差
from sklearn.metrics import explained_variance_score  # 可解释方差
from sklearn.metrics import r2_score  # R方值
import pandas as pd

data = pd.read_excel('../tmp/new_reg_data_GM11_revenue.xls')  # 读取数据
data = data.drop('Unnamed: 0', axis=1, errors='ignore')  # 如果该列存在则删除,不存在则跳过
mean_ab_error = mean_absolute_error(data.loc[range(1994, 2014), 'y'], data.loc[range(1994,2014), 'y_pred'], multioutput = 'raw_values')
median_ab_error = median_absolute_error(data.loc[range(1994, 2014), 'y'], data.loc[range(1994, 2014), 'y_pred'])
explain_var_score = explained_variance_score(data.loc[range(1994, 2014), 'y'], data.loc[range(1994, 2014), 'y_pred'], multioutput = 'raw_values')
r2 = r2_score(data.loc[range(1994, 2014), 'y'], data.loc[range(1994, 2014), 'y_pred'], multioutput = 'raw_values')

print('平均绝对误差:', mean_ab_error, '\n', 
      '中值绝对误差:', median_ab_error, '\n', 
      '可解释方差:', explain_var_score, '\n', 
      'R方值:', r2)

在这里插入图片描述

指标指标值
平均绝对误差34.26585201
中值绝对误差17.749581395641485
可解释方差0.99086819
R方值0.99085796

小结

本案例结合某市财政收入原始数据,重点介绍了SVR模型在财政预测方面的应用,主要内容包含数据探索、特征选取、模型构建和性能度量。其中利用Pearson相关系数探对原始数据进行相关性分析,得到与财政收入相关性较高的特征,并且了解到各特征之间存在严重的共线性。利用Lasso回归模型对原始特征进行筛选,得到用于建模的关键特征。

针对历史数据,构建灰色预测模型,对所选关键特征2014年和2015年的值进行预测。最后根据所选特征原始数据建立SVR模型,然后利用灰色预测模型对所选特征的预测值进行预测,最终得到2014年和2015年的财政收入预测值。利用回归模型性能度量指标对SVR模型进行评价,模型精度较高,可以用于指导实际工作。

:以上文中的数据集及相关资源下载地址:
链接:https://pan.quark.cn/s/bc0a61378df2
提取码:n2Kw

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2259110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spire.PDF for .NET【页面设置】演示:向 PDF 文档添加页码

在 PDF 文档中添加页码不仅实用&#xff0c;而且美观&#xff0c;因为它提供了类似于专业出版材料的精美外观。无论您处理的是小说、报告还是任何其他类型的长文档的数字副本&#xff0c;添加页码都可以显著提高其可读性和实用性。在本文中&#xff0c;您将学习如何使用Spire.P…

【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数(三)

目录 ARC规则 概要 所有权修饰符 __strong修饰符 __weak修饰符 __unsafe_unretained修饰符 __autoreleasing修饰符 ARC规则 概要 “引用计数式内存管理”的本质部分在ARC中并没有改变&#xff0c;ARC只是自动地帮助我们处理“引用计数”的相关部分。 在编译单位上可以…

An error happened while trying to locate the file on the Hub and we cannot f

An error happened while trying to locate the file on the Hub and we cannot find the requested files in the local cache. Please check your connection and try again or make sure your Internet connection is on. 关于上述comfy ui使用control net预处理器的报错问…

angular19-官方教程学习

周日了解到angular已经更新到19了&#xff0c;想按官方教程学习一遍&#xff0c;工欲善其事必先利其器&#xff0c;先更新工具&#xff1a; 安装新版版本 卸载老的nodejs 20.10.0&#xff0c;安装最新的LTS版本 https://nodejs.org 最新LTS版本已经是22.12.0 C:\Program File…

计算机毕业设计Python+Vue.js游戏推荐系统 Steam游戏推荐系统 Django Flask 游 戏可视化 游戏数据分析 游戏大数据 爬虫 机

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

上海亚商投顾:创业板指震荡调整 机器人概念股再度爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日冲高回落&#xff0c;深成指、创业板指盘中跌超1%&#xff0c;尾盘跌幅有所收窄。机器人概念股逆势爆…

粘贴可运行:Java调用大模型(LLM) 流式Flux stream 输出;基于spring ai alibaba

在Java中&#xff0c;使用Spring AI Alibaba框架调用国产大模型通义千问&#xff0c;实现流式输出&#xff0c;是一种高效的方式。通过Spring AI Alibaba&#xff0c;开发者可以轻松地集成通义千问模型&#xff0c;并利用其流式处理能力&#xff0c;实时获取模型生成的文本。这…

【CSS in Depth 2 精译_070】11.3 利用 OKLCH 颜色值来处理 CSS 中的颜色问题(下):从页面其他颜色衍生出新颜色

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 11 章 颜色与对比】 ✔️ 11.1 通过对比进行交流 11.1.1 模式的建立11.1.2 还原设计稿 11.2 颜色的定义 11.2.1 色域与色彩空间11.2.2 CSS 颜色表示法 11.2.2.1 RGB…

Ajax--实现检测用户名是否存在功能

目录 &#xff08;一&#xff09;什么是Ajax &#xff08;二&#xff09;同步交互与异步交互 &#xff08;三&#xff09;AJAX常见应用情景 &#xff08;四&#xff09;AJAX的优缺点 &#xff08;五&#xff09;使用jQuery实现AJAX 1.使用JQuery中的ajax方法实现步骤&#xf…

【PSINS】以速度和位置作为观测量(即6维观测量)的组合导航滤波,EKF实现,提供可直接运行的MATLAB代码

原有的代码是以位置作为观测量的,这里提供位置+速度,共6维的观测量,状态量还是15维不变 文章目录 源代码运行结果PS源代码 源代码如下: % 【PSINS】位置与速度为观测的153,EKF。从速度观测的EKF153改进而来 % 2024-12-11/Ver1:位置与速度为观测量% 清空工作空间,清除命…

探索云原生安全解决方案的未来

我们是否充分意识到云端所面临的网络安全威胁&#xff1f; 在当今互联互通的世界中&#xff0c;维护安全的环境至关重要。云的出现扩大了潜在威胁的范围&#xff0c;因为它催生了机器身份&#xff08;称为非人类身份 (NHI)&#xff09;及其秘密。随着组织越来越多地转向云原生…

无法正常启动此程序,因为计算机丢失wlanapi.dll

wlanapi.dll丢失怎么办&#xff1f;有没有什么靠谱的修复wlanapi.dll方法_无法启动此程序,因为计算机中丢失wlanapi.dll-CSDN博客 wlanapi.dll是 Windows 操作系统中的一个动态链接库文件&#xff0c;主要与 Windows 无线 LAN (WLAN) API 相关。该DLL提供了许多必要的函数&…

ADC -DMA

文章目录 前言一、ADC配置修改二、配置DMA三、DMA中断四、完整参考代码总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 项目需要&#xff1a; 在原有基础上改进&#xff0c;采用DMA中断采集数据 提示&#xff1a;以下是本篇文章正文内容&#xff0…

Referer头部在网站反爬虫技术中的运用

网站数据的安全性和完整性至关重要。爬虫技术&#xff0c;虽然在数据收集和分析中发挥着重要作用&#xff0c;但也给网站管理员带来了挑战。为了保护网站数据不被恶意爬取&#xff0c;反爬虫技术应运而生。本文将探讨HTTP头部中的Referer字段在反爬虫技术中的应用&#xff0c;并…

docker搭建haproxy实现负载均衡

华子目录 获取haproxy镜像建立haproxy容器的数据卷获取haproxy的配置文件编写yaml文件运行测试 获取haproxy镜像 [rootdocker-node1 ~]# docker pull haproxy:2.3建立haproxy容器的数据卷 conf目录为数据卷 [rootdocker-node1 ~]# mkdir /var/lib/docker/volumes/conf/获取h…

阿里云数据库MongoDB版助力极致游戏高效开发

客户简介 成立于2010年的厦门极致互动网络技术股份有限公司&#xff08;以下简称“公司”或“极致游戏”&#xff09;&#xff0c;是一家集网络游戏产品研发与运营为一体的重点软件企业&#xff0c;公司专注于面向全球用户的网络游戏研发与运营。在整个产业链中&#xff0c;公…

深入探索前端调试神器vConsole

深入探索前端调试神器vConsole 在前端开发过程中&#xff0c;调试工具的重要性不言而喻。而vConsole作为一款轻量级的、可嵌入的JavaScript调试面板&#xff0c;为前端开发者提供了一个便捷的调试解决方案。本文将带你深入了解vConsole的基本概念、作用&#xff0c;并通过丰富…

子网划分实例

看到有人问这个问题&#xff1a; 想了一下&#xff0c;这是一个子网划分的问题&#xff1a; 处理方法如图&#xff1a; 这是一个子网划分的问题 设备1用三层交换机&#xff0c;端口设置为路由模式&#xff0c;设备2和设备3为傻瓜交换机模式 设备2和设备3下挂设备都是26为掩码&…

【机器人】振动分析和控制工具之Bode图

Bode 图完整介绍 Bode 图由两个部分组成&#xff1a; 幅值图 (Magnitude Plot)&#xff1a;描述系统对不同频率输入信号的增益大小&#xff08;幅值响应&#xff09;。相位图 (Phase Plot)&#xff1a;描述系统输出信号相对于输入信号的相位差。 Bode 图的横轴是频率&#x…

Rerender A Video 技术浅析(五):对象移除与自动配色

Rerender A Video 是一种基于深度学习和计算机视觉技术的视频处理工具&#xff0c;旨在通过智能算法对视频进行重新渲染和优化。 一、对象移除模块 1. 目标检测 1.1 概述 目标检测是对象移除的第一步&#xff0c;旨在识别视频中需要移除的对象并生成相应的掩码&#xff08;m…