摘要
本文的主要工作是运用数据挖掘的相关技术对申请贷款的客户的大量数据进行数据挖掘,发现隐藏在大量数据中的隐含模式,最终得到风险评估模型。本文的内容主要分为数据获取与探查、数据预处理、模型建立和结果分析与应用四个部分。在模型建立的过程中使用了SAS企业数据挖掘模块,基于决策树、回归和神经网络的方法, 充分利用已有数据建立模型, 对申请贷款客户进行科学归类, 从而帮助金融机构提高对贷款信用风险的控制能力。
关键词:SAS 分类技术 数据挖掘 预测 贷款风险评估
目录:
金融是现代经济的核心,各类金融机构则是现代金融的支柱。各类金融机构在社会经济发展过程中, 发挥着筹集融通资金、引导资产流向、提高资金运用效率和调节社会总需求的作用。中国加入WTO后, 中外金融机构的竞争日益激烈, 中国商业银行必须加快改革步伐, 尽快打造自己的核心竞争力。但是中国金融机构的信贷资产质量较差, 不良贷款的规模大、比例高, 严重阻碍中国金融业的发展。有效控制不良贷款信用风险已经成为中国金融机构面对的主要课题。
目前国际银行业对不良贷款信用风险评估的方法主要采用的是古典分析法和多元统计法[ 1-2] 。古典分析法是指银行经营者依赖一批训练有素的专家的主观判断对贷款人进行信用分析。多元统计分析的基本思想是根据历史累积样本建立数学模型, 并对新样本发生某种事件的可能性进行预测的方法,具体包括线性概率模型、LOGIT法、PROBIT法以及判别分析法(MDA)[ 1] 。巴塞尔委员会于2001 年1月公布了《新巴塞尔资本协议》草案, 新协议给出了两种计量信用风险的方法, 即标准法和内部评级法(IRB), IRB法对标准法中的风险加权系数进行了修正。新协议允许银行使用内部评级方法, 使新协议的监管规则有一定的灵活性。但目前, 金融界使用最多的两个信用风险评估模型是信用度量制(Credit Metrics)模型和KMV模型。Credit Metrics是J.P. Morgan于1997年开发的一种基于VAR方法的信贷风险管理模型 [3] 。所谓VAR就是衡量一项资产或者负债在一定时间内、在一定的置信水平下其价值的最大损益额。Credit Metrics是一种盯市(MTM)模型, 认为如果信用资产的信用等级发生了变化, 就产生了信用损失的可能性, 这种损失是多状态的, 不只是违约和不违约两种状态。KMV模型是KMV公司利用期权定价原理, 提出了以预期违约频率为核心的信用风险管理模型。KMV模型将资产的状态分为违约和不违约两种, 信用损失只发生在违约的时候。而且KMV模型有一个核心的假设, 就是当公司的资产价值下降到一定程度之后, 公司就会对其债务违约。由于受样本数量限制, 国内已有学者对信用风险评估方法进行研究, 着重研究某一具体方法在信用风险评估中的应用。王春峰等[ 4-7] 运用线性判别法、LOGIT法、遗传规划模型、神经网络模型, 以及距离判别法与神经网络方法相结合的组合预测法对信用风险评估方法作了研究。施锡铨等[ 8] 运用线性多元判别方法对上市企业的信用风险评估进行了研究, 得出评价上市企业信用风险水平的线性判别模型。
以上所述方法虽然被广泛应用, 但是它们只是针对某一方面如财务, 进行分析建模, 不能够充分利用有关客户和信贷产品的大量且全面的信息。在信贷风险评估中, 对信用风险的评价, 不仅要考虑贷款者的财务能力, 还要考虑贷款者所需求产品的信息等各方面因素, 仅靠单一指标的评价体系不足以对信用风险予以充分揭示。因此, 研究如何从贷款样本数据中挖掘更丰富的信用信息, 建立更完备的信用风险评估模型将成为一种必然。本文使用了SAS企业数据挖掘模块,基于决策树、回归和神经网络的方法, 充分利用已有数据建立模型, 对申请贷款客户进行科学归类, 从而帮助金融机构提高对贷款信用风险的控制能力。
本文的实验数据获取于数据堂,来源于融360。融360是中国最大的网络贷款平台,平台的一端是数亿的有借款需求的小微企业和个人消费者,另一端是数万的有贷款资金的金融机构(银行、小贷、担保、典当等)和数百万的金融产品,平台通过搜索和推荐服务来撮合借款用户和贷款。通常,用户进入平台后,会通过搜索和推荐服务找到合适的贷款产品,填写自己的个人基本资料,最终提交贷款订单。金融机构通过平台收到订单后,对用户资质进行风控审核,最终决定是否通过用户的订单。
数据包含了user, product, quality和order四张表,下面结合业务流程解释一下四个数据的产生过程。
第一步:用户访问融360网站搜索合适的贷款产品,这就产生了user数据,它包含了用户在网站的点击、搜索和下单记录,这里面的date字段记录了是哪一天;
第二步:用户在提供的贷款产品中搜索符合自己需求的,在些产品保存在product数据中,包含了产品的申请金额、期限、申请所需的材料等信息;
第三步:找到合适产品的用户会在线填写申请,这部分数据保存在quality数据中,包含了用户的年龄、性别、职业、收入等信息;
第四步:把用户订单提交给相应的金融机构,金融机构在进行风控审核后会决定是否通过用户的订单,这部分数据保存在order数据中,其中包含用户与其申请的产品编号、订单的申请金额和期限等基本信息以及订单是否审核通过。
具体每表的说明如下:
order_train.txt:用于训练的订单数据
product_final.txt:产品相关数据,包含训练集和测试集出现的所有产品
quality_final.txt:用户申请信息相关数据,包含训练集和测试集出现的所有用户
user_final.txt:用户访问信息相关数据,包含训练集和测试集出现的所有用户
order_test_no_label:用于测试的订单数据,与训练数据相比缺少最终结果标签。
user表
product表
quality表
order表
我们利用SAS EM观察到以下有关各个变量的基本统计指标的异常情况:
偏度偏大(>5)的有:
loan_term_max,loan_quota_min,loan_quota_max,limit,application_term,application_limit.
缺失值过多(>50%)的有:
user_age,qid93,qid78,qid135,qid133,qid123,qid122,col_has_morgage
取值过于单一且集中的有:
term,pv,,loan_term_max,loan_quota_min,loan_quota_max,limit,fangkuan_num,decesion_cycle,apply_num
在将数据导入EM之前,先将四张表的数据整合到了一起,这里使用的是链接的方法,具体语句如下:
在这里使用了DISTINCT,是为了将重复数据去除。
为了观察数据,先将数据导入EM中进行分析,使用INSIGHT节点,发现TOTAL一共含有79万多条记录,100多个字段。通过INPUT发现,许多字段的缺失值比例已经达到60%以上,有的甚至超过了95%,达到了100%。这样的字段是毫无意义的,所以我们在后续的处理中可以直接REJECTED。
另外,通过之前的观察发现,有些字段之间是有关联的,比如说 EARLY_REPAYMENT字段和PENALTY字段,前者代表是否可以提前还款,后者代表提前还款是否需要交纳违约金,对于后者,如果前者为0或者缺失,那么后者也就自然为缺失值,造成缺失值比例升高,同时,我们也注意到,如果采用后面的REPLACEMENT节点,使用的方法也是会产生歧义,因为EARLY_REPAYMENT字段为0的时候,PENALTY字段本身就是缺失的,而使用REPLACEMENT节点反而会导致错误的结果。
所以在此我们通过建立一个新的字段EARLY_REPAY来代替两个字段的含义。
具体语句如下:
/*去除无意义的字段
PROC SQL;
TITLE'SELECTION';
CREATE TABLE DATA.TOTAL3 AS
SELECT
USER_ID,PRODUCT_ID,DATE,TERM,LIMIT,RESULT,CITY_ID,BANK_ID,PRODUCT_TYPE,GUARANTEE_TYPE,LOAN_TERM_MIN,LOAN_TERM_MAX,LOAN_TERM_TYPE,
DECISION_CYCLE,REPAYMENT_TYPE,LOAN_QUOTA_MIN,LOAN_QUOTA_MAX,INTEREST_RATE_TYPE,GUARANTEE_REQUIRED,APPLY_NUM,FANGKUAN_NUM,ID,HOUSE_REGISTER,
BUSINESS_LICENSE,LEGAL_PERSON,MARRIED,CAR,INCOME,HOUSE,TAX,SOCIALSECURITY,LIFECOST,EARLY_REPAYMENT,PENALTY,APPLICATION_TYPE,APPLICATION_TERM,
APPLICATION_LIMIT,OP_TYPE,COL_TYPE,USER_LOAN_EXPERIENCE,USER_HAS_CAR,QID77,CASH_RECEIPTS,USER_INCOME_BY_CARD,USER_WORK_PERIOD,USER_AGE,
QID123,QID122,QID135,QID93,QID145,QID133,QID78,COL_HAS_MORTGAGE,SPAM_SCORE,SOURCE,PV
FROM DATA.TOTAL;
QUIT;
/*对相关的字段进行处理
PROC SQL;
TITLE 'COMBINITION';
CREATE TABLE DATA.TOTAL5 AS
SELECT
USER_ID,PRODUCT_ID,DATE,TERM,LIMIT,RESULT,CITY_ID,BANK_ID,PRODUCT_TYPE,GUARANTEE_TYPE,LOAN_TERM_MIN,LOAN_TERM_MAX,LOAN_TERM_TYPE,
DECISION_CYCLE,REPAYMENT_TYPE,LOAN_QUOTA_MIN,LOAN_QUOTA_MAX,INTEREST_RATE_TYPE,GUARANTEE_REQUIRED,APPLY_NUM,FANGKUAN_NUM,ID,HOUSE_REGISTER,
BUSINESS_LICENSE,LEGAL_PERSON,MARRIED,CAR,INCOME,HOUSE,TAX,SOCIALSECURITY,LIFECOST,APPLICATION_TYPE,APPLICATION_TERM,
APPLICATION_LIMIT,OP_TYPE,COL_TYPE,USER_LOAN_EXPERIENCE,USER_HAS_CAR,QID77,CASH_RECEIPTS,USER_INCOME_BY_CARD,USER_WORK_PERIOD,USER_AGE,
QID123,QID122,QID135,QID93,QID145,QID133,QID78,COL_HAS_MORTGAGE,SPAM_SCORE,SOURCE,PV,
CASE
WHEN EARLY_REPAYMENT=0 THEN '0'
WHEN EARLY_REPAYMENT=1 AND PENALTY=1 THEN '2'
WHEN EARLY_REPAYMENT=1 AND PENALTY=0 THEN '1'
WHEN EARLY_REPAYMENT=. OR PENALTY=. THEN '3'
END AS EARLY_REPAY
FROM DATA.TOTAL3;
QUIT;
/*对AGE缺失的记录进行删除
DATA DATA.TOTAL6;
SET DATA.TOTAL5;
RUN;
PROC SQL;
TITLE 'DELETE';
DELETE FROM DATA.TOTAL6 WHERE USER_AGE='';
QUIT;
解释一下,这里做了处理以后的字段EARLY_REPAY,取值为0的时候表示不可以提前还款,取值为1的时候表示可以提前还款且还款不需要支付违约金,取值为2的时候表示可以提前还款且还款需要支付违约金,取值为3的时候表示EARLY_REPAYMENT=. OR PENALTY=.。同时,我们也在这里删除了一些对后续分析无意义的字段,比如说修改次数等,方便后续分析。
处理完后的数据集为TOTAL5,将其导入EM进行处理。
整体项目图:
数据导入:TOTAL5。在INPUT 后加上一个INSIGHT节点,观察TOTAL5。
数据预处理:
在INPUT SOURCE节点后一共增加了四个预处理节点。
A.SAMPLE
通过观察数据,发现到及时是处理后的TOTAL5,也是一个十分庞大的数据集,所含的记录有79万条之多,由于我们的电脑配置有限,处理如此庞大的数据是十分困难的,所以,我们在这里使用了抽样节点,抽取1%的样本作为所要处理的数据。
在这里,我们使用的是分层抽样,用RESULT为0和1时分别抽样。
B.PARTITION
将数据按照6:4的比例划分训练集和验证集,方便后续分析建模与验证。
C.REPLACEMENT
REPLACEMENT节点是用来对缺失值进行处理的。
我们对INTERVAL的变量采用决策树的方法,对CLASS的变量采用众数的方法。
D.TRAMSFORM
通过对数据分布的观察,发现大多数的数据都是分布不均匀,不利于后续探查,所以我们对数据进行转化,根据最优原则,所以采用转化方法如下:
由于在决策树的建模过程中,缺失值的影响很小,所以直接在分层后的节点后加上TREE节点,建立模型TREE1。通过多次参数探查,最后得到相对较好的一组参数。具体参数设置如下:
在经过讨论后,发现虽然在决策树的建模过程中,缺失值的影响很小,但这里指的是训练集,验证集的缺失仍会对后续的建模产生影响,所以在REPLACEMENT节点后,添加TREE节点,建立模型TREE 2。通过多次参数探查,最后得到相对较好的一组参数。具体参数设置如下:
在TRANSFORM节点后加上TREE节点,建立模型TREE3。通过多次参数探查,最后得到相对较好的一组参数。具体参数设置如下:
D.提升图比较
最后发现TREE2的效果最好。
在TRANSFORM后添加NET节点,建立模型NET1。经过探查后,发现设置隐藏层为3效果最好。
在REPLACEMENT后直接添加NET节点,建立模型。经过探查后,发现设置隐藏层为3效果最好。
NET 2的效果更好。
在transform后添加reg节点,建立模型reg1。参数设置如下:
在replacement后添加reg节点,建立模型reg2。参数设置同上。
Reg2的效果更好。
在所有建模节点后添加assessment节点,查看提升图。
发现最好的模型是NET1。在第一个十分位点,它的精度已经达到了51.62%。见下图:
经过多次对不同方法的试探和调整,并对所有结果进行评估后,我们得到了一个相对最佳模型:模型名称为net1的神经网络模型。下图为net1的lift chart:
与其他模型比较,在第一个十分位距上即前10%中,net1累计的百分比最高,大约51.6%的客户申请贷款的批核结果为同意,保持着较高的数值,或陡峭的曲线;前20%中被同意申请贷款占比略大于35%,相对于基线——一个随机抽样样本中批核结果为同意的客户的预计百分比,net1有了显著的提高,偏离baseline model足够远,然后曲线呈逐步下滑趋势,说明该模型是可用且有效的。Net1模型的权重如下图:
通过试探,我们将隐藏层数设为3 ,得到的模型效果最好。该图显示了每一个变量到每一个隐藏层的连接权重,神经网络节点的隐藏层执行非线性运算,使其功能比较强大,通过调整权重来建立不同的模型,减小误差。Net1在不同迭代次数下的训练集和验证集的误差图如下:
该模型在迭代次数接近10时,误差有了显著降低,训练集的误差理论上比验证集的误差小,拟合效果较好,训练时间较短。对net1模型加insight节点进行观察分析:
模型训练结果中的数据集多了一些变量,包括同意贷款申请的概率、否定贷款申请的概率等,它通过内部计算,得到了每个用户id对应的可能结果。在三千多条观测的验证集中,大约有13.6%的客户能成功申请到贷款,即批核结果为同意;跟最初的训练样本比较,数据占比并无太大差别。
就该项目需要解决的问题而言,根据提供的用户信息和贷款产品信息数据建立最佳模型,预测用于测试的订单的批核结果,net1作为目前最好的统计模型,可以用测试集对其进行利用。在sas em中部分使用步骤如下:
通俗地说要给这个最佳模型“打分”,使用score节点的评分代码,对评分数据集增加预测信息。把新的订单测试集与相关的贷款产品信息连接后,用net1模型去预测,哪些客户可能申请到贷款,哪些可能会被拒绝。每一个用户对应的观测值(部分)如下:
测试集中大约有9.5%的客户申请贷款的要求会被同意,其他客户申请可能会被否定。Insight的结果表给出了每个用户申请审批的预测结果,并显示出result=1即批核结果为同意的客户的id等相关个人信息和贷款产品信息,由于该数据经过特殊处理,申请被同意的客户的部分特征(如:id、年龄、职业等)不具有太高的可信度和说服力,不足以形成一个直接可观的特征群,但是本项目主要解决问题的方向是预测一批客户的贷款申请的结果,根据模型,得出每一个user_id对应的result为0还是1,有且只有两种可能,即同意申请或否定申请,因此,利用net1神经网络模型生成最终的预测结果即可。不仅是此次用于测试的订单数据集,如果通过审核和检测,该模型确实良好,那么之后所有在融360平台上填写的贷款申请都可利用net1神经网络模型提前进行预测——金融机构是否会对某一申请批核通过。
(1)待挖掘的数据的完整性和精确度需要提高。
究其根本,一个数据挖掘项目的成功与否,很大程度上取决于待挖掘的数据集的完整性和精确度,即好的数据是成功的数据挖掘项目的起点。而我们这次项目的数据,由于在获取之前就因为涉及到其他人的隐私而被处理过,且缺失值过多,这使得数据的完整性和精确度大大降低,严重影响了我们后续的挖掘工作。
(2)对数据的预处理与清洗需要更为细致。
在本次的数据挖掘项目中,源数据共有4张表,每一张表都有很多变量,而我们根据userid和productid将四张表合并为一张表后,观测数目达到了79万之多。如何对这79万的庞大数据进行科学合理的预处理和清洗给我们提出了一个巨大的挑战。经过查阅资料和结合了我们自己的判断后,我们筛选出了一部分对结果影响作用较大的变量来构建模型。在挑选构建模型的变量的过程中,无可避免的存在疏忽和遗漏,变量的选择不准确可能在一定程度上对我们模型的有效性和准确性施加影响。
(3)对模型的解读能力需要提升
本次数据挖掘项目最终确定的最佳模型是神经网络,而我们在得到最佳模型后,缺乏对最佳神经网络模型的解读能力。确定神经网络为最佳模型的原因是我们在建模的过程中,经过不停的试探修改后,根据提升图来筛选出神经网络为最优。可是在具体查看最佳神经网络模型的具体参数设置时,我们却缺乏对其进行深入解读的能力,这影响我们对该模型的再次改进和将之应用于新数据的可能性。
通过本次数据挖掘项目分析,我们的一大收获是对利用SAS em中的决策树、回归、神经网络来建立模型,从而对新数据进行预测的过程有了更深的认识与感触。我们深深意识到,一个好的模型的建立并非一蹴而就,而是在不断的试探过程中得到的。在试探的过程中,会出现各种各样未曾预期的差错,如我们这次的挖掘项目中有一个树的结点在参数均设置无误的情况下仍然报错,致使程序无法正常运行,这让我们百思不得其解。最后迫于无奈,我们选择了最为简单粗暴的方法,即删除这个树结点。在删除并按照原有参数设置了一个新的树节点后,新的树节点并没有报错,项目流程得以顺利运行。这让我们深深意识到,SAS em的可视化界面固然很好,为我们的操作带来了极大的便利,可是难免出现bug,因而或许掌握SAS编程语言是最为稳健有效的方法。而且,在不断的试探后得到的模型并非最佳,而是在既有条件下的相对最佳。因而,在具体建模的过程中,要怀有一颗不满足的心,要通过对每个节点的不断修改与试探,以期最终得到一个符合建模预期的模型。此外,针对我们所做的具体项目,我们了解了更多关于网络融资方面的知识,我们了解到网络融资不同于传统的银行信贷,它所涉及的因素有很多,但较传统信贷而言,它的创新点在于它更多的是收集用户在网上的行为。除此之外,网络融资还会结合用户在现实生活中的财产物资来综合构建一个模型,即将用户线上线下的状况相结合根据模型来得出是否给与用户信贷,且发送金额为多少的结论。以上这些收获对我们日后的学习生活有很大的启示!
[1] Altman EI, Saunders A. Credit risk measurement: Development sover the last 20 years[ J] .Journal of banking& Finance,1997(21):1721-1742.
[2] Altman EI. Financial ratios, discriminant analysi sand the Prediction of corporate bank ruptcy [ J] .Journal of Finance,1968(23):589-609.
[3] 翟小华.Credit Metrics模型及其对我国商业银行适用性思考[ J] .科学研究与实践, 2007, 22(7):10.
[4] 王春峰, 万海晖, 张维.商业银行信用风险评估及其实证研究[ J] .管理科学学报, 1998, 1(1):68-72.
[5] 王春峰, 康莉.基于遗传规划方法的商业银行信用风险
评估模型[ J] .系统工程理论与实践, 2001, 21(2):73-79.
[6] 王春峰, 万海晖, 张维.基于神经网络技术的商业银行信用风险评估[ J] .系统工程理论与实践, 1999, 19(9):24-32.
[7] 王春峰, 万海晖, 张维.组合预测在商业银行信用风险评估中的应用[ J] .管理工程学报, 1999, 13(1):5-8.
[8] 施锡铨, 邹新月.典型判别分析在企业信用风险评估中的作用[ J] .财经研究, 2001, 27(10):53-57.
本文来源:https://www.2haoxitong.net/k/doc/0a4ea732710abb68a98271fe910ef12d2bf9a94a.html
文档为doc格式