互金公司综合专题数据分析

[复制链接]
[投诉]
198 0
online_moderator 爱卡网小编手机认证 实名认证 发表于 2022-8-3 13:05:00 | 只看该作者 |只看大图 |阅读模式 打印 上一主题 下一主题
一、项目背景       根据拍拍贷真实业务数据,即2015-01-01到2017-01-30之间所有信用标的10%的样本,分析拍拍贷用户画像和用户贷后还款情况,并基于随机森林算法构建判断非首标用户首期还款是否逾期的预测模型。
二、数据(一) LC.csv(数据大小:50.7MB)
       LC表为标的特征表,每条数据记录代表一支信用标的。共有21个字段,数据全部为成交当时可以获得的信息。
字段序号字段名字段注释1listingid列表序号,为列表的主键。2借款金额列表成交总金额。3借款期限总的期数(按月计)。4借款利率年化利率(百分数)。5借款成功日期列表成交的日期。都在2015年1月1日以后。6初始评级列表成交时的信用评级。信用等级A-F。7借款类型分为电商、APP闪电、普通和其他。8是否首标该标是否为借款人首标。9年龄借款人在该列表借款成功时的年龄。10性别该列表借款人性别。11手机认证该列表借款人手机实名认证是否成功。12户口认证该列表借款人户口认证是否成功。13视频认证该列表借款人视频认证是否成功。14学历认证该列表借款人学历认证是否成功。成功则表示有大专及以上学历。15征信认证该列表借款人征信认证是否成功。成功则表示有人行征信报告。16淘宝认证该列表借款人淘宝认证是否成功。成功则表示为淘宝店主。17历史成功借款次数借款人在该列表成交之前的借款成功次数。18历史成功借款金额借款人在该列表成交之前的借款成功金额。19总待还本金借款人在该列表成交之前待还本金金额。20历史正常还款期数借款人在该列表成交之前的按期还款期数。21历史逾期还款期数借款人在该列表成交之前的逾期还款期数。(二) LP.csv(数据大小:198MB)
       LP表为标的还款计划和还款记录表,每支信用标的每期还款为一条记录。 还款状态更新至2017年2月22日,共有10个字段。
字段序号字段名字段注释1listingid列表Id,主键2期数期数Id,主键3还款状态到记录日的当期状态,分为0-‘未还款’,1-‘已正常还款’,2-‘已逾期还款’,3-‘已提前还清该标全部欠款’,4-‘已部分还款’4应还本金当期计划还款本金部分5应还利息当期计划还款利息部分6剩余本金到记录日,仍未还清的当期本金7剩余利息到记录日,仍未还清的当期利息8到期日期当期应还款日9还款日期当期最近一次实际还款日期10recorddate记录日三、数据浏览和数据清洗(一) 读取和查看数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
pd.set_option("display.max_columns",50)
LC=pd.read_csv("D:\\data\\LC.csv")
LP=pd.read_csv("D:\\data\\LP.csv")
def set_summary(df):
     print("数据浏览:")
     print("记录数:{0}\t维度数:{1}".format(df.shape[0],df.shape[1]))
     print("-"*50)
     print(df.head())
     print("-"*50)
     print("数据描述性统计:")
     print(df.describe())
     print("数据类型:")
     print(df.dtypes)
     print("-"*50)
set_summary(LC)
记录数:328553  维度数:21
set_summary(LP)
记录数:3203276 维度数:10(二) 数据质量检查和处理
缺失值检查与处理def na_summary(df):
     na_cols=df.isnull().any(axis=0)
     na_lines=df.isnull().any(axis=1)
     na_cols_num=df.isnull().sum()   
     print("存在缺失值的列:")
     print(na_cols)
     print("-"*50)
     print("各列缺失值数量:")
     print(na_cols_num)
     print("-"*50)
     print("存在缺失值的记录行数量:")
     print(na_lines.sum())
     print("-"*50)
na_summary(LC)  # 无缺失值
na_summary(LP)  # 无缺失值2. 重复值检查与处理
len(set(LC["ListingId"]))   # 无单号重复
np.sum(LC.duplicated())  # 无记录重复3. 转换日期格式
LC["借款成功日期"]=pd.to_datetime(LC["借款成功日期"])
LP["到期日期"]=pd.to_datetime(LP["到期日期"])
LP["还款日期"]=pd.to_datetime(LP["还款日期"].replace("\\N", "2017-1-31"))
LP["recorddate"]=pd.to_datetime(LP["recorddate"])四、用户画像分析(一) 分析思路
      根据标的特征表LC数据,使用tableau对借款用户进行画像分析,分析思路参见下图。
互金公司综合专题数据分析
(二) 分析过程
互金公司综合专题数据分析
  由上图可知:
性别结构方面,男性用户借款金额占总借款金额的比重约为69%,是女性用户的2倍多,男性用户构成了借款的主力;借款类型方面,“普通”占总借款金额比重最高,约占42.6%,“电商”占总借款金额比重最低,仅约占8.5%,相比占比排名倒数第二的“APP闪电”都存在一定距离;新老客户方面,老客户贡献了大约2/3的总借款金额,老客户留存情况不错,复借情况良好;学历结构方面,大专以下学历用户贡献了约62%的总借款金额,是借款主力,其原因可能是大专以下学历用户有较大的用户人数基础。

互金公司综合专题数据分析
      由上图可知:不同初始评级在借款金额和标的数量这两个方面的分布基本一致,呈现近似正态分布特点。C级和D级在借款金额和标的数量方面占比最大,而A级和F级则表现较小,C级和D级是主要的借款用户群体。

互金公司综合专题数据分析
       由上图可知:不同借款期限在借款金额和标的数量两个方面的分布基本一致,10-12期占业务规模比重最大,4-6期占业务规模比重次之,这两种期限占业务规模的比重合计高达90%以上。

互金公司综合专题数据分析
采用表横穿方式计算比例      由上图可知:在各个年龄段,男性用户占总借款金额比重都要超过女性用户,21-35岁的男性用户贡献了约54%的借款金额。这,21-35岁的青年男性用户是借款的主力。

互金公司综合专题数据分析
采用区间横穿方式计算比例   由上图可知:
老客户在2001-3000元标的数量占比最高,其次是3001-4000元,两个区间占老客户标的数量约为41.8%;新客户在5000元以上的标的数量占比最高,其次是4001-5000元,两个区间占新客户标的数量约为68%。这,与老客户相比,新客户更倾向于较大额度的借款。

互金公司综合专题数据分析
采用区间横穿方式计算比例       由上图可知:大专及以上学历在5000元以上的标的数量占比约为34%,高于大专以下学历的22.1%。在1000元以下、1001-2000元这两个较低的借款区间,大专及以上学历在标的数量上占比上,都低于大专以下学历。这,大专及以上学历更倾向于较高额度的借款。
(三) 结论总结
性别和年龄方面,21-35岁的青年男性用户是借款的主力;新老用户方面,老用户是借款主力,更偏好于4000元以下的借款。对于新用户,则更偏好于4000元以上的借款;学历方面,大专以下学历是借款主力,但大专及以上学历占总借款金额比重也不低,且更偏好于较高额度的借款;借款类型方面,用户最倾向的借款类型是“普通”,而“电商”则发育不足;初始评级方面,C级和D级用户是借款主力,A级和F级占业务规模比重较小;借款期限方面,用户借款期限偏好10-12期,其次是4-6期。13期以上占业务规模比重较低。五、贷后还款情况分析(一) 分析思路
        根据LC表结合LP表数据,使用python分析借款用户贷后还款情况,分析思路参见下图。
互金公司综合专题数据分析
(二) 分析过程
1. 还款习惯分析
LCLP=pd.merge(LC,LP,how="outer",on="ListingId")
LCLP["逾期天数"]=(LCLP["还款日期"]-LCLP["到期日期"])/pd.Timedelta(days=1)
LCLP["逾期天数"] = np.where(LCLP["逾期天数"]       由上图可知:正常还款占到期应还金额的比重最高,约占75%,为主要还款方式。逾期还款和提前一次结清则分别约占14%和11%。
2. 逾期率分析
period=LCLP_1[["ListingId","期数"]].groupby("ListingId").max().reset_index()
LCLP_2=pd.merge(LCLP_1,period,how="inner",on=["ListingId","期数"])
LCLP_2["当前是否逾期"]=np.where(LCLP_2["逾期天数"]>0,1,0)
LCLP_2["当前是否逾期"].value_counts()
LCLP_2=LCLP_2.rename(columns={"期数":"记录日前最近期数"})
print("记录日当前逾期率:\n",(LCLP_2["当前是否逾期"].value_counts()[1]/LCLP_2["当前是否逾期"].count()).round(2))                                            记录日当前借款标的逾期统计
逾期未逾期逾期率3827927925712%age_label=["16-20","21-25","26-30","31-35","36-40","41岁(含)以上"]
amount_label=['1000元以下','1001-2000','2001-3000', '3001-4000', '4001-5000','5001-6000','6000以上']
kind_label=['APP闪电', '其他', '普通', '电商']
rank_label=['A', 'B', 'C', 'D', 'E', 'F']
age_interval=pd.cut(LC["年龄"],bins=[15,20,25,30,35,40,60],labels=age_label)
amount_interval=pd.cut(LC["借款金额"], bins=[0,1000,2000,3000,4000,5000,6000,500000], labels=amount_label)
LC_new=pd.concat([LC["ListingId"],age_interval,amount_interval],axis=1)
LC_new=LC_new.rename(columns={"年龄":"年龄分组","借款金额":"借款金额分组"})
LCLP_2=pd.merge(LCLP_2,LC_new,on="ListingId",how="inner")
LCLP_2.head()
def function(label,column):
     group_data=[ ]
     overdue_rate=[ ]
     for i in label:
         data=LCLP_2[LCLP_2[column]==i]
         group_data.append(data)
     for j in group_data:
        overdue_rate_group=(j[j["当前是否逾期"]==1] ["ListingId"].count()/len(j)).round(4)
        overdue_rate.append(overdue_rate_group)
     plt.figure(figsize=(10,5))
     plt.bar(label,overdue_rate)
     plt.title("不同{0}逾期率".format(column))
     for (m, n) in zip(label, overdue_rate):
           plt.text(m, n+0.001, "%.2f%%"%(n*100), ha='center', va='bottom', fontsize=10)
function(label=amount_label,column="借款金额分组")
function(label=age_label,column="年龄分组")
function(label=kind_label,column="借款类型")
function(label=rank_label,column="初始评级")
互金公司综合专题数据分析
        由上图可知:不同借款金额分组逾期率总体上相差不大,5001-6000元逾期率最高,约为13%,1000元以下逾期率最低,约为11%。
互金公司综合专题数据分析
        由上图可知:逾期率随借款用户年龄增大而减小,16-20岁、21-25岁逾期率最高,分别约为14.7%和13%,年龄愈低的分组表现出愈高的逾期率。原因可能是,大部分年轻人收入较低且不稳定,又倾向于超前消费。
互金公司综合专题数据分析
          由上图可知:“电商”借款类型逾期率最高,约为13.9%,而逾期率最低的借款类型是“APP闪电”,约为11%。“APP闪电”借款类型占总借款金额比重并不算小,逾期率又最低,是比较优质的渠道,建议加强渠道合作。“电商”借款类型占总借款金额比重最低,逾期率又最高,渠道质量较差,建议实施渠道优化。
互金公司综合专题数据分析
       由上图可知:逾期率随初始评级下降而增高,初始评级对逾期率有较好的预测效果。F级、E级逾期率最高,分别约为23.5%和19.7%,而A级逾期率最低,约为9%。建议对E级和F级用户实施借款限制,重点跟踪其贷后还款情况。
3. 催回率分析
LCLP_1["剩余金额"]=LCLP_1["剩余本金"]+LCLP_1["剩余利息"]
LCLP_1["已还金额"]=LCLP_1["应还金额"]-LCLP_1["剩余金额"]
LCLP_delay=LCLP_1[LCLP_1["逾期天数"]>0]   #提取全部逾期记录数据
LCLP_delay_1=LCLP_delay[LCLP_delay["逾期天数"]由上图可知:
不同年龄分组方面,21-25岁逾期催回率最高。以35岁为年龄分界,35岁之前各分组在逾期催回率的表现上,要优于35岁之后的分组。这,35岁之后年龄较大用户虽然逾期率较低,但一旦发生逾期,相比年轻群体,将更难以催回逾期欠款;不同借款金额分组在逾期催回率上的分布较为均匀,1000元以下借款的逾期催回率最高,约有85%;不同借款类型方面,“APP闪电”逾期催回率最高,最低的则是“电商”;不同初始评级方面,随着初始评级向更低级别变化,逾期催回率表现得愈来愈差。逾期催回率表现的最高的是A级,最低的则是E级和F级。LCLP_delay_1["逾期天数"].value_counts().sort_index()   # 逾期天数类别正好有90天
LCLP_delay_2=LCLP_delay_1[["逾期天数","应还金额","已还金额"]].groupby("逾期天数").sum().reset_index()
day_label=["10天以下","11-20","21-30","31-40","41-50","51-60","61-70","71-80","81-90"]
interval=pd.cut(LCLP_delay_2["逾期天数"], bins=[0,10,20,30,40,50,60,70,80,90],
labels=day_label)
del LCLP_delay_2["逾期天数"]
LCLP_delay_3=pd.concat([LCLP_delay_2,interval],axis=1)
LCLP_delay_3=LCLP_delay_3.rename(columns={"逾期天数":"逾期天数分组"})
collection_rate_interval=LCLP_delay_3.groupby("逾期天数分组")["已还金额"]. sum()/LCLP_delay_3.groupby("逾期天数分组")["应还金额"].sum()
plt.figure(figsize=(10,5))
plt.bar(day_label,collection_rate_interval)
plt.title("不同逾期天数催回率")
for (m, n) in zip(day_label,collection_rate_interval):
    plt.text(m, n+0.001, "%.2f%%"%(n*100), ha='center', va='bottom', fontsize=10)
互金公司综合专题数据分析
       由上图可知:随着逾期天数的增加,逾期催回率呈现下降趋势。逾期10天以内,经催收可以收回98.40%的逾期金额,逾期81-90天,催收仅能收回17.25%的逾期金额。
(三) 结论总结与策略建议
还款习惯方面,正常还款属于主流还款方式,但逾期还款方式,包含逾期不还、逾期全部还、逾期部分还三种方式,仍占有业务规模14%的比例,需要引起注意;用户年龄方面,逾期率随借款用户年龄增大而减小,16-25岁的年轻群体逾期率较高,需要重点跟踪其贷后还款情况。相比年轻人群体,催回率则在35岁以上人群表现出较小的特征,一旦发生逾期,应加强催收;借款类型方面,“APP闪电”逾期率低,催回率高,渠道较为优质,而“电商”则正好相反。建议加强“APP闪电”渠道合作,并优化“电商”渠道;初始评级方面,评级愈高,逾期率愈低且催回率愈高,评级愈低,逾期率愈高且催回率愈低。考虑到E级和F级过高的逾期率和较低的催回率,建议控制这两个评级用户的借款规模,以减少坏账损失;借款金额方面,1000元以下借款拥有最低的逾期率和最高的催回率,可加大发展千元以下小额贷款的力度;逾期天数方面,逾期天数愈久,催回率愈低,逾期两月以上,催回率不到1/3。建议催收工作注意催收时间节点,并建立关于催收时间节点的绩效KPI。六、信用标的首期违约预测模型(一) 导入相关库
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.pipeline import Pipeline
from sklearn.feature_selection import SelectPercentile
from sklearn.model_selection import  StratifiedKFold
from imblearn.under_sampling import RandomUnderSampler(二) 数据预处理
1. 输入变量处理
LC_1=LC.copy()
LC_2=LC_1[LC_1["是否首标"]=="否"]  #只选择非首标用户
LC_2.loc[LC_2["手机认证"]=="未成功认证","手机认证"]=0
LC_2.loc[LC_2["手机认证"]=="成功认证","手机认证"]=1
LC_2.loc[LC_2["户口认证"]=="未成功认证","户口认证"]=0
LC_2.loc[LC_2["户口认证"]=="成功认证","户口认证"]=1
LC_2.loc[LC_2["视频认证"]=="未成功认证","视频认证"]=0
LC_2.loc[LC_2["视频认证"]=="成功认证","视频认证"]=1
LC_2.loc[LC_2["学历认证"]=="未成功认证","学历认证"]=0
LC_2.loc[LC_2["学历认证"]=="成功认证","学历认证"]=1
LC_2.loc[LC_2["征信认证"]=="未成功认证","征信认证"]=0
LC_2.loc[LC_2["征信认证"]=="成功认证","征信认证"]=1
LC_2.loc[LC_2["淘宝认证"]=="未成功认证","淘宝认证"]=0
LC_2.loc[LC_2["淘宝认证"]=="成功认证","淘宝认证"]=1
LC_2.loc[LC_2["性别"]=="女","性别"]=0
LC_2.loc[LC_2["性别"]=="男","性别"]=1
LC_2["认证成功次数"]=LC_2["手机认证"]+LC_2["户口认证"]+LC_2["视频认证"]+LC_2["学历认证"]+LC_2["征信认证"]+LC_2["淘宝认证"]
LC_2["历史逾期还款期数占比"]=LC_2["历史逾期还款期数"]/(LC_2["历史正常还款期数"]+LC_2["历史逾期还款期数"])
LC_2["总待还本金占比"]=LC_2["总待还本金"]/LC_2["历史成功借款金额"]
LC_2.isnull().sum()   #历史逾期还款期数占存在缺失值
LC_2[LC_2["历史逾期还款期数占比"].isnull()]   # 定位存在缺失值的数据记录,发现非首标用户存在历史正常还款期数和历史逾期还款期数同时为0的情形
LC_2[LC_2["历史逾期还款期数占比"].isnull()].shape   # 存在缺失值的数据记录并不多
LC_2=LC_2.dropna()
del LC_2["借款成功日期"]   #该特征无意义
del LC_2["是否首标"]   #该特征已经无意义
LC_3=pd.get_dummies(LC_2)
LC_3.head()2. 产生输出变量
LCLP_3=LCLP_1.copy()   
first_period=LP[["ListingId","期数"]].groupby("ListingId").min().reset_index()
LCLP_4=pd.merge(LCLP_3,first_period,on=["ListingId","期数"],how="inner")
LCLP_4["是否首逾"]=np.where(LCLP_4["逾期天数"]>0,1,0)3. 数据不平衡处理
LC_new=pd.merge(LC_3,LCLP_4[["ListingId","是否首逾"]],on="ListingId",how="inner")
LC_new=LC_new.set_index("ListingId")
LC_new.head()
LC_new.corr()["是否首逾"].sort_values(ascending=False)  # 输入变量与输出变量之间大多呈现弱相关关系
LC_new["是否首逾"].value_counts()  #数据不均衡首期逾期首期未逾期21008209671X, y = LC_new.iloc[:,:-1],LC_new['是否首逾']
model_sample=RandomUnderSampler()
X_sample,y_sample=model_sample.fit_sample(X,y)
X_sample_train, X_sample_test, y_sample_train, y_sample_test = train_test_split(X_sample, y_sample, test_size=0.3, random_state=0)(三) 构建模型和预测评价
pipe=Pipeline([("select",SelectPercentile(percentile=70)),("classifier",RandomForestClassifier(n_estimators=50,random_state=0))])  
param_grid = {"classifier__max_depth":[5,10,15,20,15,30],"classifier__min_samples_split":[10,20,30,50,80,100]}
grid=GridSearchCV(pipe,param_grid,scoring='roc_auc',cv=StratifiedKFold(5),n_jobs=-1)
grid.fit(X_sample_train,y_sample_train)
grid.score(X_sample_test,y_sample_test)结论:仅基于标的特征表LC数据,对首期还款是否会产生逾期情况的预测精度达到71%。

版权声明:本站部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们将及时更正、删除,谢谢!


weinxin
爱卡网站长——亚熙哥
若开通会员无法使用
请扫码联系爱卡网站长
本平台不放贷、也不接网贷代做!
上一篇:身份证借钱100%下,贷款哪里利息低,最安全可咨询了解!
下一篇:长沙抵押贷款哪家银行最便宜,哪里可以贷款一百元秒到(评测)
楼主热帖
分享到:  QQ好友和群QQ好友和群
收藏
收藏0
支持
支持0
反对
反对0
122329my40v0m19mm281y0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 qq_login wechat_login1

本版积分规则

avatar

0关注

26粉丝

1091904帖子

发布主题
精选帖子
热帖排行
推荐
162349x8b848x8bpq4qaaz
客服咨询

155-5555-5876

服务时间 9:00-24:00

爱卡网APP下载

app

知识改变命运,技术改变未来!

  • 客服Q Q:70079566     微信:79710
  • 工作时间:周一到周日     9:00-22:00
  • 加入爱卡网VIP会员,菜鸟也能变大神!
15555555876

关注我们

  • app
  • app
  • app
本站唯一官网:www.7177.cn Copyright    2010-2021  爱卡网  Powered by Discuz!  技术支持:亚熙工作室   浙ICP备17046104号-1