用户行为流程分析法及在金融分析中的应用

一、用户行为路径分析

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