《P2P贷款数据分析》

针对ProsperLoanData|Kaggle中提出的问题感到很感兴趣,参考社群小伙伴的分析,按照自己的理解,动手写下如下的code 1、导入数据,数据是按.CSV保存的文件,通过read.csv进行文件读取 #step1introducetheinputdatafrom.csvloandata<-read.csv("prosperLoanData.csv,stringsAsFactors=F")2、理解数据,他是113937个观测值,81个变量组成的一个大的表格 >str(loandata)'data.frame':113937obs.of81variables:由于有81个变量,一些对分析的结果,即贷款状态影响变化不大的变量不予考虑,在此就不做名词解释了,从其中挑选出19个变量进行描述 ListingCreationDate:表创建时间LoanStatus:贷款状态(Completed、Current、Defaulted、Chargedoff等)EmploymentStatus:受雇佣状态(Self-employed、Employed等)EmploymentStatusDuration:受雇佣状态持续时间(以月为计算单位)IsBorrowerHomeowner:借款人是否拥有房屋CreditScoreRangeLower/CreditScoreRangeUpper:消费信用最低/最高分InquiriesLast6Months:最近6个月查过多少次征信记录BorrowerRate:借款标利率,作为P2P平台资金借贷价格的代理变量,BorrowerRate不包含其他费用,是筹资者付给投资人的报酬,也是融资最直接和最重要的成本,其体现了资金供求双方在综合考虑各种因素情况下所认可的资金使用成本.Term:期限,筹资者通过网贷平台进行借款时所承诺的最终偿还期限,借款期限体现该资产的流动性,期限较长的资产应存在着流动性溢价(利率上涨).CreditGrade/ProsperRating(Alpha):信用等级,前者反映的是2009年7月1日前客户的信用等级,后者反映的是2009年7月1日后的信用等级.信用等级越高,其偿债能力越强.CreditScore:由消费信用公司提供的消费信用评分,类似于国内的芝麻信用分。StatedMonthlyIncome:客户月收入,月收入越高,投资者对该借款本息按时回流越有信心.DelinquenciesLast7Years:信用资料提交时借款人过去7年违约次数,该指标在一定程度上可以体现借款标的发布者的信用状况BankcardUtilization:信用资料提交时借款人信用卡使用额度和信用卡总透支额度的百分比LoanOriginalAmount:借款人在借款时已经向prosper借入的资金,如果没有历史记录则为0,显然,借入本金越多,其还款压力越大,但是这项指标大的话也可能说明该客户对prosper依赖性较强.DebtToIncomeRatio:借款人的债务收入比,债务收入比越高说明筹资者财务状况越差,还款能力较低.其向P2P平台借款时,投资者应要求有更高的回报.Occupation:贷款人职业IncomeRange:贷款人年收入范围BorrowerState:贷款人所在州此次分析将基于上述的数据对贷款状况LoanStatus进行预测模型建立。 3.2 #_1整合数据loanStatus借贷的状态信息,类比有些多,需要对数据进行合并归类 >table(newloandata$LoanStatus)CancelledChargedoffCompletedCurrent5119923807456576DefaultedFinalPaymentInProgressPastDue(>120days)PastDue(1-15days)501820516806PastDue(16-30days)PastDue(31-60days)PastDue(61-90days)PastDue(91-120days)265363313304PastDue<-c("PastDue(>120days)","PastDue(1-15days)","PastDue(16-30days)","PastDue(31-60days)","PastDue(61-90days)","PastDue(91-120days)")##标签为PastDue的统一归类为PastDuenewloandata$LoanStatus[newloandata$LoanStatus%in%PastDue]<-"PastDue"##cancelled归类到current中newloandata$LoanStatus[newloandata$LoanStatus=="Cancelled"]<-"Current"##defaulted归类为chargedoffnewloandata$LoanStatus[newloandata$LoanStatus=="Defaulted"]<-"Chargedoff"##FinalPaymentInProgress归类为completednewloandata$LoanStatus[newloandata$LoanStatus=="FinalPaymentInProgress"]<-"Completed"归类后的数据为,种类就只有4类:分别为chargeoff(违约),completed,current,pastdue >table(newloandata$LoanStatus)ChargedoffCompletedCurrentPastDue1701038279565812067进一步归类数据 ##将PastDue归类到completed中,属于还款状态newloandata$LoanStatus[newloandata$LoanStatus=="PastDue"]<-"Completed"##将正在进行中的数据删除,也就是current数据删除对应的行newloandata<-newloandata[!(newloandata$LoanStatus=="Current"),]#对loanStatus进行编码,completed=1,chargeoff=0 #levels=对应的是原始的字符串#labels=对边的编码方式newloandata$LoanStatus<-factor(newloandata$LoanStatus,labels=c(0,1),levels=c("Chargedoff","Completed"))LoanStatus的最终状态,chargedoff个数为17010,Completed的个数为40346 >table(newloandata$LoanStatus)0117010403463.3异常数据处理 数据清洗过程 #2.1查看NA的数据 temp_data<-sapply(newloandata,function(x)sum(is.na(x)))#应用于每一列,如果其中有时NA的值,求合复制给temp_data的对应列temp_data1<-temp_data[temp_data!=0]#列对应的值不等于0表明这一列中有NA值>temp_data1<-sort(temp_data1,decreasing=TRUE)#排序>temp_data1EmploymentStatusDurationBankcardUtilizationDebtToIncomeRatio761176004456DelinquenciesLast7YearsInquiriesLast6MonthsCreditScoreRangeLower987696590CreditScoreRangeUpper590所以NA值排名靠前的为EmploymentStatusDurationBankcardUtilizationDebtToIncomeRatio 下面逐个对齐进行补充 EmploymentStatusDuration 查看EmploymentStatusDuration为NA对应的EmploymentStatus,发现雇佣状态是Notavailable与"",所以可以用0来特带NA的值 newloandata$EmploymentStatus[which(newloandata$EmploymentStatusDuration%in%NA)][1]"Notavailable""Notavailable""""Notavailable""Notavailable"[6]"Notavailable""Notavailable""""Notavailable""Notavailable"[11]"""""Notavailable""Notavailable""Notavailable"[16]"Notavailable""""""Notavailable""Notavailable"[21]"""Notavailable""""Notavailable""Notavailable"[26]"Notavailable""Notavailable""""""Notavailable"[31]"""Notavailable""Notavailable""Notavailable""Notavailable"[36]"""Notavailable""Notavailable""""Notavailable"[41]"Notavailable""Notavailable""Notavailable""Notavailable""Notavailable"[46]"Notavailable""""""""Notavailable"[51]"""Notavailable""""Notavailable""Notavailable"newloandata$EmploymentStatusDuration[which(newloandata$EmploymentStatusDuration%in%NA)]<-"0"Bankcardutiliaztion 绘图查看是否可以用中位数补充数值 >library(ggplot2)>library(ggthemes)>ggplot(newloandata,aes(x=BankcardUtilization))++geom_density(fill="grey",alpha=0.4)++geom_vline(aes(xintercept=median(BankcardUtilization,na.rm=T)),colour="red",linetype="dashed",lwd=1)++theme_few()++ggtitle("ThedensityofBankcardUtilization") 用中值填充缺失值 newloandata$BankcardUtilization[which(newloandata$BankcardUtilization%in%NA)]<-median(newloandata$BankcardUtilization,na.rm=T)接着对BankcardUtilization的数值进行分类 newloandata$BankCardUse[newloandata$BankcardUtilization=quantile(newloandata$BankcardUtilization,0.25,na.rm=TRUE))&(newloandata$BankcardUtilization=quantile(newloandata$BankcardUtilization,0.5,na.rm=TRUE))&(newloandata$BankcardUtilization<1)]<-"HeavyUse"newloandata$BankCardUse[newloandata$BankcardUtilization>=1]<-"SuperUse"newloandata$BankCardUse<-as.factor(newloandata$BankCardUse) EmploymentStatus补全数值 #EmploymentStatus补全数值#useNotavailable替换NA值,字符串替换没有什么newloandata$EmploymentStatus[which(newloandata$EmploymentStatus%in%NA)]<-"Notavailable"CreditGrade缺失值补充 根据观测CreditGrade与ProsperRating.Alpha是按照时间2009-7-1号进行划分的,之前使用的CreditGrade,之后使用ProsperRating.Alpha进行划分 loandata_before<-newloandata[newloandata$ListingCreationDate<"2009-7-1",]sapply(loandata_before,function(x)sum(is.na(x)))划分后观测之前的数据发现只有少数的缺失值,我们这些缺失值按删除处理 ProsperRating.Alpha缺失值补充 loandata_after<-newloandata[newloandata$ListingCreationDate>="2009-7-1",]结果ProsperRating.Alpha缺失值为0BorrowerState补全数值 >newloandata$BorrowerState[which(newloandata$BorrowerState%in%NA)]<-"None">sapply(newloandata,function(x)sum(is.na(x)))ListingCreationDateLoanStatusEmploymentStatus000EmploymentStatusDurationIsBorrowerHomeownerInquiriesLast6Months000BorrowerRateTermCreditGrade0028408ProsperRating.AlphaStatedMonthlyIncomeDelinquenciesLast7Years2907900BankcardUtilizationLoanOriginalAmountDebtToIncomeRatio000OccupationIncomeRangeBorrowerState000CreditScore0CreditScoreRangeLower/CreditScoreRangeUpper >##CreditScoreRangeLower>##用中位数补充缺失值>###将CreditScoreRangeLower/CreditScoreRangeUpper取两者平均值作为一个新的变量>newloandata$CreditScore<-(newloandata$CreditScoreRangeLower+newloandata$CreditScoreRangeUpper)/2>newloandata$CreditScore[which(newloandata$CreditScore%in%NA)]<-+median(newloandata$CreditScore,na.rm=T)>#删除CreditScoreRangeLower和CreditScoreRangeUpper>newloandata<-newloandata[,!colnames(newloandata)%in%c("CreditScoreRangeLower","CreditScoreRangeUpper")]InquiriesLast6Months ##用中位数对缺失数据进行填充newloandata$InquiriesLast6Months[which(newloandata$InquiriesLast6Months%in%NA)]<-median(newloandata$InquiriesLast6Months,na.rm=T)DelinquenciesLast7Years #用中位数填充newloandata$DelinquenciesLast7Years[which(newloandata$DelinquenciesLast7Years%in%NA)]<-median(newloandata$DelinquenciesLast7Years,na.rm=TRUE)DebtToIncomeRatio >newloandata$DebtToIncomeRatio[which(newloandata$DebtToIncomeRatio%in%NA)]<-+median(newloandata$DebtToIncomeRatio,na.rm=TRUE)InquiriesLast6Months >newloandata$InquiriesLast6Months[which(newloandata$InquiriesLast6Months%in%NA)]<-+median(newloandata$InquiriesLast6Months,na.rm=TRUE)BankcardUtilization 至此NA的值都用中值替代,下一步进行数据分析 >sapply(newloandata,function(x)sum(is.na(x)))ListingCreationDateLoanStatusEmploymentStatus000EmploymentStatusDurationIsBorrowerHomeownerInquiriesLast6Months000BorrowerRateTermCreditGrade000ProsperRating.AlphaStatedMonthlyIncomeDelinquenciesLast7Years000BankcardUtilizationLoanOriginalAmountDebtToIncomeRatio000OccupationIncomeRangeBorrowerState000CreditScore0第四步,数据分析图形化显示 4.1受雇佣状态持续时间与贷款状态的关系 观测的变量为EmploymentStatusDuration,LoanStatus 使用的方法是ggplot来观测这两个变量的趋势 #转换为整数,填充到X轴,y轴为频数newloandata$EmploymentStatusDuration<-as.integer(newloandata$EmploymentStatusDuration)ggplot(data=newloandata,aes(x=EmploymentStatusDuration,color=LoanStatus))+geom_line(aes(label=..count..),stat='bin')+labs    hi.zhika78.com(title="TheLoanStatusByEmploymentStatusDuration",x="EmploymentStatusDuration",y="Count",fill="LoanStatus") 从这个图中我们可以观测到随着雇佣时间变长,贷款状态趋于完成 也就是说,一个有稳定工作收入的人,不容易出现贷款毁约,不还款 4.2借款人是否有房屋和贷款状态的关系 观测的变量为:IsBorrowerHomeowner,以及LoanStatus 使用的方式通过马克图开观测两种变量之间的相互关系 >mosaicplot(table(newloandata$IsBorrowerHomeowner,newloandata$LoanStatus),main="TheLoanstatusByIsBorrowerHomeowner",color=c('pink','skyblue')) 从这个马克图中有房的人贷款偿还的比例稍微大于没有房屋的,但是区别不明显。所以是否有房屋对还款的情况影响不大。 4.3消费信用分与贷款状态的关系 消费积分:CreditScore 贷款状态:LoanStatus 方式同4.1使用ggplot,绘制横坐标为积分,纵坐标为LoanStatus频数的图形 >ggplot(data=newloandata,+aes(x=CreditScore,color=LoanStatus))++geom_line(aes(label=..count..),stat='bin')++labs(title="TheLoanStatusByCreditScore",+x="CreditScore",+y="Count",+fill="LoanStatus") 从图中可以看出,随着消费信用分越高,还款率越高,因此个人的消费信用分会对贷款最终还款状态有一定的影响 4.4征信记录查询次数与贷款状态的关系 针对的变量为InquiriesLast6Months 方法同上 >ggplot(data=newloandata[newloandata$InquiriesLast6Months<20,],+aes(x=InquiriesLast6Months,color=LoanStatus))++geom_line(aes(label=..count..),stat='bin')++labs(title="TheLoanStatusByInquiriesLast6Months",+x="InquiriesLast6Months",+y="Count",+fill="LoanStatus") 即,当征信记录查询记录小于10的时候,还可以看出来对贷款状态有些影响,但是大于10之后,还款与未还款的曲线基本趋于一致,所以,可以大胆猜测这个对贷款人是否有能力还款影响不大。 4.5信用等级与贷款状态的关系 针对的对象:信用等级,这里因为之前的分析中课件2009年7月1日之前以CreditGrade作为信用等级,之后使用ProsperRating.Alpha作为信用等级 所有需要使用CreditGrade与ProsperRating.Alpha与LoanStatus的关系图 这里使用的是马克图,绘制的图形如下 :CreditGrademosaicplot(table(loandata_before$CreditGrade,loandata_before$LoanStatus),main="TheLoanstatusByCreditGrade",color=c('pink','skyblue'))ProsperRating.Alphamosaicplot(table(loandata_after$ProsperRating.Alpha,loandata_after$LoanStatus),main="TheLoanstatusByProsperRating.Alpha",color=c('pink','skyblue')) 从马赛克图中可以看出,信用等级越高还款率越高,因此AA等级还款率最高,NC最低。而且大部分人的等级集中在C、D等级,AA等级还款率和NC等级还款率相差较大,因此,信用等级对贷款状态有一定的影响 4.6客户的职业分布,以及月收入、年收入与贷款状态的关系 职业分布:由于职业分布是一个离散的变量,这里我们使用直方图的形式来绘制 #贷款人职业Occupation与还款loanstatus的关系ggplot(data=newloandata,aes(x=Occupation))+geom_bar()+theme(axis.text.x=element_text(angle=90,vjust=0.5,hjust=1)) 职业中,选择“other”的人数更多,跟之前数据处理得出的结果一样,说明很多人在申请贷款的时候会不选择自己的职业 月收入于还款情况的关系,因为月收入的是个数据类型,我们希望显示为char类型 需要进行转换,并绘制图形 ###月收入与贷款状态的关系newloandata$Monthly[newloandata$StatedMonthlyIncome<3000]<-c("0-3000")newloandata$Monthly[newloandata$StatedMonthlyIncome>=3000&newloandata$StatedMonthlyIncome<6000]<-c("3000-6000")newloandata$Monthly[newloandata$StatedMonthlyIncome>=6000&newloandata$StatedMonthlyIncome<9000]<-c("6000-9000")newloandata$Monthly[newloandata$StatedMonthlyIncome>=9000&newloandata$StatedMonthlyIncome<12000]<-c("9000-12000")newloandata$Monthly[newloandata$StatedMonthlyIncome>=12000&newloandata$StatedMonthlyIncome<15000]<-c("12000-15000")newloandata$Monthly[newloandata$StatedMonthlyIncome>=15000&newloandata$StatedMonthlyIncome<20000]<-c("15000-20000")newloandata$Monthly[newloandata$StatedMonthlyIncome>=20000]<-c(">20000")newloandata$Monthly<-factor(newloandata$Monthly,levels=c("0-3000","3000-6000","6000-9000","9000-12000","12000-15000","15000-20000"))ggplot(data=newloandata,aes(x=Monthly,fill=LoanStatus))+geom_bar(position="fill")+ggtitle("TheLoanstatusByMonthlyIncome")+theme(axis.text.x=element_text(angle=90,vjust=0.5,hjust=1)) 从图中可以看出来,月收入越高,还款率相对来说也高一点,但是区别不大 同样我们可以分析年收入的高低对还款的影响 ggplot(data=newloandata,aes(x=IncomeRange,fill=LoanStatus))+geom_bar(position="fill")+ggtitle("TheLoanstatusByIncomeRange")+theme(axis.text.x=element_text(angle=90,vjust=0.5,hjust=1)) 从图中可以看到,年收入的越多,还贷的比例较大,但是区别不大 同样我们可以分析年收入的高低对还款的影响。 4.7客户7年内违约次数与贷款状态的关系 针对元素:DelinquenciesLast7Years与LoanStatus的关系 ggplot(data=newloandata,aes(x=DelinquenciesLast7Years,color=LoanStatus))+geom_line(aes(label=..count..),stat='bin')+labs(title="TheLoanStatusByDelinquenciesLast7Years",x="DelinquenciesLast7Years",y="Count",fill="LoanStatus") 过去7年一次也没有违约的客户还款率更高,而违约次数越高,还款率越低 4.8信用卡使用情况与贷款状态的关系 ggplot(data=newloandata,aes(x=BankCardUse,fill=LoanStatus))+geom_bar(position="fill")+ggtitle("TheLoanstatusByBankCardUse")+theme(axis.text.x=element_text(angle=90,vjust=0.5,hjust=1)) 贷款人的信用卡使用情况为“MildUse”和“MediumUse”的还款率相对较大,而“SuperUse”还款率最低,因此可以根据使用信用卡的状况初步确定贷款人的还款能力 4.9在Prosper平台是否借款与贷款状态的关系 借款的总数:LoanOriginalAmount newloandata$LoanOriginal[newloandata$LoanOriginalAmount>=1000&newloandata$LoanOriginalAmount<4000]<-"1000-4000"newloandata$LoanOriginal[newloandata$LoanOriginalAmount>=4000&newloandata$LoanOriginalAmount<7000]<-"4000-7000"newloandata$LoanOriginal[newloandata$LoanOriginalAmount>=7000&newloandata$LoanOriginalAmount<10000]<-"7000-10000"newloandata$LoanOriginal[newloandata$LoanOriginalAmount>=10000&newloandata$LoanOriginalAmount<=13000]<-"10000-13000"newloandata$LoanOriginal[newloandata$LoanOriginalAmount>13000]<-">13000"newloandata$MonthlyIncome<-factor(newloandata$MonthlyIncome,levels=c("1000-4000","4000-7000","7000-10000","10000-13000",">13000"))ggplot(data=newloandata,aes(x=LoanOriginal,fill=LoanStatus))+geom_bar(position="fill")+ggtitle("TheLoanstatusByLoanOriginalAmount") 在Prosper平台有借款对贷款状态影响不大,还款率大致上趋于一致。 4.10债务收入比例与贷款状态的关系 针对分析要素:DebtToIncomeRatio 首先观测这个变量的特性,通过4分位数,数据集中在小于0.29的范围,所以我们主要分析<1的数据。 >summary(newloandata$DebtToIncomeRatio)Min.1stQu.MedianMean3rdQu.Max.0.00000.13000.20000.28280.290010.0100ggplot(data=newloandata[newloandata$DebtToIncomeRatio<1,],aes(x=DebtToIncomeRatio,color=LoanStatus))+geom_line(aes(label=..count..),stat='bin')+labs(title="TheLoanStatusByDebtToIncomeRatio",x="DebtToIncomeRatio",y="Count",fill="LoanStatus") 债务比越低,还款率越高,也就是说贷款人本身的债务不高的情况下,具备还款能力越高。 4.11借款利率与贷款状态的关系 借款率:BorrowerRate ###11.借款利率与贷款状态的关系ggplot(data=newloandata,aes(x=BorrowerRate,color=LoanStatus))+geom_line(aes(label=..count..),stat='bin')+labs(title="TheLoanStatusByBorrowerRate",x="BorrowerRate",y="Count",fill="LoanStatus") 借款的利率越高,还款率越低,也就是说这个会影响贷款状态 5、建立模型 通过上述的分析,可以知道EmploymentStatusDuration、CreditScore、CreditGrade、ProsperRating.Alpha、DelinquenciesLast7Years、BankCardUse、DebtToIncomeRatio、BorrowerRate对贷款状态有一定的影响,所以建模时将这几个选择为影响因子 因为CreditGrade与ProsperRating.Alpha是针对2009.7.1进行划分,所以我们选择2个数据集 另外按照70%的数据作为训练集,30%的数据作为test集的标准,训练数据,进行预测 ###训练集和测试集,以2009年7月1日为分界点###从loandata_before数据集中随机抽70%定义为训练数据集,30%为测试数据集###set.seed(156)tain_before1<-sample(nrow(loandata_before),0.7*nrow(loandata_before))set.seed(156)tain_before<-loandata_before[tain_before1,]test_before<-loandata_before[-tain_before1,]###利用随机森林建立模型library(randomForest)before_mode<-randomForest(LoanStatus~EmploymentStatusDuration+CreditScore+CreditGrade+DelinquenciesLast7Years+BankCardUse+DebtToIncomeRatio+BorrowerRate,data=tain_before,importance=TRUE,na.action=na.omit)这里需要注意的是自变量应该是数据类型或者是因子,同时若出现如下的告警 Errorinna.fail.default(list(LoanStatus=c(1L,2L,2L,1L,2L,2L,2L,:missingvaluesinobject可以添加na.action=na.omit,删除na的操作 下面通过绘制错率率来观测这个模型对那个值的预测比较准确 plot(before_mode,ylim=c(0,1))legend("topright",colnames(before_mode$err.rate),col=1:3,fill=1:3) 从这个图中可以看出绿线对应的错误率最低,说明这个模型对预测谁更可能还贷款比较准。 对因子的重要性进行分析 importance<-importance(before_mode)varImportance<-data.frame(variables=row.names(importance),Importance=round(importance[,'MeanDecreaseGini'],2))###对于变量根据重要系数进行排列library(dplyr)#mutateMutateaddsnewvariablesandpreservesexisting;transmutedropsexistingvariables.rankImportance<-varImportance%>%mutate(Ranke=paste0('#',dense_rank(desc(Importance))))###使用ggplot绘制重要变量相关系图ggplot(rankImportance,aes(x=reorder(variables,Importance),y=Importance,fill=Importance))+geom_bar(stat='identity')+geom_text(aes(x=variables,y=0.5,label=Ranke),hjust=0,vjust=0.55,size=4,colour='red')+labs(x='Variables')+coord_flip()+theme_few()+ggtitle('TheImportanceofVariables') 因子重要性排名前三的是BorrowerRate、CreditGrade、DebtToIncomeRatio。 ###对测试集预测predit_before<-predict(before_mode,test_before)#通过模型before_mode,对test_before数据进行预测,结果保留在predit_before向量中#dnn=c()thenamestobegiventothedimensionsintheresultpert_before<-table(test_before$LoanStatus,predit_before,dnn=c("Actual","Predicted"))此方法参见R语言实践17.3决策树这章 >pert_beforePredictedActual010762150316923440预测的准确性(762+3440)/(762+3440+1503+692)=4202/6397=0.6568704080037518看来还需要继续优化因子筛选 接下来看2009年7月1日之后的模型,方法与前面的类似,也是先创建train与test集合,建立数据模型,绘制错误率的图形,找到关键因素,对数据进行预测,比较预测的正确率。 创建数据集合 loandata_after<-newloandata[newloandata$ListingCreationDate>"2009-7-1",]set.seed(187)tain_after1<-sample(nrow(loandata_after),0.7*nrow(loandata_after))set.seed(187)tain_after<-loandata_after[tain_after1,]test_after<-loandata_after[-tain_after1,]建立数据模型 ###利用随机森林建立模型library(randomForest)after_mode<-randomForest  (LoanStatus~EmploymentStatusDuration+CreditScore+ProsperRating.Alpha+DelinquenciesLast7Years+BankCardUse+DebtToIncomeRatio+BorrowerRate,data=tain_after,importance=TRUE,na.action=na.omit)绘制错误率的图形 ###显示模型误差plot(after_mode,ylim=c(0,1))legend("topright",colnames(after_mode$err.rate),col=1:3,fill=1:3) 从图中可以看到绿线的值更低,说明预测还款的准确率更高一些 找到关键因素 ###对因子的重要性进行分析importance<-importance(after_mode)varImportance<-data.frame(variables=row.names(importance),Importance=round(importance[,'MeanDecreaseGini'],2))###对于变量根据重要系数进行排列library(dplyr)rankImportance<-varImportance%>%mutate(Ranke=paste0('#',dense_rank(desc(Importance))))###使用ggplot绘制重要变量相关系图ggplot(rankImportance,aes(x=reorder(variables,Importance),y=Importance,fill=Importance))+geom_bar(stat='identity')+geom_text(aes(x=variables,y=0.5,label=Ranke),hjust=0,vjust=0.55,size=4,colour='red')+labs(x='Variables')+coord_flip()+theme_few()+ggtitle('TheImportanceofVariables') 主要影响的因素为:EmplymentStatusDuration,BorrowerRate,DebtToincomeRatio 对数据进行预测 predit_after<-predict(after_mode,test_after)预测的准确性 pert_after<-table(test_after$LoanStatus,predit_after,dnn=c("Actual","Predicted"))>pert_afterPredictedActual010264163013305636(264+5636)/(264+1630+330+5636)=5900/7860=0.7506361323155216 比起2009年7月1日前建造的模型准确率提高了很多,也就是说平台改变了信用等级后,将评估模型也进行了修改,保障了平台的利益。 而且,的确是预测还款的准确率比预测不还款的准确率要高一点。 总结 1、项目课题是从kaggle选取的题目,数据也是由该网站提供 2、使用read.csv读取数据,分析列数据的含义,选取我们感兴趣的列作为新的数据框进 3、尽可能的补充缺失值,使用中值填充以及默认值填充的方式 4、分析各个可能影响结果的变量与目标变量的相关性 5、根据上一步的分析,找到比较相关的变量作为自变量,目标变量作为因变量,通过随机森林创建数据模型 6、根据数据模型对test数据进行预测,并于原始变量进行比较,计算出模型的准确率 7、改进模型的方式,更换随机因子 遇到的问题 1、选取观测变量的原则不清晰,主管感觉比较重

你可能感兴趣的:(《P2P贷款数据分析》)