危明铸 麦伟杰 袁峰
摘 要: 党的十八大三中全会提出逐步简政放权,要求做到便捷、规范、宽进严管,这引起市场监管主体职责发生变化,监管对象呈现井喷式增长。传统的监管方法和手段已不能适应改革后的监管需要,监管方法和手段必须由传统向信息化、智能化等方式转变。本文根据广东省广州市有关企业的真实数据对其展开运行风险研究,首先运用随机森林算法对原始数据进行变量选择以便形成一个简化、高效的数据集,然后分别应用决策树、集成法、人工神经网络分别对数据集进行建模及分析,最后比较各种模型的优劣,并深入研究各性能指标的意义。通过模型可以有效地指导行政人员对异常企业进行重点监管,实现市场监管的智能化和精细化。
关键词: 随机森林;决策树;集成法;人工神经网络
中图分类号: TP181 文献标识码: A DOI:10.3969/j.issn.1003-6970.2019.08.007
本文著錄格式:危明铸,麦伟杰,袁峰,等. 基于机器学习的企业运行风险研究[J]. 软件,2019,40(8):2937
【Abstract】: The Third Plenary Session of the 18th National Congress of the Communist Party of China proposed to gradually simplify administration and decentralization, and to ensure that it is convenient, standardized, lenient. This has caused changes in the responsibilities of market regulators, and the regulatory objects have shown a spurt of growth. Based on the real data of relevant enterprises in Foshan city, Guangdong Province, this paper conducts operational risk research. Firstly, random forest algorithm is used to select variables from the original data in order to form a simplified and efficient data set. Then, the decision tree, ensemble methods and artificial neural network are apply to model and analyze the dataset respectively. Finally compares the advantages and disadvantages of the various models, and in-depth study of the significance of each performance indexes. Through the model, it can effectively guide the administrative staff to focus on abnormal enterprises and realize the intellectualization and refinement of market supervision.
【Key words】: Random forest; Decision tree; Ensemble methods; Artificial neural network
0 引言
随着市场主体“宽进严管”改革的不断深入,国务院相继颁发了《国务院办公厅关于推广随机抽查规范事中事后监管的通知》(国办发〔2015〕58号)[1]、《国务院关于“先照后证”改革后加强事中事后监管的意见》(国发〔2015〕62号)[2]和《国务院关于印发2016年推进简政放权放管结合优化服务改革工作要点的通知》(国发〔2016〕30号)[3]等相关文件,要求大力推广“双随机—公开”抽查工作,市场监管模式也由“巡查制”改为“抽查制”。但目前仍存在一些不足之处,具体表现在:
(1)市场主体规模庞大,难以把握重点监管 对象。
(2)双随机抽查的靶向性不强。
(3)市场主体监管风险预判能力不强。
鉴于上述种种不足及企业监管的必要性、迫切性,许多学者们把目光转向到机器学习上。虽然政府不断加强“事中事后”监管,但诸如企业信息不透明、企业运行存在风险等成为当前整个社会经济发展过程中的突出问题,且目前仍缺乏对企业运行状况科学的评估模型和预警方法。在有限的时间和人力资源等约束条件下,对不同企业进行具针对性的服务和监管,必须充分发挥“机器学习+大数据”相关技术的作用。
国外,Odom等人[4]早在1990年把人工神经网络应用到风险评估上,并将其与传统的多元回归分析比较,实验表明人工神经网络具有更优越的性能;Fan运用支持向量机(SVM)甄选与企业破产有影响的财务变量[5];Prinzie等人把逻辑回归(Logistic)引入随机森林算法并对其进行优化以及改进,提出一种新型的随机森林算法,然后将改进的算法应用于预测公司的信用风险[6];Lin F等人研究随机森林与KMV模型结合可能性,提出将违约距离作为随机森林的输入,模型对企业信用风险预测性能更优越[7];Traskin等人利用随机森林具有筛选重要变量的特征,提出将其应用在保险公司偿付判别中[8];Tanaka、Kinkyo等人把随机森林算法应用在OECCD国家濒临破产的银行对其进行危机风险预测[9]。国内,张大斌、周志刚等人采取差分进化算法自动聚类模型对我国上市公司展开信用度评价,并与遗传算法、决策树、BP神经网络模型进行比较,结果表明该模型具有更高的准确性[10];方匡南,范新妍等人指出传统的Logistic回归建立企业运行风险预警模型效果不够好,提出了基于网络结构关系的Logistic模型[11];闫炳琪等人选取我国深沪两市共74家公司2013-2014年的财务报表数据,通过主成分分析降维得到浓缩的5个主成分因子,然后将5个因子作为自变量建立Logistic回归模型[12];胡贤德、曹蓉等人借助群智能萤火虫(GSO)算法,提出一种基于改进离散型萤火虫(IDGSO)算法,并将其引入到BP神经网络用于微企运行风险评估[13];杨俊等人使用Gradient Boosting算法对中国建设银行上海分行的企业贷款客户数据建立模型,并和逻辑回归以及专家规则进行横向比较,结果表明Gradient Boosting算法的模型要优于另外两种模型[14];熊正得等人利用因子分析法对深沪A股上市的制造企业财务数据构建风险评价体系,并在违约 测度阶段应用Logistic回归对不同组样本进行测 度[15];周战超通过对企业的贷款数据进行实证分析,建立基于K-均值聚类的工业企业信用风险评价模型[16]。此外,机器学习还在不同的领域中有广泛的应用和研究[17-21]。
根据上述关于企业运行风险评价研究的总结,本文运用随机森林作为对涉企数据进行变量甄选,然后将决策树、集成法以及神经网络分别应用到企业运行风险建模中,比较和分析三个模型的性能,并将其应用到企业风险预测。
1 相关技术
1.1 决策树
决策树是一种监督学习算法(有一个预定义的目标变量)主要用于分类问题。如图1,它适用于离散型(分类)和连续型(回归)输入和输出变量,它会自动识别最重要的变量并且计算该变量的信息增益来划分数据集,既可以做分类又可以做回归。构造决策树的关键步骤是分裂属性,即在某个节点处按照某一特征属性的不同划分构造不同的分支,其目标是让各个分裂子集尽可能“纯”。所谓“纯”,就是让同一子集的数据拥有相同的属性,用“信息增益”(Information Gain)衡量。信息熵定量信息的大小,当节点的类别均匀分布时,熵值为1;当只包含一类时,熵值为0。决策树节点的“纯”就是根据信息熵来定义。从信息论知识中我们直到,期望信息越小,信息增益越大,从而纯度越高,不纯越小。
根据式(4)的值,选择信息增益(熵减)最大的属性划分集合S。
决策树算法伪代码如下:
输入:训练集集合D={(x1,y1),(x2,y2)…,(xm,ym)},属性集A={a1,a2,…,ak},函数TreeGenerate(D,A)
输出:以node为根节点的一棵决策树
生成节点node;
if D中样本全属于同一类别C then
将node标记为C类节点;return
end if
if A=Φ or D中样本在A上取值相同 then
将node标记为叶节点,其它类别标记为D中样本数最多的类;return
end if
从A中选择最优划分属性 ;
for 的每个值 do
为node生成一个分支;令Dv表示D中在 上取值为 的样本子集;
If Dv为空 then
将分支节点标记为叶节点,其它类别标记为D中样本数最多的类;return
else
以TreeGenerate(Dv,A\{a*})为分支节点
end if
end for
1.2 随机森林
随机森林(Random Forest)[22-23]是以决策树为基础的一种集成学习(Ensemble Learning)方法,从直观角度来解释,每棵决策树都是一个分类器(分类问题),对于一个输入样本,N棵树会有N个分类结果。而随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出,是一种Bagging思想[24],如图2所示。
本文将随机森林用于特征选择,其目标有两个:
(1)找出与因变量高度相关的特征变量;
(2)选择数目较少的特征变量并能够充分预测目标变量结果。
假如每次选择m个特征用于建模,步骤如下:
Step1: 初步估计和排序
a)对随机森林中的特征变量按VI(variable importance)降序排序;
b)确定删除的特征比例,从当前的特征变量中剔除相应比例不重要的特征,得到一个新的特征集;
c)用新的特征集建立新的随机森林,并计算特征集中每个特征的VI,并排序;
d)重复以上步骤,直到剩下m个特征值。
Step2: 根据Step1中得到的每个特征集及其建立起来的随机森林,计算对应的袋外误差率OOB(out-of-bag error)
Step3:把Step2中OOB最低的特征集作为选定为建模特征。
上述步骤中涉及特征值的重要性(VI)计算,在随机森林中VI的计算方法如下:
(1)对于随机森林中的每棵树,使用相应的袋外数据计算它的袋外误差率,记为OOB1;
(2)随机地对袋外数据的特征值(假如此时为X)假如噪音干扰(例如,随机改变样本在特征X出的值),再次计算它的袋外数据误差,记为OOB2;
(3)假设随机森林中有Ntree棵树,那么对于特征X重要性为 。如果给某个特征随机假如噪音之后,袋外的准确率大幅度降低,则说明该特征值对于样本的分类影响大,也就是说该特征为重要的。
此外,將随机森林用于特征选择还涉及到OOB的计算。我们知道,在构建每棵树时,对训练集使用了不同的bootstrap sample(随机且有放回地抽取)。所以对于每棵树而言(假设对于第k棵树),大约有1/3的训练实例没有参与第k棵树的生成,它们称为第k棵树的OOB样本,计算方法如下:
(1)对每个样本,计算它作为OOB样本的树对它的分类情况(每个样本都在所有的树中进行分类);
(2)然后以简单多数投票作为该样本的分类 结果;
(3)最后用误分个数占样本总数的比率作为随机森林的OOB误分率。
1.3 集成方法
集成方法指有策略地建立多个模型并将其组合一起,解决特定计算智能问题的过程。在这种方法可以扩展至任意学习器以建立集成模型,它生产多个分类器,然后将这些分类器的类别预测概率作为另一个分类器的输入特征,这样会提高预测的准确率。如图3所示。
图3中建立了三种不同的分类器,并使用它们的预测概率作为第四个不同分类器的输入,以对测试集作出预测。
1.4 人工神经网络
人工神经网络(ANN)是由具有适应性的简单单元组成的广泛并行互连网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。
神经网络学习的过程也是权重不断调整过程,其步骤如下:
(1)标准化输入变量在0和1之间;
(2)将网络权重的初始值设定为0或随机产生,通过各节点的函数来估计数据的目标变量值;
(3)比较实际值和估计值之间的误差,并根据误差值重新调整各权重的偏置;
(4)反复执行步骤2,直到实际值和估计值之间的误差最小,此时停止学习以获得最佳权重。
2 准备工作
2.1 数据抽取
本文通过政务信息共享平台归集的数据中抽取相关的数据集进行清洗整合,整理归集出可用于分析建模的有效数据。过程包括清洗转换历史检查结果表,关联融合企业基本信息与企业纳税信息表,从而得到企业特征值与检查结果的关联表,如图5所示。
(1)检查结果表清洗
从数据库中抽取企业的历史数据,如表1所以。
其中,“检查结果”是本次项目的预测目标,由于检查结果的数据是不规范的,需要进一步整理,如表2所示。
(2)企业数据表关联
本次项目建模中,我们把“检查结果”表、“企业基本信息表”、“企业纳税金额”表进行关联,使其关联后整合成一整表。
2.2 创建虚拟变量
神经网络的数据准备是非常重要的,因为所有的协变量和响应变量都必须是数值型。为此,本文把数据集中变量为分类(factor)型的数据创建虚拟变量。
虚拟变量(Dummy Variables)又称虚设变量或哑变量,用以反映质的属性的一个人工变量,是量化了的自变量,通常取值为0或1。引入虚拟变量会使模型变得更复杂,但对问题描述更简明,提高模型的精度,相当于将不同属性的样本合并,扩大了样本容量(增加了误差自由度,从而降低了误差方差)。
在模型中引入多个虚拟变量时,原则如下:
(1)如果模型有截距项
有m种互斥的属性类型,在模型中引入(m–1)个虚拟变量。
(2)如果模型无截距项
有m个特征,设置m个虚拟变量。
2.3 特征选择
在机器学习中,我们经常面临这样一个问题:我们手头上拥有数据集往往含有很多的自变量,甚至有些数据集的自变量数(列)比观察值数目(行)还要多。这种情况需要对特征进行选择,即从原有的特征中删除影响不大或共线变量,保留那些对目标变量(因变量)解释好或者影响大的重要变量。这样一方面可以提高建模过程中的运算速度;另一方面对模型的解释性更直观,减低拟合模糊性。
本文运用随机森林(RF)对3.1小节中抽取的原始数据(共有18个特征)进行特征选择,具体情况如下:
(1)改变随机数种子,算法运行次数k=5,只选择那些在k次运行中都标记为“Confirmed”的特征;
(2)将训练数据分为n=10折,在没折数据上分别进行算法迭代,然后选择那些在所有n折都标记为“Confirmed”的特征;
(3)迭代次数it=100。
运行结果如图6所示。
從图6可知,应用RF对原始数据进行特征选择后,特征由原来的18个缩减到12个(因变量除外)。可以用新的特征进行更深入、更有意义的数据探索,提高建模工作效率及运行速度。
3 建模及分析
本文基于广州市工商行政等有关部门的真实数据,分别应用决策树、集成方法(决策树、梯度提升、元多自适应回归样条)、人工神经网络对其建立预测模型(以变量“检查结果”为因变量),并对模型的性能分析比较,深入研究企业运行风险预测。
建模环境如下:
处理器为Intel(R) Core(TM) i5-4590 CPU@ 3.3 GHz;内存为8 G;系统为64位Windows 7;运行环境为R x64 3.4.3以及RStudio。
数据集特征维度:
数据集FSH_data拥有7988行(观察值);13个变量(含因变量)。后期添加数据行继续进行研究。
3.1 基于决策树建模
3.1.1 参数设置
参数cp表示树的复杂度,每一步分裂,模型的拟合度都会提高,但复杂度也会增加,初始设置为0.01;参数method表示构建树过程中所选择的方法,一般有“连续型-anova;离散型(分类)-class,设置为class;参数minsplit表示节点中的样本数量小于某个给定界限,设置为20;参数maxdepth表示树的深度,设置为30。
3.1.2 数据分配
将数据集按7∶3比例分成两个子集,其中训练集占7成,测试集占3成,并采用十折交叉法对其验证,如表8所示。
3.1.3 建模结果
模型tree.model的详细性能如图7所示。
图7(a)为模型tree.model性能参数描述。其中,cp为树的偏差参数,也叫复杂度参数,在树的构建过程中,如果偏差(复杂度)减少到某一个给定的临界值,树的构建将结束,从(a)看到,cp从0.165到设置的0.01,cp越小,模型越复杂,可读性越差,所以要适当控制cp的值;nsplit为分裂属性结点数,从结果知道,树分裂到3个节点结束;rel error为相对误差(与根节点比较),此处值为0.77,对应cp=0.01;xerror和xstd是应用十折交叉验证的估计误差和标准差,这里分别是0.77、0.016。
图7(b)为模型tree.model交叉检验(xerror)与复杂度(cp)的曲线图,最优的决策树的交叉验证误差为0.77(红色虚线),对应的cp为0.01,分裂节点为3个,这与图7(a)保持一致。
图7(c)为模型tree.model的混淆矩阵,本文将混淆矩阵的各项指标作为评价模型性能。其中“Accuracy”表示模型分类的准确率,有一个95%的置信区间(0.7295,0.7899),其准确率为76%,从数值看表现不错;“Kappa”是衡量模型分类一致性参数,取值范围为0~1,值越大表示模型的分类效果与数据的真实值越一致,当0.4 其中,Sensitivity称之为“灵敏度”,即“召回率”,用TPR=TP/(TP+FN)表示,指所有正例中被分对的比例,衡量分类器对正例的识别能力,此出正例为“不正常”,从图中看到模型tree.model识别“不正常”(正例)类别能力为38.6%,表现欠佳;Specificity称之为“特异度”,用TNR=TN/(FP+TN)表示,指所有负例中被分对的比例,衡量分类器对负例的识别能力,此处的负例为“正常”,而且从图中看到,模型tree.model识别“正常”(负例)类别能力为93.6%,表现甚佳。 通过图7各项数值指标看到,虽然模型tree.model的预测准确率为76%,正确识别负例的概率为93.6%,且P-Value=5.652e-07显著,但其Kappa值及Sensitivity值表明模型的整体性能表现一般,有待提高。 3.2 基于集成方法 3.2.1 参数设置 本文将分类算法决策树、梯度提升、多元自适应回归样条组合形成一个MLR集成方法,建立一个强分类器ensemble.model。基础学习器base.learners设置为learns;超级学习器super.learner设置为classif.logreg;预测类型predict.type设置为prob;学习方式mothod设置为stack.cv。 3.2.2 数据分配 为了公平比较,数据集的划分与表8一致,此外,要为划分的训练集创建task对象及组合各个分类算法: FSH_data.task<-makeClassTask(id=广州企业, data=train,target=type) base<-c(‘classif.rpart,classif.boosting,classif.earth) 3.2.3 建模结果 模型ensemble.model的详细性能如图8所示。 图8(a)为模型ensemble.model的混淆矩阵,与图7(c)相比可以看到各项指标参数都有所提高。例如,准确率(Accuracy)从76%到78.7%提升,其置信区间为(0.7721,0.8015);Kappa值从0.386到0.57提升,一致性处于“可接受”水平;灵敏度(Sensitivity)、特异度(Specificity)也有所提升,分别为0.65、0.93,对比模型tree.model可知,模型ensemble.model在识别“不正常”(正例)类别能力提高明显,而识别“正常”(负例)类别能力与模型tree.model相当,且P-Value=2.2e–16表明结果更加显著。 图8(b)为模型ensemble.model的ROC曲线,它是反映Sensitivity(灵敏度)和Specificity(特异性)连续变量的综合指标。理想情况下,TPR(敏感度)应该接近1,FPR(1-特异度)应该接近0。对于一个分类器,ROC曲线上的每一个点对应于一个threshold,比如threshold最大时,TP=FP=0,对应于原点;threshold最小时,TN=FN=0。另外,ROC曲线下方图形围成面积为AUC=0.764,说明模型ensemble.model有预测价值(注:AUC值越大,表示模型分类性能越优)。 综合上述可知,利用集成方法建立的模型极大地提升了分类器的预测。对于结果,我们可以从直观理解为:如果把决策树、提升法、多元自适应回归样条各自看成专家,那么,集成方法即为专家们的智慧组合。 3.3 基于人工神经网络 3.3.1 参数设置 本小节应用神经网络对FSH_data数據集建立预测模型,并通过调节一些参数逐步提高其性能。参数说明如下: 3.3.2 数据分配 为了公平比较,数据集的划分与表8一致,此外,要为划分的训练集创建task对象及组合各个分类算法,由于因变量(检查结果)是字符串的factor型,需要把其转换成1/0数字的factor型: FSH_data$检查结果<- ifelse(FSH_data$检查结果==不正常,1,0) 另外,还要按3.2小节的方法为数据集中非数值部分创建虚拟变量(因变量除外)。 3.3.3 建模结果