查看原文
其他

前沿: 统计学习的随机森林算法详解, 通过示例, code和结果全方位解析!

计量经济圈 计量经济圈 2022-05-11

凡是搞计量经济的,都关注这个号了

稿件:econometrics666@126.com

所有计量经济圈方法论丛的code程序, 宏微观数据库和各种软件都放在社群里.欢迎到计量经济圈社群交流访问.

关于机器学习在计量分析中的应用,各位学者可以参阅如下文章:1.Python中的计量回归模块及所有模块概览2.空间计量软件代码资源集锦(Matlab/R/Python/SAS/Stata), 不再因空间效应而感到孤独3.回归、分类与聚类:三大方向剖解机器学习算法的优缺点(附Python和R实现)4.机器学习第一书, 数据挖掘, 推理和预测5.从线性回归到机器学习, 一张图帮你文献综述6.11种与机器学习相关的多元变量分析方法汇总7.机器学习和大数据计量经济学, 你必须阅读一下这篇8.机器学习与Econometrics的书籍推荐, 值得拥有的经典9.机器学习在微观计量的应用最新趋势: 大数据和因果推断10.机器学习在微观计量的应用最新趋势: 回归模型11.机器学习对计量经济学的影响, AEA年会独家报道12.机器学习,可异于数理统计13.Python, Stata, R软件史上最全快捷键合辑!,14.Python与Stata, R, SAS, SQL在数据处理上的比较, 含code及细致讲解15.Python做因果推断的方法示例, 解读与code16.文本分析的步骤, 工具, 途径和可视化如何做?17.文本大数据分析在经济学和金融学中的应用, 最全文献综述18.文本函数和正则表达式, 文本分析事无巨细19.最全: 深度学习在经济金融管理领域的应用现状汇总与前沿瞻望, 中青年学者不能不关注!20.Top前沿: 农业和应用经济学中的机器学习, 其与计量经济学的比较, 不读不懂你就out了!21.最新: 运用机器学习和合成控制法研究武汉封城对空气污染和健康的影响! 22.Top, 机器学习是一种应用的计量经济学方法, 不懂将来面临淘汰危险!

前面,我们引荐了机器学习方法出现在AER, JPE, QJE等顶刊上了!”,前沿: 机器学习在金融和能源经济领域的应用分类总结,③Lasso, 岭回归, 弹性网估计在软件中的实现流程和示例解读”,④回归方法深度剖析(OLS, RIDGE, ENET, LASSO, SCAD, MCP, QR),⑤高维回归方法: Ridge, Lasso, Elastic Net用了吗,⑥Lasso回归操作指南, 数据, 程序和解读都有,⑦七种常用回归技术,如何正确选择回归模型?,⑧共线性、过度/不能识别问题的Solutions,⑨计量经济学与实验经济学的若干新近发展及展望,⑩计量经济学新进展,供参考等,在学术同行间引起巨大反响。

机器学习方法逐渐在经济管理等社科类顶刊,如AER,JPE,QJE,JOF等期刊上出现了。为了进一步了解机器学习在国外最新应用动向,我们为各位学者奉上“统计学习的随机森林算法”。对机器学习方法感兴趣的学者,建议认真研读这篇非常重要、全面的文章。
正文

关于下方文字内容,作者:郭馨雨,北京师范大学-香港浸会大学联合国际学院,通信邮箱:terence9709@gmail.com

作者之前的文章英诺丁汉大学校长为你讲解逐年PSM匹配-DID方法的操作, 并配上自己写的一篇范文!

Random forests (Breiman, 2001, Machine Learning 45: 5–32) is a statistical- or machine-learning algorithm for prediction. In this article, we introduce a corresponding new command, rforest. We overview the random forest algorithm and illustrate its use with two examples: The first example is a classification problem that predicts whether a credit card holder will default on his or her debt. The second example is a regression problem that predicts the logscaled number of shares of online news articles. We conclude with a discussion that summarizes key points demonstrated in the examples.

摘要

随机森林(random forest)是机器学习任务的常用方法,它利用多个树分类器进行分类和预测。一些研究发现,相比于OLS回归,随机森林算法能得到更高的调整R方(Liu et al., 2017);同时也有文献指出,在进行二值分类时,随机森林的准确度高于逻辑回归(Butaru et al., 2016)。
本文主要介绍随机森林在STATA中的相关命令:rforest。文章的结构如下:前两部分回顾方法论及STATA语法;第三部分以信用卡违约为例,比较随机森林与逻辑回归的结果;第四部分以新闻热词为例,比较随机森林与线性回归的结果;最后做出讨论。

方法论

在讨论随机森林前,首先要理解树状结构。基于树的模型会根据给定准则,递归地将数据集分割为两组,直到满足预定的停止条件。而在所形成的决策树底部,那些没有连接到其他子节点的节点,就是所谓的叶节点(leaf nodes/leaves)。
图1展示了二维子空间中的递归分割,在此过程中,输入空间每次都在平行于坐标轴的方向上被分割。图中的第一次分割发生在时。然后,再对两个子空间进行划分:左分支在时分裂;右分支首先在时分裂,其后它的一个分支在时再次分裂。图2则用图形展示了相同的分裂结果。

根据分裂与停止标准的不同,决策树可以被分为分类树和回归树。分类树是当预计结果为离散类型时使用的概念(如逻辑回归);回归树是当预计结果为实数时使用的概念(结果是连续的)。
分类问题的一个常见分裂准则是熵(entropy),熵的定义如下:

其中c是结果离散变量种类的数目,为每个种类的先验概率。根据信息增益理论(information gain theorem),我们最大化熵,以在决策树的每次分裂中获得最多的信息。而对于回归问题,常用的分裂准则是每个内部节点的均方误差(mean squared error)。
决策树的一个缺点是它容易过拟合(overfitting),这意味着模型遵循训练集的特征过于紧密,以至于在新的数据集(即测试集)上表现不佳。过拟合问题导致预测精度变低,这种模型在新数据集上的预测精度也被称为泛化精度(generalization accuracy)。
提高泛化精度的一种方法是只考虑观测的子集,构建许多单独的树,并对子决策树的判断结果投票。这个思想首先在1995年被Tin Kam Ho提出,随后在2001年正式地被Breiman & Cutler以随机森林算法呈现。随机森林模型是一种基于大量决策树的学习算法,也就是说,其输出的类别由子决策树输出类别的众数而定。进一步地,子决策树建立在引导样本而不是原样本上,这体现了Breimans的引导聚集算法(bootstrap aggregating)(常被称作装袋算法,bagging),它可以减少过拟合问题。随机森林即由Ho的随机决策森林(random decesion forest)和Breimans的装袋算法集合而来,其算法如下:

个体决策树很容易被解释,但随着子决策树的聚合,随机森林不再具备这种可解释性。作为回报,随机森林往往在预测任务上表现得更好。同时,与决策树相比,随机森林算法能准确地估计错误率,而且错误率总是随着子树数量的增加而收敛。
在训练过程中,随机森林的误差近似于袋外误差(out-of-bag error, OOB error)。我们知道,每棵子决策树都建立在不同的引导样本上,而引导样本会随机舍弃约三分之一的观测值。这些被舍弃的观测值称为OOB样本。对于已经生成的随机森林,将OOB样本代入随机森林分类器,并将结果与正确的分类相比较。进而,OOB error =分类错误的数目/OOB样本的数目。调参的关键因素就是要让OOB error最低。
随机森林也可以对特征的重要性进行排序,帮助我们更好地理解复杂模型。为了度量特征的重要性,首先使用训练集训练一个随机森林模型,在训练的过程中记录下每个数据点的OOB误差,然后在整个森林上进行平均。接着,打乱需要被度量的第j个特征的值,并重新计算打乱后数据的OOB误差,则打乱前后OOB误差差值的平均即为第j个特征的重要性分数。在STATA的实现中,所有的重要性分数均被除以最高分以达到标准化,这样,最重要变量的重要性总是100%。

语法

STATA中的随机森林语法如下:
rforest  depvar  indepvars  [if]  [in] , [ options ]
其中options包括
Model                                                    
iterations(int):设置迭代(树)的数量,默认为100
numvars(int):设置用作随机分析的特征数,默认为自变量个数的平方根
Tree Size                                              
depth(int):设置决策树的最大深度,默认无限制
lsize(int):设置叶子节点最少样本数,默认为1
variance(real):设置节点方差的阈值,如果某节点的方差小于该值,则该节点不再生成子节点。默认为。此选项只对回归适用。
Other                                                        
seed(int):设置种子数,默认为1
numdecimalplaces(int):设置计算精度,默认最小为小数点后5位
后续估计命令如下:
predict  {newvar | varlist | stub*}  [if]  [in] , [ pr ]

例1:信用卡违约

例一研究了信用卡违约概率的预测精度,数据包括1个响应变量,22个解释变量,共30000个观测值。其中响应变量为0表示未违约,为1表示违约。22个解释变量中,有10个为描述性别,教育,婚姻情况等的虚拟变量,余下12个为信用额度、往期账单金额等连续变量。在这个例子中,我们将研究影响信用卡违约预测准确度的主要因素,并将使用随机森林和逻辑回归得到的预测精度进行对比。

模型设定与调参

首先我们将数据点随机排序,以保证训练数据的随机性。同时设置种子值,以获得可重复的结果,然后,将数据集平均分为两个子集:50%作为训练集,50%作为测试集。因为我们的数据集足够大,所以不用考虑均分样本会造成观测值不足的问题。将数据的随机化确保了训练集包含所有类别的数据,同时,它也消除了潜在的模型对数据排序的依赖。最后,由于我们设定了四种婚姻状态,所以采用四个虚拟变量对此进行描述。下图展示了代码。

接下来,我们调整超参数以最大化测试精度。具体来说,需要调整的是迭代次数iterations ()和变量数目numvars ()。
下面的代码使用迭代次数和变量数目的函数计算OOB误差。迭代次数从10开始,每次增加5,直到500为止。我们同时计算OOB error和validation error来确定最佳模型。为了简单起见,在这里设置特征数量为1,即numvars (1)。

通常,机器学习中的参数调整需要网格搜索,即对指定的超参数子空间进行穷举搜索。然而,在本例中,因为随机森林OOB error在迭代次数足够大之后收敛,所以我们可以先将迭代次数设置得足够大,这样我们调整特征数量时就不必再考虑它的影响。为了说明OOB error和validation error是如何随着迭代次数的增长而趋于相似的,如代码所示,我们迭代地调用随机森林。迭代次数从10开始每次增加5,直到它达到500。下图将结果进行了可视化。

在迭代次数足够大的时候,OOB error和validation error都稳定在19%左右。因此,我们可以将迭代次数设定为500。
注意,虽然原则上随机森林算法可以在每次迭代时都输出OOB error,但是STATA使用的Weka算法只会输出迭代过程最终的OOB error。这意味着,算法会运行k次随机森林来确定迭代次数k。为了提高效率,我们要合理设置迭代的最小值、最大值以及增量值来观测OOB error的趋势。
接下来我们调整特征数量,即超参数numvars ():

在上图的散点图中,我们可以看到使误差最小需要多少个变量。下面的代码提供了一种更简洁的方法,它使用frame命令,可以自动输出最小误差和相应的变量个数(需要STATA 16)。

我们看到,与散点图的结果相同,在特征数量等于18时,有最低的validation error 0.1824。因此我们将numvars (18)作为调整的结果。

最终模型与结果

在前一节中,我们已经选择了超参数iterations (500)和numvars (18)。在500次迭代后OOB error已经收敛,但出于谨慎起见,我们在模型中将迭代次数设置为1000。下面的代码给出了最终模型和预测误差:

最终的OOB error为18.25%,大于上节最后提到的实际预测误差18.24%。
我们还想确定哪些因素在预测中更为重要。随机森林是一个黑箱,它没有告诉我们预测是如何实现的。重要性分数则为我们提供了一些线索,下面的代码估计了各变量标准化后的重要性分数。

五个最重要的影响因素分别是性别、已婚、每月信用额度、教育和单身。我们还可以看到,与其他因素相比,每月账单金额(BILL_AMTn)并没有特别重要。然而,令人惊讶的是,每月信用额度(LIMIT_BAL)是随机森林模型中第三重要的变量。我们可以将两种情况下信用额度的直方图叠加起来,以获得更多信息

从上图中可以看出,违约的持卡人拥有更低的信用额度。值得一提的是,重要性分数度量变量x对模型的贡献,但它取决于所有变量的集合X。当一个变量被剔除时,与之相关的其他变量的重要性会上升。

与逻辑回归的比较

预测信用卡违约也可以使用逻辑回归模型,下面的代码使用相同的数据和分割方法。

使用逻辑回归得到的预测误差为18.86%,而我们从随机森林得到的最佳结果为18.25%。这个差异虽小,但在防止信用卡违约方面仍然有意义。

例2:新闻热词

例二运用随机森林进行回归。我们使用的数据集涵盖了39644个观测值,一个响应变量和58个解释变量。在这个问题中,研究问题是在线文章中“shares”一词出现的数量,它是一个连续变量,并受到诸如文章是否在周末发表、文章是否存在某些关键词、文章中图片数量等的影响。

模型设定与调参

与例一一样,首先将数据设置好并随机化。

本质上讲,因为OOB error随迭代次数的增加而收敛,所以当迭代次数被设置为足够大时,我们就可以认定OOB error与validation error的变化完全由超参数numvars ()的改变引起。为了选择迭代次数,我们再次从10开始,以5的增量将其增加到100。由于运行时内存的限制,100是可以在CPU上运行该数据集的极限。在循环结束时,我们用测试集的数据得到实际的均方根误差(root mean squared error, RMSE),并将其与OOB error绘制在一起。

在图中可以看出,OOB error和 validation RMSE在大约第80次迭代时开始收敛。在100次时取得最小值,我们将这个结果应用到最终模型中。
下面我们还是使用两种代码确定特征的数量。

上图并没有为我们提供关于最小值的明确信息,所以我们再使用frame命令自动计算特征数量:

结果显示,当特征数量为6时,validation RMSE取得最小值0.8570。我们注意到,对于这个模型,结果对于变量的数量并不敏感,numvars (6)与其他数值相比差别不大。这种情况并不是很常见。

最终模型与结果

最终模型的迭代次数为100,特征数量为6:

最终的OOB error为0.6436,略低于测试数据计算的RMSE 0.8570。为了了解哪些变量影响预测精度,我们使用与例一相同的方法生成重要性分数图。由于此数据集包含58个解释变量,我们设置仅展示重要性分数在40%以上的结果。

从图中可以看出,文章是否发布在周末是最重要的预测指标。其他重要的解释变量包括新闻频道类型和关键词个数。为了获得更多关于log形式的“shares”数量与周末的关系,我们绘制下面的直方图来说明关系。

容易看出,logShares的分布在周末与平日不同,这种经验分布的明显改变有助于解释为什么文章是否发布在周末这个解释变量在模型中最为重要。

与线性回归的比较

下面我们使用同样的数据集和变量进行线性回归,由于自变量过多,这里将回归的结果省略(详细结果见原文)。

上面结果中scalar e(rmse)的值0.87008是通过训练数据计算的RMSE。为了比较线性模型与随机森林,我们使用以下命令计算测试数据的RMSE:

从结果可以看到,均方误差为40.90379,这意味着RMSE等于,远远大于根据训练集得出的结果。与随机森林得到的误差相比,线性回归的RMSE也显然更高。这强烈暗示了在这个例子中,随机森林算法优于线性回归。

讨论

分类和回归的实例证明,随机森林模型通常比相应的参数模型(如逻辑回归与线性回归)具有更高的预测精度。特别是,随机森林模型也适用于预测比二值结果更复杂的多项结果。误分类(misclassification)是一个相当不敏感的指标,当将数据分割从10%,90%改变为40%,60%时,分类结果仍然不变。随机森林对于逻辑回归的改善来源于其非线性或自交互作用,换句话说,当模型含有大量虚拟变量时,改进的程度就会变小。在我们的经验中,社会科学研究中往往包含许多虚拟变量,有研究发现SVM并不能改善逻辑回归。同样地,在例一中随机森林对逻辑回归的改进也并不是很大。
超参数的选择取决于哪个值可以给出最低的测试误差。在实践中,当没有足够的数据支撑训练集与测试集的分割时,我们可以使用OOB error来替代。如前所述,OOB error是对实际测试误差的无偏估计,所以可以单独使用它作为调参的标准。
尽管本文的两个例子只调整了迭代次数和特征数量这两个超参数,但是根据数据集和软件的不同,其他参数如树的最大深度和叶节点包含的最少观测值等也值得考虑。
下面这些短链接文章属于合集,可以收藏起来阅读,不然以后都找不到了。

2.5年,计量经济圈近1000篇不重类计量文章,

可直接在公众号菜单栏搜索任何计量相关问题,

Econometrics Circle




数据系列空间矩阵 | 工企数据 | PM2.5 | 市场化指数 | CO2数据 |  夜间灯光 | 官员方言  | 微观数据 | 内部数据计量系列匹配方法 | 内生性 | 工具变量 | DID | 面板数据 | 常用TOOL | 中介调节 | 时间序列 | RDD断点 | 合成控制 | 200篇合辑 | 因果识别 | 社会网络 | 空间DID数据处理Stata | R | Python | 缺失值 | CHIP/ CHNS/CHARLS/CFPS/CGSS等 |干货系列能源环境 | 效率研究 | 空间计量 | 国际经贸 | 计量软件 | 商科研究 | 机器学习 | SSCI | CSSCI | SSCI查询 | 名家经验计量经济圈组织了一个计量社群,有如下特征:热情互助最多前沿趋势最多、社科资料最多、社科数据最多、科研牛人最多、海外名校最多。因此,建议积极进取和有强烈研习激情的中青年学者到社群交流探讨,始终坚信优秀是通过感染优秀而互相成就彼此的。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存