金融贷款业务分析

1、业务背景

以网贷业务为背景,跟踪每个用户从进件到最终还款之间所涉及到的所有环节,以提高审核通过率和降低还款逾期率为目标,利用单变量分析法、用户群组分析法、用户行为路径分析法,深入进行用户分析,为产品的用户运营提供数据支持。网贷的一般流程如下:


网贷流程.PNG

2、数据分析

2.1 单变量分析

2.1.1 业务场景

假设当前有一份放贷监控报告,报告显示最近的放款合同的首逾率有走高趋势,此时就有了这样的业务需求:通过数据探查分析制定出可以有效降低首逾率的策略。

2.1.2 分析流程

(1)首先确定分析目标,制定出降低首逾率的风控策略;
(2)提取数据分析样本,提取出更多维度的客户数据,比如客户年龄、地区等等;
(3)筛选有效变量,通过计算提升度,来筛选出较优的变量;
(4)依据上一步拟定的策略,模拟一下策略执行后的首逾率降幅,选择首逾率降幅大的变量作为重点关注调整变量。

2.1.3 常用概念解释

(1)首逾率=首期逾期的合同数/首期到了应还款的总合同数
(2)单变量分析:对每个变量单独分析,查看其对逾期的影响,从而筛选出能够较好区分好坏客户的变量,以便制定对应策略。
(3)提升度=最坏分箱的首逾客户占总首逾客户的比例/该分箱的区间客户数占比。通俗的来说就是衡量拒绝最坏的那一部分客户之后,对整体的风险控制的提升效果。提升度越高,说明该变量可以更有效的区分好坏客户,能够更少的误据好客户。

2.1.4 具体实现

  • 数据集
    用到的数据结构如下:


    单变量分析-数据集结构.PNG

    查看数据总体情况:


    单变量分析-数据总体分布.PNG

    根据上图所示:芝麻信用分和信用卡额度使用率大部分缺失,分析这两个字段没什么意义,此处不做分析。
  • 计算业务指标
    首先按照实际业务需求,对每个字段进行分区,然后计算区间内的各大指标,此处用到的分析指标包括区间用户数、区间逾期用户数、区间未逾期用户数、区间用户占比、区间首逾率。结果如下:

    字段1-征信查询次数计算结果如下

    征信查询次数计算首逾率.PNG

    字段2-信用评级计算结果如下
    信用评级计算首逾率.PNG

    字段3-年龄计算结果如下
    年龄计算首逾率.PNG

    字段4-职业计算结果如下
    职业计算首逾率.PNG

    字段5-工作时间计算结果如下
    工作时间计算首逾率.PNG

  • 计算提升度

#近半年征信查询次数
bad_rate = dt_info.iloc[dt_info['区间首逾率'].idxmax()]['区间逾期用户数']/dt_info['区间逾期用户数'].sum()
num_rate = dt_info.iloc[dt_info['区间首逾率'].idxmax()]['区间用户占比']
bad_rate/num_rate

以征信查询次数计算提升度为例,得到各个字段的提升度结果为:
征信查询次数(1.95)、信用评级(1.71)、职业(1.07)、年龄(1.06)、工作时间(1.05)

  • 制定策略
    上述单变量分析的结果是:近半年征信查询次数和信用评级这两个变量的提升度最高,下面看一下把这两个变量的最坏分箱的用户拒绝后,对整体逾期的影响。
    (1)近半年征信查询次数
    把近半年征信查询次数最坏的分箱是查询次数>=21的这部分数据,假设把这部分用户全部拒绝掉,重新计算首逾率。
new_yq_times = dt_info['区间逾期用户数'].sum() - dt_info.iloc[dt_info['区间首逾率'].idxmax()]['区间逾期用户数']
new_times = dt_info['区间用户数'].sum()- dt_info.iloc[dt_info['区间首逾率'].idxmax()]['区间用户数']
new_yq_rate = new_yq_times/new_times
old_yq_rate = dt_info['区间逾期用户数'].sum()/dt_info['区间用户数'].sum()
print('拒绝近半年征信查询次数>=21的用户之后,当前首逾率为:{}'.format(new_yq_rate))
print('原始首逾率为:{}'.format(old_yq_rate))
print('首逾率下降了:{}'.format(old_yq_rate-new_yq_rate))

返回:
拒绝近半年征信查询次数>=21的用户之后,当前首逾率为:0.2900287361718911
原始首逾率为:0.307584667705824
首逾率下降了:0.017555931533932867
即拒绝近半年征信查询次数>=21的用户之后,首逾率下降了1.8%。
(2)信用评级
信用评级最坏的分箱为ERC这部分数据,假设把这部分用户全部拒绝掉,重新计算首逾率。结果如下:
拒绝信用评级为ERC的用户之后,当前首逾率为:0.2709728076700554
原始首逾率为:0.307584667705824
首逾率下降了:0.036611860035768606
即拒绝信用评级为ERC的用户之后,首逾率下降了3.7%。
综上:根据上面的分析过程,可见,单变量分析对降低首逾率是有效果的,分析结果可以为运营部门提供参考:建议重点关注信用评级为ERC的这部分用户,深入挖掘这部分用户申请时提交的资料(维度越多越好),以便制定对应策略,降低首逾率。

2.2 用户群组分析

2.2.1 业务场景

在做用户分析时,会有这样的场景:一个用户可能一月份申请贷款1次,二月份申请贷款2次,三四月没有申请,五月份又申请了。也就是对于用户来说他的数据是一个时间面数据,而且不同用户的时间面是不相同的,开始时间经历时间都不一样,而新用户和老用户经历的产品运营情况也不一样,因此我们分析的时候需要考虑到这个因素,而群组分析可以帮助我们在时间轴上对齐用户。

2.2.2 具体过程

  • 数据集
    用到的数据集结构如下:
    orderid:订单id
    orderdate:订单日期
    userid:用户id
    totalcharge:金额


    用户群组分析-数据集结构.PNG
  • 生成用户群组
    (1)新增订单月份字段orderperiod;按照每个用户的订单的最早时期,生成用户群组字段cohortgroup
#新字段-orderperiod,用户订单月份
df['orderperiod'] = df['orderdate'].apply(lambda x:x.strftime("%Y-%m"))
df.set_index("userid",inplace=True)
#用户群组字段
df["cohortgroup"] = df.groupby(level=0)['orderdate'].min().apply(lambda x:x.strftime("%Y-%m"))
df.reset_index(inplace=True)
df.head()

返回


群组分析-生成用户群组字段.PNG

(2)根据用户群组和月份字段进行分组统计(用户数量、订单数量、购买金额)

#根据用户群组和月份字段进行分组
grouped = df.groupby(['cohortgroup','orderperiod'])
#求每个用户群下每一个月份的用户数量、订单数量、购买金额
cohorts = grouped.agg({
    'userid':pd.Series.nunique,
    'orderid':pd.Series.nunique,
    'totalcharges':np.sum
}).rename(columns={'userid':'totalusers','orderid':'totalorders'})
cohorts.head()

返回


用户群组分析-用户群组统计.PNG

(3)对用户行为进行编号(首次申请编号为1,第二次申请编号为2,以此类推)

#把每个群组继续购买的日期字段进行改变
def cohort_period(df):
    #给首次购买日期编号,第二次购买编号为2,第三次购买编号为3,以此类推
    df['cohortperiod'] = np.arange(len(df)) + 1
    return df
cohorts = cohorts.groupby(level=0).apply(cohort_period)
#得到每个群组的用户量
cohorts.reset_index(inplace=True)
cohorts.set_index(['cohortgroup','cohortperiod'],inplace=True)
cohorts.head()

返回


用户群组分析-用户行为编号.PNG

(4)计算留存率

#得到每个群组的用户量,取第一个用户量数据,作为留存率的分母
cohort_group_size = cohorts['totalusers'].groupby(level=0).first()
#计算每个群组的留存
user_retention = cohorts['totalusers'].unstack(0).divide(cohort_group_size,axis=1)
user_retention

返回

用户群组分析-留存率.PNG

根据上图可知:
处于相同生命周期阶段的用户(垂直分析),留存率随着时间推移在逐渐降低;
通过比较不同的同期群,2009-02这个群组的二次留存率明显低于其他群组的二次留存率;首购时间越晚,留存期限或者说是复购频率越来越低。

2.3 用户行为路径分析

2.3.1 业务场景

以用户申请网贷为背景,以用户下载app为起点,详细查看后续路径的流向以及某个节点事件的转化情况,得到用户在网贷申请流程中各个模块的流转规律和特点,定位影响转化的主次因素,促进产品的优化与改进。

2.3.2 业务分析指标

  • PV:页面浏览量,每次用户对页面或标签的点击都会记一次PV
  • UV:独立访客量,。
  • 注册用户数:只有注册过的用户才有可能进一步发生转化行为。
  • 激活:激活用户代表一个用户在注册完成以后成功登录一次。
  • 申请用户数:指活跃用户中完成贷款申请行为的用户。
  • 放款用户数:指通过审核并成功放款的用户。
  • 复借用户数:指借款次数超过一次的用户数。
  • 放贷率:放贷用户数/申请用户数

2.3.3 具体过程

  • 数据集
    dt_flow(平台流量表),数据结构如下:


    用户行为路径-流量表.PNG

dt_check(贷款审核表),数据结构如下:


用户行为路径-贷款审核表.PNG
  • 计算放贷率
    按申请日期分组,分别计算新用户pt_1和老用户pt_2的放贷率,结果如下:


    用户行为路径-新用户放贷率.PNG

    用户行为路径-老用户放贷率.PNG
  • 计算各节点路径转化率
#连接贷款信息表和流量表
dt_1 = pd.merge(dt_flow,pt_1,on=None,left_on='日期',right_on='申请日期')
dt_2 = pd.merge(dt_1,pt_fj,on='申请日期').drop(['日期'],axis=1)
dt_2.head()

返回各节点流量数据


用户行为路径-各节点流量数据.PNG

统计汇总各节点流量数据

dt_3 = pd.DataFrame(dt_2.sum()[["PV","UV","注册数","激活数","新用户申请数","新用户放贷数"]]).reset_index().rename(columns={'index':'指标',0:'汇总'})
dt_3

返回


用户行为路径-统计汇总各节点流量数据.PNG

最后以漏斗图的形式展现各个节点的总体转化率:


用户行为路径-用户行为路径漏斗图.PNG

由上图可知,随着用户行为越深入,转化率越来越低,真正申请贷款的用户仅为2%,最终能贷到款的不到0.1%,最后四个节点的转化率还有很大的提升空间。

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