(金融)线上借贷业务用户行为转化项目——数据分析

(金融)线上借贷业务用户行为转化与风控用户项目——数据分析

用户行为路径分析
  • 一种监测用户流向,从而统计产品使用深度的分析方法。
  • 它主要根据每位用户在App或网站中的点击行为日志,分析用户在App或网站中各个模块的流转规律与特点,挖掘用户的访问或点击模式,进而实现一些特定的业务用途,如App核心模块的到达率提升、特定用户群体的主流路径提取与浏览特征刻画,App产品设计的优化与改版等。
用户行为指标
  • PV(Page View)/ UV(Unique Visitor):分别指页面浏览量和独立访客量,每次用户对页面或标签的点击都会记一次PV。
  • 注册用户数:只有注册过的用户才有可能进一步发生转化行为。一个平台的注册用户数衡量了该平台当前已经积累的有效用户的数量。
  • 激活/活跃用户数:激活用户代表一个用户在注册完成以后成功登录一次。而活跃用户代表一个用户在登录后完成了访问。
  • 申请/放款用户数:活跃用户中的一部分会完成贷款申请行为,这部分用户被记为申请用户。申请用户会被审核,通过审核并成功放款的用户会记为放款用户。
  • 复借用户数:指借款次数超过一次的用户数。复借行为往往也需要结合时间维度进行考量,因为用户复借行为出现的时间并不是固定的。
import pandas as pd
import numpy as np
import sqlalchemy

import warnings
warnings.filterwarnings('ignore')

〇、读取数据

# 读取数据。plat_flow:平台流量表;loans_check:贷款审核表
#engine = sqlalchemy.create_engine('mysql+pymysql://id:******@localhost:3306/db')
engine=sqlalchemy.create_engine('mysql+pymysql://id:password@localhost:3306/database')

sql_flow='select * from plat_flow'
sql_check='select * from loans_check'
# 使用sql读取数据

df_flow=pd.read_sql(sql=sql_flow,con=engine)
df_check=pd.read_sql(sql=sql_check,con=engine)
# 执行sql语句,获取数据

df_flow.rename(columns={'date':'日期',
                        'PV':'PV',
                        'UV':'UV',
                        'regist_cnt':'注册量',
                        'regist_rate':'访客注册率',
                        'active_cnt':'激活量',
                        'active_rate':'激活访问率'},inplace=True)

df_check.rename(columns={'ID':'用户ID',
                         'date':'申请日期',
                         'new_cus':'是否新用户(1为是,0为否)',
                         'lending':'是否放贷'},inplace=True)

df_flow.head()
日期PVUV注册量访客注册率激活量注册激活率
02020-05-01712119723750.1901623410.909333
12020-05-02634019102100.1099481830.871429
22020-05-03647318341830.0997821740.950820
32020-05-04854431954150.1298903490.840964
42020-05-05374911061770.1600361680.949153
df_check.head()
用户ID申请日期是否新用户(1为是,0为否)是否放贷
012020-05-0110
122020-05-0111
232020-05-0111
342020-05-0110
452020-05-0110

一、计算每日申请贷款人数、审批贷款人数、放贷率

#### 选取子集,将新用户和老用户分开统计每天申请贷款人数和审批放贷人数,然后计算新用户放贷率。
#### 最后使用merge函数将新用户结果表和老用户结果表拼接。
df_check_1=df_check[df_check['是否新用户(1为是,0为否)']==1]
df_check_0=df_check[df_check['是否新用户(1为是,0为否)']==0]

#对新用户数据透视计算放贷率
pt_new=pd.pivot_table(data=df_check_1,
                    index=['申请日期'],
                   values=['是否放贷'],
                  aggfunc=[sum,'count'])
pt_new.columns=pt_new.columns.droplevel(0)
pt_new.columns=['新用户放贷数','新用户申请数']
pt_new['新用户放贷率']=pt_new.新用户放贷数/pt_new.新用户申请数
pt_new=pt_new.reset_index()
pt_new.head()
申请日期新用户放贷数新用户申请数新用户放贷率
02020-05-01562280.245614
12020-05-02261260.206349
22020-05-03121240.096774
32020-05-04432340.183761
42020-05-05221160.189655
#对老用户数据透视计算放贷率
pt_old=pd.pivot_table(data=df_check_0,
                           index=['申请日期'],
                           values=['是否放贷'],
                           aggfunc=[sum,'count'])
pt_old.columns=pt_old.columns.droplevel(0)
pt_old.columns=['老用户放贷数','老用户申请数']
pt_old['老用户放贷率']=pt_old.老用户放贷数/pt_old.老用户申请数
pt_old=pt_old.reset_index()
pt_old.head()
申请日期老用户放贷数老用户申请数老用户放贷率
02020-05-015130.384615
12020-05-025140.357143
22020-05-03030.000000
32020-05-043100.300000
42020-05-05370.428571

二、计算老客户复借率

#这里需要计算老用户复借率,所以需要知道每天的老用户数,这里做简单化处理,
#这里的老用户定义是:前一天的放款的新用户,第二天继续借款就是老用户
#对存量老用户我们暂时不考虑,就看前一天贷款的人第二天是否还继续贷款,贷款的就认为是老用户复借
#取新用户放贷透视表的前29天数据+4月30日的人(分析5月1日-5月30日的复借率)构成老客户数量,我们看这些客户是否还继续贷款
old=list(pt_new['新用户放贷数'])[0:29]
# 假设4月30日有24个人
old.insert(0,24)
dt_old=pd.DataFrame({'申请日期':list(pt_old['申请日期']),'老用户数':old})
pt_old_month=pd.merge(pt_old,dt_old,how='left',on='申请日期')
pt_old_month['老用户复借率']=pt_old_month.老用户申请数/pt_old_month.老用户数
pt_old_month.head()
申请日期老用户放贷数老用户申请数老用户放贷率老用户数老用户复借率
02020-05-015130.384615240.541667
12020-05-025140.357143560.250000
22020-05-03030.000000260.115385
32020-05-043100.300000120.833333
42020-05-05370.428571430.162791

三、计算各节点路径转化率并绘图

# pd.merge连接平台流量表,组成一张用户路径总表,计算各节点转化率。
dt=pd.merge(df_flow,pt_new,how='left',on=None,left_on='日期',right_on='申请日期')
dt_1=dt.merge(pt_old,how='left',on='申请日期')
dt_1=dt_1.drop(['申请日期'],axis=1)
dt_1.head()
日期PVUV注册量访客注册率激活量注册激活率新用户放贷数新用户申请数新用户放贷率老用户放贷数老用户申请数老用户放贷率
02020-05-01712119723750.1901623410.909333562280.2456145130.384615
12020-05-02634019102100.1099481830.871429261260.2063495140.357143
22020-05-03647318341830.0997821740.950820121240.096774030.000000
32020-05-04854431954150.1298903490.840964432340.1837613100.300000
42020-05-05374911061770.1600361680.949153221160.189655370.428571
#计算转化漏斗。 计算汇总数据
dt_2=dt_1.drop(['日期'],axis=1)
#汇总求和
dt_2.loc['row_sum']=dt_2.apply(lambda x:x.sum())
dt_3=dt_2[dt_2.index=='row_sum'][['PV','UV','注册量','激活量','新用户申请数','新用户放贷数']]
dt_4=dt_3.T.reset_index()
dt_4.columns=['指标','汇总']
dt_4
指标汇总
0PV130380.0
1UV37689.0
2注册量5151.0
3激活量4535.0
4新用户申请数3113.0
5新用户放贷数594.0
from plotly import graph_objects as go
trace=go.Funnel(x=dt_4['汇总'],
               y=dt_4['指标'],
               textinfo='value+percent initial',
               marker=dict(color=['skyblue','lightsalmon','moccasin','teal','silver','gainsboro']),
               connector={'line':{'color':'gold','dash':'solid','width':1}})
data=[trace]
plt=go.Figure(data)
plt.show()

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值