你好,这里是巡山猫编辑部,我是巡山猫。
之前,我们讲了产品分析基础:
我们之前讲了路径分析中的三种方法,今天我们来基于SQL和Python,实际操作一下,绘制图片,直观的找到用户的路径。
# SQL代码
# 需要结合业务做修改,这里仅举例
with action_tbl ---将 action 基于 action_time 排序
as(
select
day
,action
,time
,uid
,row_number()over(partition by uid order by action_time) as rank
from
action_table
where
day = '2022-01-01'
)
select
pre_action
,aft_action
,count(distinct uid) as uv
from
(
select
uid
,lag(action) over (PARTITION by uid order by rank) pre_action ---上一步 用户行为
,action as aft_action ---下一步用户行为
from
(
select
uid
,concat(action,rank) as action ---将每一个action都标上序号,保证桑基图不会出现循环
,rank
from
action_tbl
where
rank <=5 ---只看前5步的数据
)a
)b
where
pre_action is not null ---上一步action非空
and pre_action <>''
group by
pre_action
,aft_action
order by
pre_action
,aft_action
limit 10000;
# Python代码
# 需要结合业务做修改,这里仅举例
# coding:utf-8
# 执行环境:python 3.8
# 需要安装 pyecharts 包
import pandas as pd
from pyecharts.charts import Sankey
from pyecharts import options as opts
#读取excel文件
data = pd.read_excel('你的excel文件路径', sheet_name='test1', engine='openpyxl') # excel名称和sheet名称要改
# 穷举桑基图节点含义
nodes = []
# 将两列action都
nodes_list = list(pd.unique(data['pre_action']))
nodes_list_plus = list(pd.unique(data['aft_action']))
# 如果后一个action list 里有前一个list不包含的list,则添加进去
for i in range(len(nodes_list_plus)):
if nodes_list_plus[i] not in nodes_list:
nodes_list.append(nodes_list_plus[i])
# 构建 sankey 图中的 noeds 节点
for i in range(len(nodes_list)):
dic = {}
dic['name'] = nodes_list[i]
nodes.append(dic)
# 定义节点之前的连接关系:流向和节点大小
linkes = []
for i in data.values:
dic= {}
dic['source'] = i[0]
dic['target'] = i[1]
dic['value'] = i[2]
linkes.append(dic)
# 画图并存入一个excel文件里
pic = (
Sankey(
init_opts=opts.InitOpts(
width='1800px', # 设置涂敷宽度
height='2000px' # 设置图幅高度
)
)
.add('', # 图例名称,就没啥图例
nodes, # 传入节点数据
linkes, # 传入边和流量数据
# 设置透明度、弯曲度、颜色
linestyle_opt=opts.LineStyleOpts(opacity=0.3, curve=0.5, color="source"),
# 标签显示位置
label_opts=opts.LabelOpts(position="right"),
# 节点之前的距离
node_gap=30,
# 是否要竖着看
# orient="vertical",
)
.set_global_opts(title_opts=opts.TitleOpts(title='用户流转路径')) #绘制的桑基图的title
)
pic.render('user_action.html') #输出一个html文件,打开文件就是桑基图
用SQL提取完数据,再用Python处理和绘图,我们可以得到这样的一个图:
备注:图片来自于网络,大家可以自己执行下脚本绘制对应的桑基图。
通过桑基图的绘制,我们能够大概知道用户在每个步骤上流转节点。
基于每个步骤的流转节点,我们就能较清楚的知道,用户在哪个步骤损失较多,以及每种路径下的对应指标情况。
比如我们这里目标是提高用户留存率,那我们就将每种路径下,用户的留存率打标在路径上,一对比就知道每种路径下的用户的留存率的高低了。
上面,我们讲完了如何利用桑基图,来进行基础的路径分析方法和案例,但是不知道大家发现了一个背后的假设没有:
之前路径分析的内容都是基于既定的使用路径,也就是我们没有人为地去组合页面和产品功能。
但很多业务场景下,我们需要的是:
如何通过分析去实现功能的组合,更好地提升产品体验,提高用户留存。
大家肯定会想到关联规则算法(Apriori),毕竟啤酒与尿布的故事都说”烂“了。
啤酒与尿布,说的是超市往往会将啤酒与尿布摆放在一起,从而提高两者的销量。
背后的原因是,分析整体销售的情况,发现人们在购物时,买了啤酒大概率都会购买尿布。
这个如果用数学上的原理来解释,就是一个关联规则分析。
简单来说,我们将用户每次的购买商品都看作一个购物篮,查看购物篮中每种物品出现的频率和相关性,我们就能大致推断出,一个购物篮中,哪些物品是能够被关联购买的。
那相应的,我们将用户的一次使用看成是“购物篮”,每个操作的行为,都看成是购物篮中的商品。
那么我们也就能够通过商品的组合,关联性分析,找到哪些产品/功能之间是强相关的。
通过功能之间的联系,我们能够将行为及对应的产品进行组合,从而得到用户更喜欢,留存率更高的功能组合。
当然,我们这期先不说算法,我们来说一种更简便的计算方法。
举个例子,我们发现的用户可用的行为链路是这样的:
我们可以发现,功能 A 后续可以组合功能 B、功能 C、功能 D,那么我们如何通过关联规则,评估用户更喜欢哪种组合呢?
我们可以查看这几种组合下的占比情况和留存情况:
通过上面这两个表格,我们可以发现,虽然 A+C 组合下,用户的占比很高,但是其实留存率并不高,算是一种常规的路径。
但是我们可以看到,A+D 组合下,用户组合留存明显上涨。
那针对这个数据,我们可以做两件事情:
1、引导用户去使用 A+D 组合
2、从产品上增加 D 功能的曝光
当然,如果你说,我只保留留 A+D 组合行不行。其实也可以,但是相应地,我们得想好兜底策略和措施。
通过简单的路径观测,并结合上文所说的桑基图的流转,我们可以定位到用户路径下的占比以及相应的留存率,能够找到更为 优质 的路径。
找到路径,通过一些策略的引导,比如任务体系的构建,积分等级的搭建,主动push用户往我们定好的路径上走,从而更好的提高留存率。
当然,关于这些任务体系的搭建,以及积分登记的搭建,讲完路径分析后,我们再来讲,路径分析下篇会从算法角度上来讲解,敬请期待。
总的来说,路径分析是为了度量用户在产品中一层又一层的操作转化,而发现产品需要优化的方向的一种分析方法。
而这种分析方法呢,最需要保证的就是产品上的埋点需要全面细致。因为只有拿到完整的用户产品操作信息,我们才能更好地复现出产品操作路径,从而可以进行后续的路径分析。
没有数据,一切都是空谈。有了数据,如何用自己理解的方法去进行有效的分析,也是我们一直需要积累和总结的经验。
以上,就是本期分享。