數據運營-計算留存率和轉化率(漏斗分析&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')

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章