美文网首页数据科学与R语言
Lending Club - 利用逻辑回归预测在网贷平台上的投资

Lending Club - 利用逻辑回归预测在网贷平台上的投资

作者: 沁沁_ | 来源:发表于2017-01-07 16:35 被阅读0次

背景:

Lending Club是美国最大的P2P网贷交易平台,利用网络技术直接连接了个人投资者和个人借贷者,缩短资金流通的细节,绕过传统的大银行等金融机构,使得投资者和借贷者都能得到更多实惠。对于投资者来说,可以获得更好的回报;对于借贷者来说,则可以获得相对较低的贷款利率。于此,我们就用一个简单的例子去理解如何利用逻辑回归预测在P2P网贷的投资回报。

预测目的:

在借贷行业中,投资者向借贷者提供贷款以获取利息。如果借贷者顺利偿还贷款,投资者则获得利息收益。如果借贷者无法偿还贷款,投资者则损失贷款本金。因此,对于投资者来说,需要预测借贷者无法偿还贷款的风险,最大程度地避免投资损失,最大程度地实现投资回报。

数据来源:

我们将使用Lending Club网站的公开数据,数据集为自2007年5月起至2010年2月LendingClub平台发放的9578条3年期贷款。

因变量"not.fully.paid"表示不完全支付,要预测这个因变量,如下自变量可供投资者选择是否投资此项贷款:
Credit Policy:客户是否满足Lending Club的授信标准,1为是,0为否;
Purpose:贷款的目的;(例:信用卡还款,债务处理,教育,购买大件,中小企业经营等等);
int.rate:贷款利率;较高的贷款利率意味着较高的风险;
installement:每月分期的金额;
log.annual.inc:借贷者的年收入的自然对数;
dti:借贷者的债务收入比;
fico:借贷者的FICO信用评分;
days.with.cr.line:借贷者有信用额度的天数;
revol.bal:借贷者的账户余额(尚未结清的金额);
revol.util:借贷者的信用账户利用率(使用的金额/授信的金额);
inq.last.6mths:借贷者在过去6个月被借款者咨询的次数;
delinq.2yrs:借贷者在过去2年逾期还款超过30天的次数;
pub.rec:借贷者公共事业记录差评的次数;

第一步: PREPARING THE DATASET

重要处理数据的语法-填充缺少的观察值 imputation

源数据共有13个自变量,每1个变量都有出现缺少观察值的情况,所以我们要对源数据进行处理,填充缺少的观察值;通过如下代码可以有所观察:

missing = subset(loans, is.na(log.annual.inc) | is.na(days.with.cr.line) | is.na(revol.util) | is.na(inq.last.6mths) | is.na(delinq.2yrs) | is.na(pub.rec))

填充缺少的观察值:

library(mice)
set.seed(144)
vars.for.imputation = setdiff(names(loans), "not.fully.paid")
imputed = complete(mice(loans[vars.for.imputation]))
loans[vars.for.imputation] = imputed

第二步: PREDICTION MODEL

采用逻辑回归算法建立模型:

set.seed(144)
library(caTools)
split = sample.split(loans$not.fully.paid, SplitRatio = 0.7)
train = subset(loans, split == TRUE)
test = subset(loans, split == FALSE)
LoansLog = glm(not.fully.paid ~.,data=train,family=binomial)
summary(LoansLog)
predicted.risk=predict(LoansLog,type="response",newdata=test)
test$predicted.risk=predicted.risk
table(test$not.fully.paid, predicted.risk > 0.5)
library(ROCR)
ROCRpred = prediction(predicted.risk, test$not.fully.paid)
as.numeric(performance(ROCRpred, "auc")@y.values)

观测在逻辑回归模型下:
逻辑回归模型正确率:0.8364
Baseline模型正确率:0.8399
模型AUC:0.672
综上所述,可以观测在对所有变量进行逻辑回归的过程中,模型本身对预测的表现并不理想;

第三步: A SMART BASELINE

Lending Club会根据对贷款风险的预测来分配贷款利率,接下来我们进一步研究int.rate变量对模型预测的影响; 建立bivariate模型,

bivariate = glm(not.fully.paid~int.rate, data=train, family="binomial")
summary(bivariate)

与全变量的逻辑回归模型相比,int.rate变量的重要性发生了显著的变化;
接下来,进行变量相关性观察:

cor(train$int.rate, train$fico)

观测结果显示变量int.rate和变量fico存在相关性,全变量模型存在multicollinearity多重共线性;贷款利率和借贷者的信用积分存在相关性;

针对测试集运用bivariate模型:

pred.bivariate = predict(bivariate, newdata=test, type="response")
summary(pred.bivariate)
table(test$not.fully.paid, pred.bivariate > 0.5)

测试结果显示,测试集中最大可能的贷款违约率约为0.4266。

ROCRpred = prediction(pred.bivariate, test$not.fully.paid)
as.numeric(performance(ROCRpred, "auc")@y.values)

模型AUC:0.624

第四步: COMPUTING THE PROFITABILITY OF AN INVESTMENT

test$profit = exp(test$int.rate*3) - 1
test$profit[test$not.fully.paid == 1] = -1
test[which.max(test$profit),]

第五步:A SIMPLE INVESTMENT STRATEGY

在此处介绍一个简单的投资思想:投资者选择投资网贷P2P的时候,会在风险和收益之前寻求平衡; 所以我们的目标即是投资收益较高但风险较低的贷款;

highInterest=subset(test, "int.rate" >= 0.15 )

分出int.rate在15%以上的贷款,

mean(highInterest$profit)
table(highInterest$int.rate>=0.15,highInterest$not.fully.paid)

这部分int.rate较高的贷款平均收益大概在0.23,这部分int.rate较高的贷款违约率大概在0.25;
现在我们在这些highInterest的贷款中选择风险最低的100只贷款;

cutoff = sort(highInterest$predicted.risk, decreasing=FALSE)[100]
selectedLoans = subset(highInterest, predicted.risk <= cutoff)
sum(selectedLoans$profit)
table(selectedLoans$not.fully.paid)
0.23 0.31
0.25 0.19

通过建立投资模型,发现在违约率仅仅提高了一点(0.19)的情况下,网贷的投资收益回报有了显著地提高;

需要提醒的是:模型预测的时间相对较短;在实际的投资中,投资者还需要考虑econcomic shock等外部环境因素。

源数据:
https://courses.edx.org/asset-v1:MITx+15.071x_2a+2T2015+type@asset+block/loans.csv
扩展阅读:
《来认识一下即将上市的全球最大P2P网贷公司Lending Club》,虎嗅网
http://www.huxiu.com/article/41472/1.html
《解析网贷龙头Lending Club的盈利模式》
http://news.loan.cngold.org/c/2014-12-18/c2944728.html
书籍推荐:
《超越金融》,作者:乔治索罗斯
http://book.douban.com/subject/4244859/

相关文章

网友评论

    本文标题:Lending Club - 利用逻辑回归预测在网贷平台上的投资

    本文链接:https://www.haomeiwen.com/subject/kvufbttx.html