【機器學習與數據挖掘實戰案例01】基于支持向量回歸的市財政收入分析

在這里插入圖片描述

【作者主頁】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 pddata = 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 x1?1.000.950.950.970.970.990.950.970.980.98-0.290.940.960.94
x 2 x_2 x2?0.951.001.000.990.990.920.990.990.980.98-0.130.891.000.98
x 3 x_3 x3?0.951.001.000.990.990.921.000.990.980.99-0.150.891.000.99
x 4 x_4 x4?0.970.990.991.001.000.950.991.000.991.00-0.190.911.000.99
x 5 x_5 x5?0.970.990.991.001.000.950.991.000.991.00-0.180.900.990.99
x 6 x_6 x6?0.990.920.920.950.951.000.930.950.970.96-0.340.950.940.91
x 7 x_7 x7?0.950.991.000.990.990.931.000.990.980.99-0.150.891.000.99
x 8 x_8 x8?0.970.990.991.001.000.950.991.000.991.00-0.150.901.000.99
x 9 x_9 x9?0.980.980.980.990.990.970.980.991.000.99-0.230.910.990.98
x 10 x_{10} x10?0.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} x12?0.940.890.890.910.900.950.890.900.910.90-0.431.000.900.87
x 13 x_{13} x13?0.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? ?y?j=1p?xi?β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} 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?外的其他特征存在著嚴重的共線性。

本案例可以利用Lasso回歸方法進行特征篩選。相關代碼如下。

import pandas as pd
import numpy as np
from sklearn.linear_model import Lassodata = 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μ?]e?ak+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)=(e?a^?1)[X(0)(n)?a^μ^??]e?a^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)}) delta?mean(delta)<0.6745?σ(X(0)) 數量,mean(delta)表示delta的平均值, L L L表示 X ( 0 ) X^{(0)} X(0)的長度。

灰色預測法的通用性比較強些,一般的時間序列場合都可以用,尤其適合那些規律性差且不清楚數據產生機理的情況。

相關代碼如下。

# 自定義灰色預測函數 
def GM11(x0):  # x0為矩陣形式import numpy as npx1 = x0.cumsum()  # 1-AGO序列# 緊鄰均值(MEAN)生成序列z1 = (x1[:len(x1) - 1] + x1[1:]) / 2.0z1 = 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 npnew_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 pltdata = 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 x1?8142148.248460489.28
x 3 x_3 x3?7042.318166.92
x 4 x_4 x4?43611.8447792.22
x 5 x_5 x5?35046.6338384.22
x 6 x_6 x6?8505522.588627139.31
x 7 x_7 x7?4600.45214.78
x 8 x_8 x8?18686.2821474.47
x 13 x_{13} x13?44506.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 pddata = 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.pswp.cn/web/62366.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62366.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62366.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

windows下nacos啟動報錯:java.lang.unsatisfiedLinkError: C:\USers\亂碼AppData\xxx.dll

問題 看了許多別的帖子&#xff0c;大家都是因為缺少dll包&#xff0c;下載安裝 Microsoft Visual C 2015 Redistributable 就可以。但我試過了不行。思來想去&#xff0c;之前正常的時候用的JDK版本是17&#xff0c;后面別的項目用1.8給切換回來了。然后嘗試配置環境變量將JD…

JavaEE 【知識改變命運】03 多線程(3)

文章目錄 多線程帶來的風險-線程安全線程不安全的舉例分析產出線程安全的原因&#xff1a;1.線程是搶占式的2. 多線程修改同一個變量&#xff08;程序的要求&#xff09;3. 原子性4. 內存可見性5. 指令重排序 總結線程安全問題產生的原因解決線程安全問題1. synchronized關鍵字…

并發在前端中的應用?

?并發在前端中的應用主要體現在處理多個請求和優化頁面加載速度方面?。前端并發處理通常涉及在極短時間內發送多個數據請求&#xff0c;例如在頁面渲染時同時請求多個數據。通過并發處理&#xff0c;可以顯著減少頁面加載時間&#xff0c;提升用戶體驗。 前端并發處理的具體…

【力扣】409.最長回文串

問題描述 思路解析 因為同時包含大小寫字母&#xff0c;直接創建個ASCII表大小的桶來標記又因為是要回文子串&#xff0c;所以偶數個數的一定可以那么同時&#xff0c;對于出現奇數次數的&#xff0c;我沒需要他們的次數-1&#xff0c;變為偶數&#xff0c;并且可以標記出現過…

計算機視覺在科學研究(數字化)中的實際應用

計算機視覺是一種利用計算機技術來解析和理解圖像和視頻的方法。.隨著計算機技術的不斷發展&#xff0c;計算機視覺被廣泛應用于科學研究領域&#xff0c;為科學家提供了無限的可能。 一、生命科學領域 在生命科學領域&#xff0c;計算機視覺被廣泛用于圖像識別、分類和測量等…

springboot381銀行客戶管理系統(論文+源碼)_kaic

摘 要 伴隨著信息技術與互聯網技術的不斷發展&#xff0c;人們進到了一個新的信息化時代&#xff0c;傳統管理技術性沒法高效率、容易地管理信息內容。為了實現時代的發展必須&#xff0c;提升管理高效率&#xff0c;各種各樣管理管理體系應時而生&#xff0c;各個領域陸續進到…

JMX 組件架構即詳解

JMX架構由三個主要組件構成&#xff1a; ?MBeans&#xff08;Managed Beans&#xff09;?&#xff1a;代表可管理的資源&#xff0c;是JMX的核心。MBean可以是Java類或接口&#xff0c;提供了管理操作的接口&#xff0c;如獲取系統信息、設置參數等。?MBeanServer?&#x…

LLMs之ICL:《Bayesian scaling laws for in-context learning》翻譯與解讀

LLMs之ICL&#xff1a;《Bayesian scaling laws for in-context learning》翻譯與解讀 導讀&#xff1a;這篇論文的核心議題是理解和建模大型語言模型&#xff08;LLM&#xff09;的上下文學習&#xff08;ICL&#xff09;能力。文章從貝葉斯學習的角度出發&#xff0c;提出了一…

基于單片機和測頻法的頻率計設計及proteus仿真

摘要: 傳感器廣泛應用在自動化測量中,該文利用 51 單片機 2 個 16 位定時器和測量頻率中的測頻法設計了測量方波的頻率計,并用LCD1602 液晶顯示頻率、 proteus 仿真,測試結果表明設計思路正確、誤差小。 關鍵詞: 單片機;測頻法;頻率計; proteus 1 概述 傳感器能感受到…

軟件漏洞印象

軟件漏洞印象 軟件安全性檢測 軟件安全靜態分析&#xff1a;學術界一度十分熱衷的偏理論性方法軟件漏洞動態挖掘&#xff0c;工程界普遍采用動態漏洞挖掘方式&#xff0c;即Fuzz技術&#xff0c;也稱為模糊測試 漏洞利用 vs. 漏洞修復 對于已發現的軟件漏洞 黑客會基于Meta…

計算機網絡 —— HTTPS 協議

前一篇文章&#xff1a;計算機網絡 —— HTTP 協議&#xff08;詳解&#xff09;-CSDN博客 目錄 前言 一、HTTPS 協議簡介 二、HTTPS 工作過程 1.對稱加密 2.非對稱加密 3.中間人攻擊 4.引入證書 三、HTTPS 常見問題 1.中間人能否篡改證書&#xff1f; 2.中間人能否調…

定點數的乘除運算

原碼一位乘法 乘積的符號由兩個數的符號位異或而成。&#xff08;不參與運算&#xff09;被乘數和乘數均取絕對值參與運算&#xff0c;看作無符號數。乘數的最低位為Yn&#xff1a; 若Yn1&#xff0c;則部分積加上被乘數|x|&#xff0c;然后邏輯右移一位&#xff1b;若Yn0&…

如何設置ChromeDriver路徑?

設置ChromeDriver路徑是為了讓Selenium能夠正確地調用Chrome瀏覽器進行自動化操作。以下是幾種設置ChromeDriver路徑的方法&#xff1a; 1. 系統環境變量 將ChromeDriver的路徑添加到系統的環境變量中&#xff0c;這樣在任何地方都可以直接調用ChromeDriver。 Windows系統&a…

數據挖掘:一、Weka軟件的基本操作

實驗目的和要求 了解Weka軟件的使用 實驗環境 Windows11 Weka3.8.6 實驗內容與過程 實驗內容 1、了解Weka使用的一般步驟 2、利用Weka,對數據集進行關聯規則挖掘及數據分類 3、記錄操作步驟、使用的數據、最終的結果 實驗過程 首先打開weka下載官網,選擇合適

【從零開始的LeetCode-算法】383. 贖金信

給你兩個字符串&#xff1a;ransomNote 和 magazine &#xff0c;判斷 ransomNote 能不能由 magazine 里面的字符構成。 如果可以&#xff0c;返回 true &#xff1b;否則返回 false 。 magazine 中的每個字符只能在 ransomNote 中使用一次。 示例 1&#xff1a; 輸入&#…

【第二十四周】從大語言模型到多模態大模型的發展

摘要 大語言模型&#xff08;Large Language Model, LLM&#xff09;是指一類基于深度學習的人工智能系統&#xff0c;它們被設計用來理解和生成自然語言。這些模型通常是在大量的文本數據上進行訓練的&#xff0c;通過學習文本中的模式和結構&#xff0c;它們能夠執行各種各樣…

https ssl免費證書申請,自動續期,acme、certd

本文為個人筆記&#xff0c;方便自己需要時查閱&#xff0c;同時提供出來給大家作為免費ssl證書自動續簽需求的一種參考 大部分免費證書的有效期僅有3個月&#xff0c;所以證書管理會涉及到自動續期管理的問題 一、acme證書 大佬們常用的證書證書申請管理方式&#xff0c;提…

uniapp的生命周期

在 UniApp 中&#xff0c;生命周期函數是指在組件&#xff08;如頁面、視圖等&#xff09;創建和銷毀過程中會自動觸發的一些函數。UniApp 提供了多種生命周期函數&#xff0c;幫助開發者在適當的時機進行相關的邏輯處理。 UniApp 的生命周期函數可以分為 頁面生命周期 和 組件…

unity打包到安卓幀率降低

這個問題遇到過很多次了我的做法就是直接設置Application.targetFrameRate60 參考

【Vue】v-model、ref獲取DOM

目錄 v-moel v-model的原理 v-model用在組件標簽上 方式 defineModel()簡寫 ref屬性 獲取原生DOM 獲取組件實例 nextTick() v-moel v-model&#xff1a;雙向數據綁定指令 數據變了&#xff0c;視圖跟著變&#xff08;數據驅動視圖&#xff09;視圖變了&#xff0c;數…