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

背景:

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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • Swift 开发中的一些小的技巧 刚开始的时候, 特别好奇大厂是怎么搞的, 他们的项目长什么样子, 他们用哪些库....
    CepheusSun阅读 517评论 4 7
  • The bird-song is the echo of the morning light back from ...
    我是呜呜阅读 677评论 0 1
  • 晚饭后,跑步打篮球,儿子有一周左右的时间没去坚持。感赏儿子今天有出去了,尽管出来很晚,但出去总比没出好。 因开学以...
    玫瑰铿锵阅读 168评论 0 0
  • 早就知道墨西哥是仙人掌的故乡,后来查了资料发现仙人掌总共有2000多个品种,而墨西哥就有一半以上,因此墨西哥也享有...
    AMIGO616阅读 1,130评论 3 6