数据分析课后作业--企业所得税分析预测模型(代码)

1.求取企业所得税各特征间的相关系数
(1)求取原始数据特征之间的Pearson相关系数。
(2)判断各特征之间的相关性。

#求取企业所得税各特征间的相关系数
import numpy as np
import pandas as pd
inputfile = 'income_tax.csv' #读取数据文件
data = pd.read_csv(inputfile) #读取数据
#输出Pearson相关系数,并保留两位小数
print('相关系数矩阵为:','\n',np.round(data.iloc[1:,1:].corr(method = 'pearson'), 2))

在这里插入图片描述
由结果可知,规模以上国有及国有控股工业企业亏损面(x6 )与企业所得税(y)的线性关系不显著,呈现负相关。其余特征均与财政收人呈现高度的正相关关系,但与此同时,各特征之间存在着严重的多重共线性。分析可知,选取的各特征除了x6 外,其他特征与y的相关性很强,可以用作企业所得税预测分析的关键特征,但这些特征之间存在着信息的重复,需要对特征进行进一步筛选。

2.选取企业所得税预测关键特征
(1)建立Lasso回归模型。
(2)对Lasso回归结果进行解读。

#选取企业所得税预测关键特征
import numpy as np
import pandas as pd
from sklearn.linear_model import Lasso
inputfile = 'income_tax.csv' #输入的数据文件
data = pd.read_csv(inputfile) #读取数据
print('输出原始数据的维度为:',data.shape)
lasso = Lasso(1000,random_state=6666)  #调用Lasso()函数,设置λ的值为1000
lasso.fit(data.iloc[:,1:11],data['y'])  #本题中第一列为年份,应该排除
print('相关系数为:',np.round(lasso.coef_,5))  #输出结果,保留五位小数

#计算相关系数非零的个数
print('相关系数大于零个数为:',np.sum(lasso.coef_ > 0))
mask = lasso.coef_ > 0  #返回一个相关系数大于零的布尔数组
print('相关系数是否大于零:',mask)#这时输出的mask为对应特征是否保留的布尔值
mask=np.insert(mask,0,[False]) #第一列为年份,在读入新表格的时候要排除

outputfile = 'new_income_tax.csv'  #输出数据文件
mask = np.append(mask,True)
new_income_tax = data.iloc[:, mask]  #返回相关系数大于零的数据
new_income_tax.to_csv(outputfile)  #存储数据
print('输出数据的维度为:',new_income_tax.shape)  #查看输出数据的维度

在这里插入图片描述
分析实验结果可知,利用Lasso回归方法可知,相关系数大于零的个数为6个,即为影响企业所得税的关键因素,分别是第二产业增加值(x1)、全社会固定资产投资额(x3)、城市商品零售价格指数(x4)、 建筑业企业利润总额(x5)、限额以上连锁店(公司)零售额(x9)、地方财政总收入(x10)。

3.构建企业所得税预测模型
(1)使用灰色预测模型对各特征在2014年及2015年的值进行预测。
(2)建立支持向量回归预测模型。
(3)对上述建立的企业所得税预测模型进行评价。

#构建企业所得税预测模型
import numpy as np
import pandas as pd
from GM11 import GM11 #引入自编的灰色预测函数  GM11相关源代码请放到当前代码同级目录中
inputfile = 'new_income_tax.csv' #输入的数据文件 在上一个实验中保存到了同级目录tmp中
inputfile1 = 'income_tax.csv' #输入的原数据文件
new_income_tax = pd.read_csv(inputfile) # 读取经过特征选择后的数据
data = pd.read_csv(inputfile1) #读取总的数据
new_income_tax.index = data.loc[:,'year']
new_income_tax.index = range(2004, 2016)
new_income_tax.loc[2016] = None
new_income_tax.loc[2017] = None
l = ['x1', 'x3', 'x4', 'x5', 'x9','x10']
for i in l:
  f = GM11(new_income_tax.loc[range(2004, 2016),i].values)[0]
  new_income_tax.loc[2016,i] = f(len(new_income_tax)-1)#2016年预测结果
  new_income_tax.loc[2017,i] = f(len(new_income_tax)) ##2017年预测结果
  new_income_tax[i] = new_income_tax[i].round(2) ## 保留两位小数
outputfile = 'new_income_tax_GM11.xls' ## 灰色预测后保存的路径
y = list(data['y'].values) #提取企业所得税入列,合并至新数据框中
y.extend([np.nan,np.nan])
new_income_tax['y'] = y
new_income_tax.to_excel(outputfile) #结果输出
print('GM11灰色预测结果为:','\n',new_income_tax.loc[2016:2017,:]) ##预测结果展示

在这里插入图片描述
4.SVR模型预测

import pandas as pd
import numpy as np
from sklearn.svm import LinearSVR
import matplotlib.pyplot as plt
from sklearn.metrics import explained_variance_score,\
mean_absolute_error,mean_squared_error,\
median_absolute_error,r2_score
inputfile = 'new_income_tax_GM11.xls' #灰色预测后保存的路径
data = pd.read_excel(inputfile) #读取数据
feature = ['x1', 'x3', 'x4', 'x5', 'x9','x10']
#data_train = data.loc[range(2004,2014)].copy()#取2014年前的数据建模,运行有错
data_train = data.loc[0:11,:] #data.iloc[0:12,:] 此行语句类似上行功能
data_mean = data_train.mean()
data_std = data_train.std()
data_train = (data_train - data_mean)/data_std #数据标准化
x_train = data_train[feature].values#特征数据
y_train = data_train['y'].values #标签数据
linearsvr = LinearSVR()   #调用LinearSVR()函数
linearsvr.fit(x_train,y_train)
x = ((data[feature] - data_mean[feature])/ data_std[feature]).values  #预测,并还原结果。
data[u'y_pred'] = linearsvr.predict(x) * data_std['y'] + data_mean['y']
## SVR预测后保存的结果
outputfile = 'new_income_tax_GM11_final.xls'
data.to_excel(outputfile)
print('真实值与预测值分别为:','\n',data[['y','y_pred']])
#绘制图形
x=np.arange(2004,2018)
p=plt.figure()
p.add_subplot(2,1,1)
plt.plot(x,data['y'],'ro-')
p.add_subplot(2,1,2)
plt.plot(x,data['y_pred'],'bo-')
print('预测图为:',data[['y','y_pred']].plot(subplots = True,
      style=['b-o','r-*'],xticks=data.index[::2]))#xticks=[np.arange(1993,2016),np.arange(1993,2016)]))
plt.show()

在这里插入图片描述
5.模型评估

print('企业所得税回归模型的平均绝对误差为:',
      mean_absolute_error(data.loc[0:11,'y'],data.loc[0:11,'y_pred']))
print('企业所得税回归模型的均方误差为:',
     mean_squared_error(data.loc[0:11,'y'],data.loc[0:11,'y_pred']))
print('企业所得税回归模型的中值绝对误差为:',
     median_absolute_error(data.loc[0:11,'y'],data.loc[0:11,'y_pred']))
print('企业所得税回归模型的可解释方差值为:',
     explained_variance_score(data.loc[0:11,'y'],data.loc[0:11,'y_pred']))
print('企业所得税回归模型的R方值为:',
     r2_score(data.loc[0:11,'y'],data.loc[0:11,'y_pred']))

在这里插入图片描述
通过模型评估实验结果可知,平均绝对误差与中值绝对误差较小,可解释方差值与R2值十分接近1,表明建立的支持向量回归模型拟合效果优良,可以用于预测企业所得税。

posted @ 2022-04-22 00:45  mariow  阅读(736)  评论(0编辑  收藏  举报