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

2023-10-27

一、案例数据

在数据运营中,留存率分析和转化率(漏斗)分析是经常用到的,本文结合具体案例总结了如何利用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')

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 用MATLAB仿真SCARA机器人,报错:未定义与 ‘char‘ 类型的输入参数相对应的函数 ‘Link‘

    在使用MATLAB仿真SCARA机器人的时候报错如下 是因为我们没有安装Robotics Tools工具箱 解决办法 https blog csdn net u011831805 article details 81044546 安装完成就
  • Image and Graphics Best Practices,总结及延伸

    预备知识 解码 Q 什么是解码 A 将压缩的图片数据解码成未压缩的位图形式 即二进制数据转换成像素数据的过程 PS 这是一个非常耗时的 CPU 操作 Q 是否可以不要解码 不经过解压缩 直接将图片显示到屏幕上 A 不可以
  • 原码和补码在计算机中的应用,二进制、原码、反码和补码详解

    原码反码和补码都是计算机中表示数字的一种编码 维基百科上说 编码是信息从一种形式或格式转换为另一种形式的过程 其实 计算机内部使用二进制 n位的二进制一共可以表示2 n个不同的数字 至于具体哪个二进制序列对应哪个数字 原则上可以随意 例如
  • 边界值分析法

    一 定义 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法 通常边界值分析法是作为对等价类划分法的补充 这种情况下 其测试用例来自等价类的边界 边界值分析法是对等价类划分法做补充的一种黑盒测试设计方法 实践中 由于大量的错误发
  • 字符与字符串的“+”操作

    字符的 操作 public class Firstproj public static void main String args 定义两个变量 int i 10 char c A A 的值是65 ASCII值 c a a 的值是97 c
  • redis之安装部署

    redis之安装部署 redis之基本使用 redis之应用场景 redis之源码制作rpm包 redis之安装部署 1 redis 6 2 12单机部署 1 1 redis 6 2 12下载安装 1 2 查看服务进程 2 redis 6
  • IOS 基础开发之 addSubview和insertSubview:atIndex: 区别

    两者都是添加子视图 视图的添加都是以栈的方式 即后进先出 addSubview 是添加到最后 即最后一个进栈 显示在所有子视图的最上面 insertSubview AtIndex 是根据索引添加到栈里面 可以根据需要添加到对应的栈的位置里面
  • android 语音识别 语音手电(一)

    一 语音识别库 cmu pocketsphinx 当然要用现成的语音识别库了 自己的水平离开发语音识别库还远的很呢 网上搜索找到卡内基梅龙大学的开源语音项目 好象是李开复创办的项目 有JAVA实现 有C语言实现 pocketsphinx是专
  • 使用vscode编码器统计代码行数

    在一些特殊情况中我们需要计算代码的行数 这时我们就可以借助vscode的VS Code Counter插件进行统计 第一步 选择VS Code Counter进行安装 安装完毕有条件的可以重启编码器 第二步 快捷键ctrl shift p进
  • Tensorflow 下测试gpu是否可用

    import tensorflow as tf tf test is gpu available
  • servlet和java区别_java – servlet和Web服务之间的区别

    Web服务是一种使用REST编程范例或SOAP协议为其客户端提供服务方法以进行通信的服务 有几种方法来实现Web服务 编写Web服务的最简单的方法是编写一个类并使用javax jws中的 WebService和 WebMethod注释进行注
  • php 导出excel的三种方法

    1 PHPExcel thinkphp PHPExcel放到这个目录下 导出excel表格 function exportExcel data filename xlsTitle iconv utf 8 gb2312 filename 文件
  • BI工程师日记

    从17年十月份入职BI工程师半年多的时间里 已熟练使用Tableau及SQL 越来越感觉到tableau的天花板 思考了好久如何打破天花板 想从几个方面入手 1 学习Python数据处理 神经网络庫的使用 结合tableau和Python
  • kubeadm 安装集群 1.16.12

    kubeadm 安装集群 添加源 mirror https mirrors aliyun com mirror https mirrors ustc edu cn docker 源 curl fsSL mirror docker ce li
  • 【喊7的次数重排】

    题目描述 喊7的次数重排 喊7是一个传统的聚会游戏 N个人围成一圈 按顺时针从1到N编号 编号为1的人从1开始喊数 下一个人喊的数字为上一个人的数字加1 但是当将要喊出来的数字是7的倍数或者数字本身含有7的话 不能把这个数字直接喊出来 而是
  • 对串级PID控温算法的解析

    目录 前言 单级PID 串级PID 系统分析 算法分析 总结 前言 笔者在做项目的过程中 需要对一个目标物体做精确控温 精度要求 1 需要在两分钟内使用电阻发热贴将温度由20控制到41 且无超调 根据控制原理 做精确控温应该使用PID算法
  • 026-从零搭建微服务-文件服务(二)

    写在最前 如果这个项目让你有所收获 记得 Star 关注哦 这对我是非常不错的鼓励与支持 源码地址 后端 https gitee com csps mingyue 源码地址 前端 https gitee com csps mingyue u
  • 【点云】PointCNN: Convolution On X-Transformed Points

    目录 测试 1 摘要 2 介绍 3 PointCNN 3 1 分层卷积 3 2 X Conv操作 3 3 PointCNN结构 4 参考 4 1 ELU激活函数 4 2 BatchNorm 测试 在Semantic3D上跑了PointCNN
  • jitter概念理解

    一般 PLL等时钟产生模块 都会有RMS jitter的描述 根据这个参数 可以计算出相关时钟的clock jitter 方便设置综合sdc的时钟约束 为什么只有RMS jitter 因为期望值就是理论周期值 根据期望值 RMS 均方差 就
  • 数据运营-计算留存率和转化率(漏斗分析&Python)

    一 案例数据 在数据运营中 留存率分析和转化率 漏斗 分析是经常用到的 本文结合具体案例总结了如何利用python求n日留存率以及各环节间转化率 指标释义 案例数据集介绍 本文是利用淘宝app的运营数据进行分析的 数据集中包含以下字段 部分