R语言-来自拍拍贷的数据探索
案例分析:拍拍贷是中国的一家在线借贷平台,网站撮合了一些有闲钱的人和一些急用钱的人。用户若有贷款需求,可在网站上选择借款金额。
本项目拟通过该数据集的探索,结合自己的理解进行分析,最终目的的是初步预测贷款的利率和哪些因素有关。
0.加载包
library(ggplot2)
library(gridExtra)
library(utf8)
library(dplyr)
library(tidyr)
library(GGally)
library(RColorBrewer)
library(caret)
library(knitr)
library(scales)
library(memisc)
1.探索数据集
lc <- read.csv('LC.csv',fileEncoding = 'utf8')
str(lc)
summary(lc)
结论:一共有328553个对象,21个变量
2.选择分析的变量
1. **ListingId**: 列表序号,为列表的唯一键。 2. **借款金额**: 列表成交总金额。 3. **借款期限**: 总的期数(按月计)。 4. **借款利率**: 年化利率(百分数)。 5. **借款成功日期**: 列表成交的日期。都在2015年1月1日以后。 6. **初始评级**: 列表成交时的信用评级。AAA为安全标,AA为赔标,A-F为信用等级。 7. **借款类型**: 分为'应收安全标',‘电商’,‘APP闪电’,‘普通’和‘其他’。 8. **是否首标**: 该标是否为借款人首标。 9. **年龄**: 借款人在该列表借款成功时的年龄。 10. **性别**: 该列表借款人性别。 11. **手机认证**: 该列表借款人手机实名认证是否成功。 12. **户口认证**: 该列表借款人户口认证是否成功。 13. **视频认证**: 该列表借款人视频认证是否成功。 14. **学历认证**: 该列表借款人学历认证是否成功。成功则表示有大专及以上学历。 15. **征信认证**: 该列表借款人征信认证是否成功。成功则表示有人行征信报告。 16. **淘宝认证**: 该列表借款人淘宝认证是否成功。成功则表示为淘宝店主。 17. **历史成功借款次数**: 借款人在该列表成交之前的借款成功次数。 18. **历史成功借款金额**: 借款人在该列表成交之前的借款成功金额。 19. **总待还本金**: 借款人在该列表成交之前待还本金金额。 20. **历史正常还款期数**: 借款人在该列表成交之前的按期还款期数。 21. **历史逾期还款期数**: 借款人在该列表成交之前的逾期还款期数。
3.数据处理
3.1 日期处理
lc <- separate(lc,借款成功日期,c('year','month','day'),sep='-',remove=F)
lc$year <- factor(lc$year)
lc$month <- factor(lc$month)
lc$day <- factor(lc$day)
3.2 认证评分(1表示认证成功,0表示未认证成功)
lc$认证评分 <- (lc$手机认证=='成功认证') + (lc$户口认证=='成功认证') + (lc$视频认证=='成功认证') +
(lc$学历认证=='成功认证') + (lc$征信认证=='成功认证') + (lc$淘宝认证=='成功认证')
3.3 客户评级
lc$初始评级 <- factor(lc$初始评级,levels=c('F','E','D','C','B','A'),ordered=T)
3.4 划分首标和非首标
#首标
lc_fb <- subset(lc,是否首标=='是') #非首标
lc_nfb <- subset(lc,是否首标=='否')
3.5 划分年龄阶段
lc$年龄阶段 <- cut(lc$年龄,breaks = c(17,20,25,30,35,40,45,50,56),include.lowest = T)
4.探索数据集
4.1 单变量分析
4.11 贷款人年龄
summary(lc$年龄)
ggplot(aes(x=年龄),data=lc)+
geom_histogram(binwidth = 1)+
scale_x_continuous(breaks = seq(15,60,1))+
geom_vline(xintercept = quantile(lc$年龄,probs = 0.95,na.rm = T),linetype='dashed',color='red')+
geom_vline(xintercept = quantile(lc$年龄,probs = 0.05,na.rm = T),linetype='dashed',color='red')
结论:95%的借贷人的年龄在21岁到43岁之间
4.1.2 贷款人性别
summary(lc$性别)
ggplot(aes(x=性别),data=lc)+
geom_bar()
结论:借贷人为男性的数量大约是女性的2倍
4.1.3 借款成功日期
lc_year <- ggplot(aes(x=year),data=lc)+geom_bar()
lc_month <- ggplot(aes(x=month),data=lc)+geom_bar()
lc_day <- ggplot(aes(x=day),data=lc)+geom_bar()
grid.arrange(lc_year,lc_month,lc_day)
结论:在2016年的1,8,9,10,11,12月份的借款的成功率较高
4.1.4 验证方式
lc_phone_cret <- ggplot(aes(x=手机认证),data=lc)+geom_bar()
lc_id_cret <- ggplot(aes(x=户口认证),data=lc)+geom_bar()
lc_video_cret <- ggplot(aes(x=视频认证),data=lc)+geom_bar()
lc_dipoma_cret <- ggplot(aes(x=学历认证),data=lc)+geom_bar()
lc_card_cret <- ggplot(aes(x=征信认证),data=lc)+geom_bar()
lc_shop_cret <- ggplot(aes(x=淘宝认证),data=lc)+geom_bar()
grid.arrange(lc_phone_cret,lc_id_cret,lc_video_cret,lc_dipoma_cret,lc_card_cret,lc_shop_cret)
结论:手机认证和学历认证的认证方式较多,其他认证方式较少
4.1.5认证评分
ggplot(aes(x=认证评分),data=lc)+
geom_histogram(binwidth = 1)+
scale_y_log10()
结论:6分全部成功认证成功的客户很少,一般的认证评分为1~2分
4.1.6 借款金额
summary(lc$借款金额)
ggplot(aes(x=借款金额),data=lc)+
geom_histogram(binwidth = .01)+
scale_x_log10(breaks = seq(100,30000,1000))+
scale_y_sqrt()+
geom_vline(xintercept = quantile(lc$借款金额,probs = 0.95,na.rm = T),linetype='dashed',color='red')+
geom_vline(xintercept = quantile(lc$借款金额,probs = 0.05,na.rm = T),linetype='dashed',color='red')
结论:借款金额的分布的95%的置信区间在700元到8000元之间
4.1.7 借款利率
summary(lc$借款利率)
ggplot(aes(x=借款利率),data=lc)+
geom_histogram(binwidth = 1)+
scale_x_continuous(breaks = seq(4,26,1))
结论:大多数借款的利率在20%或者22%
4.1.8 借款期限
summary(lc$借款期限)
ggplot(aes(x=借款期限),data=lc)+
geom_histogram(binwidth = 1)+
scale_x_continuous(breaks = seq(1,25,1))
结论:借款期限以短期借款为主,多为6个月或者12个月期限
4.1.9 历史成功借款次数
summary(lc$历史成功借款次数)
ggplot(aes(x=历史成功借款次数),data=subset(lc,lc$历史成功借款次数 >= 1))+
geom_histogram(binwidth = 1)+
coord_cartesian(xlim = c(0,40))+
scale_x_continuous(breaks = seq(1,40,1))+
scale_y_sqrt()+
geom_vline(xintercept = quantile(lc$历史成功借款次数,probs = 0.95,na.rm = T),linetype='dashed',color='red')
结论:95%的借贷人借款的次数少于7次
4.1.10 历史逾期还款期数
summary(lc$历史逾期还款期数)
ggplot(aes(x=历史逾期还款期数),data=subset(lc,lc$历史逾期还款期数>=1))+
geom_histogram(binwidth = 1)+
scale_y_sqrt()
结论:大部分借贷人未逾期
4.1.11 历史成功借款金额
quantile(subset(lc$历史成功借款金额,lc$历史成功借款次数>0),probs=c(.5,.75,.9,.95,1))
结论:95%的非首次借款人的历史成功借款金额不高于32332,75%不高于13082,50%不高于7473。结合历史成功借款次数,一些借款数较高的应该属于多次借款的总和
4.1.2 初始评级
ggplot(aes(x=初始评级),data=lc)+
geom_bar()
结论:大部分用户的初始评级是D,C级别
单变量分析总结论
数据集来源于拍拍贷的真实业务数据。该数据集是信用标的样本,信用标的成交时间从2015年1月1日至2017年1月30日,一共328553支信用标。
数据集从借款人和投资人两个角度提供的数据来分析借款人的还款情况和资金回收情况 通过探索数据集,发现以下特点:
1.借款金额主要分布在800~12000之间,用户以小额贷款为主 2.大部分用户的初始评级是C或D 3.大部分用户的认证方式以学历认证和手机认证为主 4.平台的借款利率在20%~22%之间 5.借款期限多以半年或1年为主 6.男性借款人数是女性的2倍 7.借款最多的年份是2016年,月份是1,8,9,10,11,12 8.95%非首标借款人的历史逾期还款期数不超过3次
4.2 双变量分析
4.2.1 借款利率和初始评级的关系(首标)
ggplot(aes(x=初始评级,y=借款利率),data=lc_fb)+
geom_boxplot()+
labs(x='初始评级(首标)',y='借款利率(首标)')
结论:在首标贷款中,初始评级越高,贷款利率越低
4.2.2 借款类型和利率的关系(非首标)
jklx_cspj_box_fb <- ggplot(aes(x=借款类型,y=as.numeric(初始评级)),data=lc_fb)+
geom_boxplot()+
scale_y_continuous(breaks = seq(1,6,1),labels = c('F','E','D','C','B','A'))+
labs(x='借款类型(首标)',y='初始评级(首标)') jklx_jkll_box_fb <- ggplot(aes(x=借款类型,y=借款利率),data=lc_fb)+
geom_boxplot()+
labs(x='借款类型(首标)',y='借款利率(首标)') grid.arrange(jklx_cspj_box_fb,jklx_jkll_box_fb,ncol=1)
结论:电商用户的初始评级是C,B,所以获得了更低的利率,APP闪电,普通,其他类型的用户的初始评级是D,所以利率比电商高
4.2.3 初始评级和认证评分的关系
ggplot(aes(x=初始评级),data=lc_fb)+
geom_bar(aes(fill=as.factor(认证评分)),position = 'fill')+
scale_fill_brewer(palette = 'green')
结论:在首标部分,并没有说明认证评分越高,利率越低的趋势
4.2.4初始评级和贷款利率的关系(非首标)
ggplot(aes(x=初始评级,y=借款利率),data=lc_nfb)+
geom_boxplot()+
labs(x='初始评级(非首标)',y='借款利率(非首标)')
结论:在非首标部分借款利率和初始评级有很高的关系
4.2.5 借款类型和利率的关系(非首标)
jklx_cspj_box_nfb <- ggplot(aes(x=借款类型,y=as.numeric(初始评级)),data=lc_nfb)+
geom_boxplot()+
scale_y_continuous(breaks = seq(1,6,1),labels = c('F','E','D','C','B','A'))+
labs(x='借款类型(非首标)',y='初始评级(非首标)') jklx_jkll_box_nfb <- ggplot(aes(x=借款类型,y=借款利率),data=lc_nfb)+
geom_boxplot()+
labs(x='借款类型(非首标)',y='借款利率(非首标)') grid.arrange(jklx_cspj_box_nfb,jklx_jkll_box_nfb,ncol=1)
结论:非首标借款下电商用户的初始评级是C,B,所以获得了更低的利率,APP闪电,普通,其他类型的用户的初始评级是D,所以利率比电商高
4.2.6 历史成功借款金额和借款金额的关系(非首标)
ggplot(aes(x=历史成功借款金额,y=借款金额),data=lc_nfb)+
geom_point(alpha=1/20,position = 'jitter')+
scale_x_log10()+
scale_y_log10()+
geom_smooth()+
labs(x='历史成功借款金额(非首标)',y='借款金额(非首标)')
结论:随着历史成功借款金额的增长,借款金额也在增长,两者正相关,当超过10000元的时候,幅度变化很大,表示历史借款不停的叠加,最后需要还的钱会很多
4.2.7 总应还本金历史成功借款金额(非首标)
ggplot(aes(x=历史成功借款金额,y=总待还本金),data=subset(lc_nfb,总待还本金>100))+
geom_point(alpha=1/20,position = 'jitter')+
scale_x_log10()+
scale_y_log10()+
geom_smooth()+
labs(x='历史成功借款金额(非首标)',y='总待还本金(非首标)')
结论:借的越多,还的越多
4.2.8 年龄阶段和借款金额的关系
ggplot(aes(x=年龄阶段,y=借款金额),data=lc)+
geom_boxplot()+
scale_y_log10()
结论:17~20岁的青年借款数量较少,25~30岁的成年人借款金额增大,30~45岁之间的高额借款的比例增多,55~60之间的借款金额保持不变
4.2.9 年龄阶段和初始评级的关系
ggplot(aes(x=年龄阶段,y=as.numeric(初始评级)),data=lc)+
geom_boxplot()+
scale_y_continuous(breaks = seq(1,6,1),labels = c('F','E','D','C','B','A'))+
labs('初始评级')
结论:二者没有太大的关系
4.3.0 贷款利率和借款总金额的关系
ggplot(aes(x=借款金额,y=借款利率),data=lc)+
geom_point(alpha=1/2,position = 'jitter')+
scale_x_log10()+
geom_smooth()
结论:随着借款金额的增多,利率呈下降趋势
双变量探索总结论:
当初始评级上升时,借款利率呈现下降趋势。在上面初始评级和借款利率的箱线图中,E和F等级中,借款利率25%的分位数是22,75%的分位数分别是23和24;
初始等级上升至D后,25%分位数、中位数和75%分位数均为22;等级升级至A时,分位数变为16。说明初始评级和借款利率具有明显的较强的关系。 通过分析贷款利率可以得出以下结论:
1.贷款利率和信用评级呈负相关 2.贷款利率和年龄无关 3.电商平台的信用评级较高,所以获得的利率较低 4.借款金额增多,利率逐渐下降
4.3 多变量分析
4.3.1 借款金额,利率,借款类型的关系
ggplot(aes(x=借款利率,y=借款金额,color=借款类型),data=lc)+
geom_point(position = 'jitter')+
scale_y_log10()
结论:app闪电的借款利率较高,但是涉及的金额较少,电商类型的借款利率较低,但是金额较大.普通类型的借款数额相对app闪电较多但利率高,其他类型的借款数额较大利率也比较低
4.3.2 信用评分,利率和借款总金额的关系
ggplot(aes(x=借款利率,y=借款金额,color=初始评级),data=lc)+
geom_point(position = 'jitter')+
scale_y_log10()
结论:初始评级越高,借款利率越低,同时评级高的客户更倾向于大额借款
4.3.3 认证评分,利率,借款金额的关系
ggplot(aes(x=借款利率,y=借款金额,color=认证评分),data=lc)+
geom_point(position = 'jitter')+
scale_y_log10()
结论:证评分高的客户借款的金额较大,但是借款利率和认证评分之间没有太大的关联
4.3.4 借款期限,利率,借款金额的关系
ggplot(aes(x=借款利率,y=借款金额,color=借款期限),data=lc)+
geom_point(position = 'jitter',alpha=1/5)+
scale_y_log10()
结论:借款的期限越长,利率越高,当借款的额度较大时,期限越短,利率也低,可能先是大量的资金进行投资,然后在还款利率最低的时候还款
4.3.5 借款利率,借款期限,借款金额的关系
ggplot(aes(x=借款利率,y=借款期限,size=借款金额,color=借款类型),data=lc)+
geom_point(position = 'jitter')
结论:App闪电贷的借款金额较小,并且都是以短期为主,且利率较高.普通贷款和其他贷款的利率的贷款时间相对较长,但是普通用户的利率比其他贷款的利率高很多电商贷款的利率较低,同时期限较短,是一个性 价比高的的贷款模式
多变量分析汇总
1.借款利率和信用评级之间呈负相关 2.借款利率和是借款期限程正相关 3.借款利率和认证评分之间没有太大的关系 4.借款利率和借款平台之间也有关系App闪电贷和普通借款的利率较高,其他借款和电商类借款的利率较低 5.借款金额和借款利率呈负相关
5.拟合因子,验证相关性
m1 <- lm(I(借款利率)~I(初始评级),
data=subset(lc,lc$借款金额>0)) m2 <- update(m1,~ . + 认证评分)
m3 <- update(m2,~ . + 借款金额)
m4 <- update(m3,~ . + 借款类型)
mtable(m1,m2,m3,m4)
结论:贷款利率和初始评级和贷款方式最为紧密
数据集:https://github.com/Mounment/R-Project
R语言-来自拍拍贷的数据探索的更多相关文章
- R语言-来自Prosper的贷款数据探索
案例分析:Prosper是美国的一家P2P在线借贷平台,网站撮合了一些有闲钱的人和一些急用钱的人.用户若有贷款需求,可在网站上列出期望数额和可承受的最大利率.潜在贷方则为数额和利率展开竞价. 本项目拟 ...
- 【R笔记】R语言进阶之4:数据整形(reshape)
R语言进阶之4:数据整形(reshape) 2013-05-31 10:15 xxx 网易博客 字号:T | T 从不同途径得到的数据的组织方式是多种多样的,很多数据都要经过整理才能进行有效的分析,数 ...
- 写论文,没数据?R语言抓取网页大数据
写论文,没数据?R语言抓取网页大数据 纵观国内外,大数据的市场发展迅猛,政府的扶持也达到了空前的力度,甚至将大数据纳入发展战略.如此形势为社会各界提供了很多机遇和挑战,而我们作为卫生(医学)统计领域的 ...
- R语言进阶之4:数据整形(reshape)
一.通过重新构建数据进行整形 数据整形最直接的思路就把数据全部向量化,然后按要求用向量构建其他类型的数据.这样是不是会产生大量的中间变量.占用大量内存?没错.R语言的任何函数(包括赋值)操作都会有同样 ...
- 大数据基础--R语言(刘鹏《大数据》课后习题答案)
1.R语言是解释性语言还是编译性语言? 解释性语言 2.简述R语言的基本功能. R语言是一套完整的数据处理.计算和制图软件系统,主要包括以下功能: (1)数据存储和处理功能,丰富的数据读取与存 ...
- R语言操作mysql上亿数据量(ff包ffbase包和ETLUtils包)
平时都是几百万的数据量,这段时间公司中了个大标,有上亿的数据量. 现在情况是数据已经在数据库里面了,需要用R分析,但是完全加载不进来内存. 面对现在这种情况,R提供了ff, ffbase , ETLU ...
- 吴裕雄--天生自然 R语言开发学习:导入数据
2.3.6 导入 SPSS 数据 IBM SPSS数据集可以通过foreign包中的函数read.spss()导入到R中,也可以使用Hmisc 包中的spss.get()函数.函数spss.get() ...
- 如何使用R语言解决可恶的脏数据
转自:http://shujuren.org/article/45.html 在数据分析过程中最头疼的应该是如何应付脏数据,脏数据的存在将会对后期的建模.挖掘等工作造成严重的错误,所以必须谨慎的处理那 ...
- R语言学习笔记:取数据子集
上文介绍了,如何生成序列,本文介绍一下如何取出其数据子集 取出元素的逻辑值 > x<-c(0,-3,4,-1,45,90,5) > x>0 [1] FALSE FALSE T ...
随机推荐
- 关于JavaScript的事件处理一些知识
<JS事件处理> Event对象详细信息:http://www.w3school.com.cn/jsref/dom_obj_event.asp JS原生支持3中绑定事件方式: 1.以标签属 ...
- 使用Scanner获取键盘输入
使用Scanner类可以很方便地便获取用户的键盘输入,Scanner是一个基于正则表达式的文本扫描器,它可以从文件.输入流 .字符串中解析出基本类型值和字符串值.Scanner类提供了多个构造器,不同 ...
- Java String使用总结
1 == 与 equals() 使用==来比较两个primitive主数据类型在意义上相等(是否带有相同的字节组合),或者判断两个引用(如String变量)是否引用同一个对象.使用equals()来判 ...
- LNMP搭建03 -- 编译安装PHP
[编译安装PHP] 为了顺利安装PHP,先安装下面这些: [CentOS 编译 PHP 前要做的事情] yum install -y gcc gcc-c++ make zlib zlib-deve ...
- 940A Points on the line
传送门 题目大意 给你n和d还有n个数,计算最少删除几个点可以是最大点与最小点之差小于等于d 分析 先对所有点排序,枚举每一个点ai到ai+d中有几个点,答案即n-其中最大的值 代码 #include ...
- 存个emacs配置
emacs配置 (global-set-key [f9] 'compile-file) (global-set-key [f10] 'gud-gdb) (global-set-key (kbd &qu ...
- 加入GIMPS项目,寻找梅森素数!
截止到目前为止人类共找到了50个梅森素数,其中最后16个梅森素数都是通过GIMPS项目找到的. 为了激励人们寻找梅森素数和促进网格技术发展,总部设在美国旧金山的电子前沿基金会(EFF)于1999年3月 ...
- 《InsideUE4》UObject(六)类型系统代码生成重构-UE4CodeGen_Private
读的不如写的快 引言 在之前的<InsideUE4>UObject(四)类型系统代码生成和<InsideUE4>UObject(五)类型系统收集章节里,我们介绍了UE4是如何根 ...
- 消息队列(MQ)入门-activemq,代码级别
第一种:activemq: 1.从官网下载apache-activemq-5.15.3-bin.zip并解压: 2.启动activemq, CMD--/bin/activemq start ,访问12 ...
- ASP.NET Core Logging in Elasticsearch with Kibana
在微服务化盛行的今天,日志的收集.分析越来越重要.ASP.NET Core 提供了一个统一的,轻量级的Logining系统,并可以很方便的与第三方日志框架集成.我们也可以根据不同的场景进行扩展,因为A ...