在计量经济学里面的研究,围绕着影响GDP的因素的研究有很多,基本都是做回归,拿GDP作为被解释变量y,其他因素作为解释变量x。然后做线性回归,时间序列就做自回归,面板数据就做固定效应等等。本次案例采用机器学习里面的随机森林回归来研究影响经济增长的因素,使用Python编程。选取人口,固定资产投资,消费,净出口,税收,广义M2货币,物价指数CPI作为解释变量X。我国GDP作为被解释变量y。

数据长这个样子,从1990年到2020年


首先导入包

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import StandardScaler
import statsmodels.formula.api as smf
plt.rcParams ['font.sans-serif'] ='SimHei'
plt.rcParams ['axes.unicode_minus']=False
sns.set_style("darkgrid",{"font.sans-serif":[ 'Arial']})
#plt.rcParams['font.sans-serif'] = ['KaiTi']

读取数据,查看数据信息

spss = pd.read_excel('data.xlsx')
spss.info()
data=spss.copy()

将时间设为索引

spss.set_index('year',inplace=True)
data.drop('year',axis=1,inplace=True)

描述性统计

data.describe()  

计算每个变量的均值方差,分位数等

画出每个变量的随时间变化的折线图

#Sequence diagram of eight variables
column = data.columns.tolist()
fig = plt.figure(figsize=(12,4), dpi=128)
for i in range(8):plt.subplot(2,4, i + 1)  sns.lineplot(data=spss[column[i]],lw=1)  plt.ylabel(column[i], fontsize=12)
plt.tight_layout()
plt.show()

所有变量都是单调增加,具有一致性趋势。

画所有变量的箱线图

#boxplot
column = data.columns.tolist()
fig = plt.figure(figsize=(12,4), dpi=128)
for i in range(8):plt.subplot(2,4, i + 1)  sns.boxplot(data=data[column[i]], orient="v",width=0.5)  plt.ylabel(column[i], fontsize=12)
plt.tight_layout()
plt.show()

画核密度图

#kdeplot
column = data.columns.tolist()
fig = plt.figure(figsize=(12,4), dpi=128)
for i in range(8):plt.subplot(2,4, i + 1)  sns.kdeplot(data=data[column[i]],color='blue',shade= True) plt.ylabel(column[i], fontsize=12)
plt.tight_layout()
plt.show()

从箱线图和核密度图可以看出数据的分布都还比较集中,没有很多异常点。

下面画所有变量两两之间的散点图

sns.pairplot(data[column],diag_kind='kde')
plt.savefig('Scatter plot.jpg',dpi=256)

可以看到除了cpi,几乎所有变量之间都有线性关系,人口有点像二次抛物线。

画皮尔逊相关系数热力图

#Pearson's correlation coefficient heatmap
corr = plt.figure(figsize = (10,10),dpi=128)
corr= sns.heatmap(data[column].corr(),annot=True,square=True)
plt.xticks(rotation=40)

很多X之间都存在的高的相关性,经典的最小二乘线性模型可能存在着严重的多重共线性。


线性回归

还是做一下线性回归

import statsmodels.formula.api as smf
all_columns = "+".join(data.columns[1:])
print('x is :'+all_columns)
formula = 'GDP~' + all_columns
print('The regression equation is :'+formula)

写出回归方程后,带入ols模型

results = smf.ols(formula, data=data).fit()
results.summary()

可以看到整体的拟合优度为100。。在0.05的显著性水平下,人口和消费,还有净出口税收都对GDP的变动具有显著性的影响。

有些变量不显着,可能是多重共线性的原因……下面的非参数回归方法——随机森林,可以避免多重共线性的影响,还能得到变量的重要特征排序


随机森林回归

取出X和y

X=data.iloc[:,1:]
y=data.iloc[:,0]

数据标准化

# data normalization
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X)
X_s= scaler.transform(X)
X_s[:3]

随机森林模型拟合和评价

from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor(n_estimators=5000, max_features=int(X.shape[1] / 3), random_state=0)
model.fit(X_s,y)
model.score(X_s,y)

拟合优度也很高,99.96%

下面对比拟合值和真实值

pred = model.predict(X_s)
plt.scatter(pred, y, alpha=0.6)
w = np.linspace(min(pred), max(pred), 100)
plt.plot(w, w)
plt.xlabel('pred')
plt.ylabel('y_test')
plt.title('Comparison of GDP fitted value and true value')

可以看到两者基本都在一条线上,说明效果很好

计算每个变量的重要性

print(model.feature_importances_)
sorted_index = model.feature_importances_.argsort()

画图可视化

plt.barh(range(X.shape[1]), model.feature_importances_[sorted_index])
plt.yticks(np.arange(X.shape[1]),X.columns[sorted_index],fontsize=14)
plt.xlabel('X Importance',fontsize=12)
plt.ylabel('covariate X',fontsize=12)
plt.title('Importance Ranking Plot of Covariate ',fontsize=15)
plt.tight_layout()

结论,影响GDP的变量重要性排序:
税收>M2>消费>投资>人口>出口进口量>CPI

当然实际科研中也可以选择更多的变量,随机森林不怕多重共线性,是要变量越多越好。

Python数据分析案例05——影响经济增长的因素(随机森林回归)相关推荐

  1. Python实现贝叶斯优化器(Bayes_opt)优化随机森林回归模型(RandomForestRegressor算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 贝叶斯优化器 (BayesianOptimization) 是一 ...

  2. Python数据分析案例-利用多元线性回归与随机森林回归算法预测笔记本新品价格

    1.前言 目的: 本文通过多元线性回归与随机森林算法预测笔记本新品的发售价 工具: 语言:Python 3.8 软件:Jupyter Notebook 库:pandas.numpy.matplotli ...

  3. python数据分析实战案例-Python数据分析案例实战

    原标题:Python数据分析案例实战 至今我们网站已经开设了多个数据分析系列的课程,大部分都是基于算法思路来开展的,课程中着重点在于算法的讲授.软件的使用,案例只是辅助学习.然而很多学员反映,希望可以 ...

  4. Python数据分析案例22——财经新闻可信度分析(线性回归,主成分回归,随机森林回归)

    本次案例还是适合人文社科领域,金融或者新闻专业.本科生做线性回归和主成分回归就够了,研究生还可以加随机森林回归,其方法足够人文社科领域的硕士毕业论文了. 案例背景 有八个自变量,['微博平台可信度', ...

  5. python 数据分析 实际案例-Python数据分析案例实战

    原标题:Python数据分析案例实战 至今我们网站已经开设了多个数据分析系列的课程,大部分都是基于算法思路来开展的,课程中着重点在于算法的讲授.软件的使用,案例只是辅助学习.然而很多学员反映,希望可以 ...

  6. 视频教程-Python数据分析案例实战 视频课程-Python

    Python数据分析案例实战 视频课程 计算机硕士,多年工作经验,技术和产品负责人. 多年推荐系统/NLP/大数据工作经验. 负责公司多个AI项目产品落地,包括文本分类.关键词抽取.命名实体识别.对话 ...

  7. python数据分析实战-Python数据分析案例实战(慕课版)

    基本信息 书名:Python数据分析案例实战(慕课版) :59.80元 作者:王浩,袁琴,张明慧 著 出版社:人民邮电出版社 出版日期:2020_06_01 ISBN:9787115520845 字数 ...

  8. Python数据分析案例24——基于深度学习的锂电池寿命预测

    本期开始案例较为硬核起来了,适合理工科的硕士,人文社科的同学可以看前面的案例. 案例背景 这篇文章是去年就发了,刊物也印刷了,现在分享一部分代码作为案例给需要的同学. 原文链接(知网文章 C核): 一 ...

  9. sklearn的系统学习——随机森林分类器与随机森林回归器(含有python完整代码及案例)

    目录 集成算法 sklearn中的随机森林 随机森林分类器 随机性参数 属性 案例代码 随机森林回归器 案例代码 在前面的内容中,已经对决策树解决分类回归问题分别做了阐述,今天走进随机森林的世界. 什 ...

  10. 基于python的随机森林回归实现_PYTHON | 随机森林实战(代码+详解)

    大家好,我是菜鸟君,之前跟大家聊过R语言的随机森林建模,指路 R语言 | 随机森林建模实战(代码+详解),作为刚过完1024节日的码农算法工程师来说,怎么可能只会用一种语言呢?今天就来说说Python ...

最新文章

  1. RandomizedSearchCV 和GridSearchCV
  2. wps分析工具库如何加载_关键词数据分析到底如何做?用这个工具比指数好
  3. 日结问题解决思路和方式
  4. 60-40-040-序列化-Twitter 的Avro序列化
  5. 纯新手DSP编程--5.22-总结
  6. 1. crontab 简介
  7. python web自动化代码_Python + selenium 自动化框架介绍+全代码附上
  8. 数据结构实验3-带头结点的单链表
  9. 3 个主流 Java 微服务框架,各有特色
  10. 取消参考文献自动编号_毕业论文给尾注加[ ]及删除自动编号
  11. [Windows] 迅雷 无修改 无限制 无视封锁
  12. c51语言如何按位异或,51单片机教程:单片机逻辑与或异或指令详解
  13. Android PC同步软件 类似 apple 的 itunes
  14. Delphi控件-复合控件
  15. java kml_当Java遇上KML
  16. 2天,我把MySQL索引、锁、事务、分库分表撸干净了!
  17. kali linux安装mysql_kali linux 上安装MySQL 8.0.16
  18. 计算机应用基础实训室,计算机应用基础实训
  19. 监察对象是否应该包含机关本身
  20. react 打包体积过大_彻底解决 webpack 打包文件体积过大

热门文章

  1. matlab hspice联合仿真,matlab hspice
  2. dorado7时间格式调整
  3. 冲突域和广播域的隔离与扩展
  4. 逻辑回归算法——乳腺癌检测
  5. VirtualBox Share Folder配置
  6. MySQL数据库主从双向同步
  7. 图像Radon变换与傅里叶变换(matlab)
  8. C++ 泛型编程-模板
  9. 向日葵显示无法连接到服务器,请修复电信卡使用向日葵远程无法连接服务问题!!!...
  10. 数控dda法直线插补程序c语言,DDA法直线插补