其他分享
首页 > 其他分享> > 如何分析留存率?(案例:留存率堆积直方图+留存率下降分析)

如何分析留存率?(案例:留存率堆积直方图+留存率下降分析)

作者:互联网

前言:本文内容以游戏产品为基础进行讲解,内容为以下4部分:
1. 留存率的定义、3个阶段、3个要素理解(案例:留存率堆积直方图)
2. 如何分析留存率(案例:如何分析留存率下降)
3. 如何优化留存率
4. 什么是付费留存、留存作弊


留存率的定义、3个阶段、3个要素理解(案例:留存率堆积直方图)

定义:第i天的留存率=第i天留存用户\第i天新增用户

定义时需要注意的点:

1. 讨论的留存率是否是分批次(分天);

2. 计算的时间点要充分定义;

3. 用户群要充分定义;


留存率也可以分2类来看,按照用户性质,分为:新增用户留存率、活跃用户留存率;

        针对新增用户留存指标,可以绘制留存堆积直方图:     

data=pd.read_excel(r'C:\Users\EDZ\Desktop\other_data\test\data.xlsx',sheet_name='RR')
data.columns=['id','date','value']
# 如果数据只有id和登录日期两列,那么需要复制一列每个ID的min(date),以计算每个ID对应日期是否留存
data['date']=pd.to_datetime(data['date'])
date_min=data.groupby('id')['date'].min().reset_index()
data_merge=data.merge(date_min,on='id',how='left',right_index=False) # 合并最小列
data_merge['n_day']=data_merge['date_x']-data_merge['date_y'] # 计算每个ID对应日期是否留存
data_count=pd.pivot_table(data_merge
                           ,index='date_y'
                           ,values='id'
                           ,columns='n_day'
                           ,aggfunc='count'
                          ,fill_value=0).reset_index()
data_count # 得到留存矩阵

 

data_rr=data_count.iloc[:,1:].shift(periods=-1,axis=1).fillna(0)/data_count.iloc[:,1:]
data_rr # 得到留存率矩阵

 

labels=['次日','2日','3日','4日','5日']
alpha=0.8
fig,ax=plt.subplots(1,1,figsize=(10,5))
for i in range(5):
    if i ==0:
        ax.barh(data_count['date_y'],data_rr.iloc[:,i],alpha=alpha,label=labels[i])
    else:
        ax.barh(data_count['date_y']
                 ,data_rr.iloc[:,i]
                 ,left=data_rr.iloc[:,:i].sum(axis=1) # 堆积位置
                 ,alpha=alpha
                 ,label=labels[i]) # 水平柱状图
ax.invert_yaxis() #反转y轴
plt.xlim(0,3.5) # 设定x轴的范围
plt.xticks([]) # 不显示x轴
plt.legend(loc='lower right')  # 图例位置放在右下角
plt.title('留存率堆积直方图',size=15) # 设定图片标题
plt.show()

 


        留存率的3个阶段: 
        震荡期、淘汰期、稳定期;稳定期后的用户留存情况也称为流失率,阶段为成熟期、衰退期。

        留存率在各个阶段的变化趋势:

        测封期自然用户留存达标后,开始推广期,推广期导入非潜在用户,留存开始降低;
        进入恢复期后,开始恢复留存情况,优秀的产品留存会回升到测封期水平。

        留存分析的特点:

        信息有限,偶然因素多,多为分析渠道、投放情况,难以与业务驱动结合;
        关注的重点主要放在获取用户的效果、市场投放策略的优化;
        留存分析的难点在于:有效判断目前的留存情况处于哪一阶段;


留存分析的3个要素

判断留存率的高低标准,要考虑以下因素:


如何分析留存率?(案例:如何分析留存率下降)


                Tips:
                1. 如果7日留存率<8%,说明要重新优化;
                2. 留存效果:端游>手游>app;行业标准:次留40%,周留20%,月留10%。

# 以下代码只考虑用户每日登录的情况,没有考虑用户次日未登录,间隔几日登录的情况

data=pd.read_excel(r'C:\\Users\\EDZ\\Desktop\\other_data\\test\\data.xlsx',sheet_name='RR')
data.columns=['id','date','value']
# 如果数据只有id和登录日期两列,那么需要复制一列每个ID的min(date),以计算每个ID对应日期是否留存
data['date']=pd.to_datetime(data['date'])
date_min=data.groupby('id')['date'].min().reset_index()
data_merge=data.merge(date_min,on='id',how='left',right_index=False) # 合并最小列
data_merge['n_day']=data_merge['date_x']-data_merge['date_y'] # 计算每个ID对应日期是否留存
data_count=pd.pivot_table(data_merge
                           ,index='date_y'
                           ,values='id'
                           ,columns='n_day'
                           ,aggfunc='count'
                          ,fill_value=0).reset_index()
data_count # 得到留存矩阵

data_rr=data_count.iloc[:,1:].shift(periods=-1,axis=1).fillna(0)/data_count.iloc[:,1:]
# data_rr['date']=data_count['date_y']
data_rr # 得到留存率矩阵

        通过以上分析,大致可以得到两种结论:
                新开服务器,注册账号增加
                老玩家刷新号

第一种情况下:
        分析注册量和安装量的趋势,确定是否新开服务器会对注册量、安装量产生影响,以及产生多大的影响;并确定问题数据期间是否有新开服务器;

第二种情况下:

  1. 进一步细化数据:查看注册活跃占比、注册安装转化率、玩家单日游戏次数、留存趋势。因为老玩家新号必然安装量不会有明显增长,且游戏活跃度也会较低;
  2. 查找问题数据期间的运营活动情况;

通过以上分析,基本能得出结论:

        留存率下降原因为:开服+活动影响
        新开服后,新建帮派在开服后3日召集10名玩家加入帮派可送帮主大量金额,所以老玩家开新号给自己刷金币用。


如何从数据方面佐证?


如何优化留存率?


什么是付费留存、留存作弊


以上内容为《游戏数据分析的艺术》个人学习笔记,包含书籍内容概括、自己的解读。

文章内容仅供参考,有兴趣可自行购买阅读原文。

标签:分析,plt,用户,留存,直方图,付费,date,data
来源: https://blog.csdn.net/weixin_46704989/article/details/121564524