某东电商 | 某猫电商 | |
---|---|---|
注册人数 | 5000 | 5000 |
绑定支付账号 | 2000 | 3000 |
生成订单 | 1500 | 1500 |
线上支付人数 | 1000 | 1000 |
通过上面的数据,可以看出两个平台最终的线上支付人数是一样的,无法看出哪个平台更具优势。如果我们从用户线上支付的转化率(线上支付人数/注册人数)进行比较,两个平台的转化率也是一样。这个时候可以通过漏斗模型进行分析,两个平台的差别。
1. 什么是漏斗思维
1.1 逆向思维
漏斗模型的思维方式是逆向的,即先确定要分析的关键环节,然后抽取相应的数据,计算其转化率。我们的分析目标是线上的支付人数,需要把这个动作往前面退,支付前需要产生订单,再往前需要注册。
1.2 维度切分思维
单一的漏斗模型对于分析来说没有任何意义,我们不能单从一个漏斗模型中评价网站某个关键流程中各步骤的转化率的好坏,所以必须通过趋势、比较和细分的方法对流程中各步骤的转化率进行分析:
趋势:从时间轴的变化情况进行分析,适用于对某一流程或其中某个步骤进行改进或优化的效果监控;
比较:通过比较类似产品或服务间购买或使用流程的转化率,发现某些产品或应用中存在的问题;
细分:细分来源或不同的客户类型在转化率上的表现,发现一些高质量的来源或客户,通常用于分析网站的广告或推广的效果及ROI。
2. 应用场景
2.1 运营过程的监控和运营效率的分析和完善
只要有流程、有转化,就一定会采用漏斗模型作为其中的一种手段来加以监控、分析和管理
2.2 用户关键路径分析
漏斗模型是路径分析的特殊形式,是专门针对关键环节进行的路径分析 ,漏斗模型更多时候要经过抽象的过程来搭建漏斗的每一个环节,漏斗中的每个环节更多时候是抽象出来的,而不一定是完全按照原始的数据直接放进漏斗中的,而路径分析更多的时候是就事论事,不需要经过抽象、转化、整合这些过程 。
2.3 注意事项
漏斗模型是一个逐步递减的过程,后面的环节的数量不会超过前面。
举个例子要查看web渠道的用户的线上支付的转化率,那就不能再生产订单的数据里面包含了其他渠道的数据,这样就没有意义。如何避免这样的情况,在数据量不是很大的情况,可以用交集的方式,就是web渠道的用户和全部的订单的用户进行交集操作就可以。
通常来讲,漏斗分析都以人数来统计,为什么不按照次数来统计呢?
假设某漏斗模型是A→B→C→D,如果用户从A→B再→B再→B(假设A是用户进入课程详情页的次数,B是点击购买的次数,也就是这个人重复添加到支付页面)那漏斗的第二步统计的次数可能会大于第一步统计的次数,这也违背了漏斗分析模型的意义
以人数来统计,就是次数去重以后基于时间序列的统计。一个用户只要做过从A到B,无论做了多少次,都是一个A到B的转化,当然,这里边有个非常关键的限定,就是转化周期限定,1天,2天,一个会话······也就是用户从A→B发生的时间周期,只要他在一个时间周期内完成了从A→B,就记为一次转化。
3. 代码实现
3.1 安装可视化的包
由于matplotlib没有漏斗模型的图,虽然用柱状图也可以表示,但是没有那么直观,选择了echarts进行显示
pip install pyecharts
pip install pyecharts-snapshot
3.2 代码编写
定义漏斗图的普通的参数,只需要传入对应的数据,名称
def funnel(name,value):
funnel = Funnel("支付漏斗图", width=800, height=600, title_pos='center')
funnel.add(
"商品",
name,
value,
is_label_show=True,
label_pos="outside",
legend_orient="vertical",
legend_pos="left"
)
funnel.render()
主要用到series对象的isin()方法,获取两个对象之间的交集,dataframe 对象的属性iloc[:,0].size获取数据的数量
register_user=get_register_user()
bind_user=get_bind_user()
order_user=get_order_user()
money_user=get_money_user()
bind_user=register_user[register_user["user_id"].isin(bind_user['user_id'].tolist())]
order_user=bind_user[bind_user["user_id"].isin(order_user['user_id'].tolist())]
money_user=order_user[order_user["user_id"].isin(money_user['user_id'].tolist())]
register_user_num=register_user.iloc[:,0].size
bind_user_num=bind_user.iloc[:,0].size
order_user_num=order_user.iloc[:,0].size
money_user_num=money_user.iloc[:,0].size
name=[f'注册用户-{register_user_num}',f'绑定支付账号-{bind_user_num}',f'生成订单-{order_user_num}',f'线上支付-{money_user_num}']
value=[register_user_num,bind_user_num,order_user_num,money_user_num]
funnel(name, value)
欢迎关注公众:sjyy_python