一、用户行为路径分析
1. 什么是用户行为路径分析?
用户行为路径分析是一种监测用户流向,从而统计产品使用深度的分析方法。它主要根据每位用户在App或网站中的点击行为日志,分析用户在App或网站中各个模块的流转规律与特点,挖掘用户的访问或点击模式,进而实现一些特定的业务用途,如App核心模块的到达率提升、特定用户群体的主流路径提取与浏览特征刻画,App产品设计的优化与改版等。
用户路径的分析转化结果通常以桑基图形式展现,以目标事件为起点/终点,详细查看后续/前置路径的流向,可以详细查看某个节点事件的转化情况。总的来说,行为路径分析有如下作用:
①可视化用户流向,对海量用户的行为习惯形成宏观了解。
②定位影响转化的主次因素,使产品的优化与改进有的放矢。
2. 用户行为指标
- PV(PageView)/ UV(UniqueVisitor):分别指页面浏览量和独立访客量,每次用户对页面或标签的点击都会记一次PV。
- 注册用户数:只有注册过的用户才有可能进一步发生转化行为。一个平台的注册用户数衡量了该平台当前已经积累的有效用户的数量。
- 激活/活跃用户数:激活用户代表一个用户在注册完成以后成功登录一次。而活跃用户代表一个用户在登录后完成了访问。
- 申请/放款用户数:活跃用户中的一部分会完成贷款申请行为,这部分用户被记为申请用户。申请用户会被审核,通过审核并成功放款的用户会记为放款用户。
- 复借用户数:指借款次数超过一次的用户数。复借行为往往也需要结合时间维度进行考量,因为用户复借行为出现的时间并不是固定的。
3. 用户行为路径分析方法——转化漏斗
转化漏斗是针对特定模块与事件节点的路径分析。无论是新用户的引导、某个业务流程还是某一次运营活动,涉及到有流程转化的都可以建立漏斗来分析。在分析的过程中,可以观察整体的转化率是否符合行业水准,哪些步骤转化率还有优化空间?可以通过细分维度发现导致转化率低的因素是哪些,也可以通过查看流失环节的其他使用路径,做出针对性的引导。
它适用于对产品运营中的关键环节进行分析、监控,找到其中薄弱的环节,通过用户引导或者产品迭代来优化,提升转化效果。
二、某平台转化漏斗分析案例
import pandas as pd
import numpy as np
import sqlalchemy
import warnings
warnings.filterwarnings('ignore')
1. 读取数据
# 读取数据:plat_flow:平台流量表;plat_check:贷款审核表
# 使用sql读取数据,创建engine
engine = sqlalchemy.create_engine('mysql+pymysql://用户名:密码@ip地址/数据库名称')
sql_flow = "select * from plat_flow"
sql_check = "select * from loans_check"
# 执行sql语句,获取数据
dt_flow = pd.read_sql(sql=sql_flow, con=engine)
dt_check = pd.read_sql(sql=sql_check, con=engine)
# 将英文字段名修改为中文
dt_flow.rename(columns={"date":"日期","PV":"PV","UV":"UV","regist_cnt":"注册数","regist_rate":"访客注册率","active_cnt":"激活数","active_rate":"激活访问率"},inplace=True)
dt_check.rename(columns={"ID":"用户ID","date":"申请日期","new_cus":"是否新用户(1为是,0为否)","lending": "是否放贷"},inplace=True)
# 平台流量表 (5月1日-5月30日数据)
dt_flow.head()
# 贷款审核表
dt_check.head()
2. 计算每日申请贷款人数、审批贷款人数、放贷率
# 选取子集:将新用户和老用户分开统计每天申请贷款人数和审批放贷人数
dt_check_1 = dt_check[dt_check["是否新用户(1为是,0为否)"] == 1]
dt_check_0 = dt_check[dt_check["是否新用户(1为是,0为否)"] == 0]
# 对新用户数据透视计算放贷率
pt_1 = pd.pivot_table(data = dt_check_1, index = ["申请日期"], values = ["是否放贷"], aggfunc = [np.sum,'count'])
# 删除多级列索引中第0级索引
pt_1.columns = pt_1.columns.droplevel(0)
# 修改列名称
pt_1.columns = ["新用户放贷数","新用户申请数"]
# 用户放贷率 = 用户放贷数 / 用户申请数
pt_1["新用户放贷率"] = pt_1["新用户放贷数"] / pt_1["新用户申请数"]
# 重置索引
pt_1 = pt_1.reset_index()
pt_1.head()
# 对老用户数据透视计算放贷率
pt_0 = pd.pivot_table(data = dt_check_0, index = ["申请日期"], values = ["是否放贷"], aggfunc = [np.sum,'count'])
pt_0.columns = pt_0.columns.droplevel(0)
pt_0.columns = ["老用户放贷数","老用户申请数"]
pt_0["老用户放贷率"] = pt_0["老用户放贷数"] / pt_0["老用户申请数"]
pt_0 = pt_0.reset_index()
pt_0.head()
# 计算老用户复借率
# 这里将前一天的放款的新用户第二天继续借款的用户定义为老用户,即连续两天借款的用户,暂时不考虑存量老用户
old = [pt_1["新用户放贷数"]]
# 为分析5月1日-5月30日的复借率,此时将4月30日+新用户放贷透视表的前29天数据定义为老用户数量
old = list(pt_1["新用户放贷数"])[0:29]
# 假设4月30日有24个人
old.insert(0,24)
data = {'申请日期':list(pt_1["申请日期"]),'老用户数':old}
# 将list转化为DataFrame
dt_old = pd.DataFrame(data)
# 表关联
pt_0_m = pd.merge(pt_0, dt_old, how = 'left', on = ["申请日期"])
# 老用户复借率 = 老用户申请数 / 老用户数
pt_0_m["老用户复借率"] = pt_0_m["老用户申请数"] / pt_0_m["老用户数"]
pt_0_m.head()
3、计算各节点路径转化率并绘图
# pd.merge连接平台流量表,组成一张用户路径总表,计算各节点转化率。
dt = pd.merge(dt_flow, pt_1, how = 'left', on = None, left_on = "日期", right_on = "申请日期" )
# 与老用户房贷情况合并
dt_1 = pd.merge(dt, pt_0_m, how = 'left', on = None, left_on = "日期", right_on = "申请日期" )
# 删除不必要的列
dt_1 = dt_1.drop(['申请日期_x', '申请日期_y'], axis = 1)
dt_1.head()
# 计算转化漏斗
# 计算汇总数据
# 删除日期列(不是数值类型)
dt_2 = dt_1.drop(['日期'], axis=1)
# 新建一行 Row_sum,对每一列汇总求和
dt_2.loc['Row_sum'] = dt_2.apply(lambda x: x.sum())
# 取出 Row_sum 这一行,并按需选取列
dt_3 = dt_2[dt_2.index == "Row_sum"][["PV","UV","注册数","激活数","新用户申请数","新用户放贷数"]]
# 行列互换
dt_3_s = pd.DataFrame(dt_3.stack()).reset_index().iloc[:,[1,2]]
# 定义列名
dt_3_s.columns = ["指标","汇总"]
dt_3_s
# 漏斗图绘制
from plotly import graph_objects as go
trace = go.Funnel(
y = dt_3_s["指标"],
x = dt_3_s["汇总"],
textinfo = "value+percent initial",
marker = dict(color = ["deepskyblue", "lightsalmon", "tan", "teal", "silver", "yellow"]),
connector = {"line": {"color": "royalblue", "dash": "solid", "width": 3}})
data = [trace]
fig = go.Figure(data)
fig.show()
网友评论