数据运营-计算留存率和转化率(漏斗分析&Python)

一、案例数据

在数据运营中,留存率分析和转化率(漏斗)分析是经常用到的,本文结合具体案例总结了如何利用python求n日留存率以及各环节间转化率。
指标释义

案例数据集介绍:
本文是利用淘宝app的运营数据进行分析的,数据集中包含以下字段(部分):

  • user_id:用户id
  • time:用户行为发生时间
  • behavior_type:用户行为类型,具体可分为(1点击、2收藏、3加入购物车以及4支付购买)。

根据time字段可以得到以下特征数据:

  • day:用户行为发生日期
  • hour:时段
  • weekday:周期

数据下载

二、留存率计算

留存用户:在某段时间开始使用产品,经过一段时间后仍然继续使用产品的用户,即为留存用户。
留存率=仍旧使用产品的用户量/最初的总用户量。
根据时间维度进行分类,留存率经常分为次日留存、3日留存、7日留存以及30日留存等。
程序逻辑:

  1. 识别出指定日期的新用户集合,记用户量为b
  2. 得到第n天用户集合
  3. 识别、计算指定日期新用户在第n天仍使用产品的数量,记用户量为a
  4. 留存率=a/b
#建立留存函数(里面默认data数据中有day/user_id两个字段数据,day为日期、user_id为用户id)

#导入数据包
import pandas as pd
import numpy as np
from datetime import timedelta

#建立n日留存率计算函数
def cal_retention(data,n): #n为n日留存
    user=[]
    date=pd.Series(data.day.unique()).sort_values()[:-n] #时间截取至最后一天的前n天
    retention_rates=[]
    for i in date:
        new_user=set(data[data.day==i].user_id.unique())-set(user) #识别新用户,本案例中设初始用户量为零
        user.extend(new_user)  #将新用户加入用户群中
        #第n天留存情况
        user_nday=data[data.day==i+timedelta(n)].user_id.unique() #第n天登录的用户情况
        a=0
        for user_id in user_nday:
            if user_id in new_user:
                a+=1
        retention_rate=a/len(new_user) #计算该天第n日留存率
        retention_rates.append(retention_rate) #汇总n日留存数据
    data_retention=pd.Series(retention_rates,index=date)
    return data_retention

data_retention=cal_retention(taobaoappDf,3)  #求用户的3日留存情况

三、转化率计算(漏斗分析)

通过漏斗分析,我们可以发现在一个多步骤过程中每一步的转化和流失情况。
本案例的漏斗中,流程顺序为1点击-3加入购物车-2收藏-4支付(假设以上步骤只能依次进行或中断,不能跳过中间过程到下个节点)。
程序逻辑:分别计算进入各个环节的用户量,再分别比较。

#用户从点击到最终支付的过程中流失率(或转化率)情况

def cal_funnel(data,datetime):
    data1=data.groupby([datetime,'behavior_type']).user_id.count().reset_index().rename(columns={'user_id':'total'}) #不同时间中,各用户行为的用户数量
    lose_rates=[]  #流失率
    date2=pd.Series(data1[datetime].unique())
    for i in date2:
        data2=data1[data1[datetime]==i]
        click_to_car=1-data2[data2.behavior_type==3].reset_index().loc[0,'total']/data2[data2.behavior_type==1].reset_index().loc[0,'total']
        car_to_collect=1-data2[data2.behavior_type==2].reset_index().loc[0,'total']/data2[data2.behavior_type==3].reset_index().loc[0,'total']
        collect_to_pay=1-data2[data2.behavior_type==4].reset_index().loc[0,'total']/data2[data2.behavior_type==2].reset_index().loc[0,'total']
        lose_rate=[click_to_car,car_to_collect,collect_to_pay]
        lose_rates.append(lose_rate)
    data3=pd.DataFrame(lose_rates,index=date2,columns=['click_to_car','car_to_collect','collect_to_pay'])
    return data3

a_hour_lose=cal_funnel(taobaoappDf,'hour')
a_day_lose=cal_funnel(taobaoappDf,'day')
a_weekday_lose=cal_funnel(taobaoappDf,'weekday')

  • 8
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值