如何分析留存率?(案例:留存率堆积直方图+留存率下降分析)
作者:互联网
前言:本文内容以游戏产品为基础进行讲解,内容为以下4部分:
1. 留存率的定义、3个阶段、3个要素理解(案例:留存率堆积直方图)
2. 如何分析留存率(案例:如何分析留存率下降)
3. 如何优化留存率
4. 什么是付费留存、留存作弊
留存率的定义、3个阶段、3个要素理解(案例:留存率堆积直方图)
定义:第i天的留存率=第i天留存用户\第i天新增用户
定义时需要注意的点:
1. 讨论的留存率是否是分批次(分天);
2. 计算的时间点要充分定义;
3. 用户群要充分定义;
留存率也可以分2类来看,按照用户性质,分为:新增用户留存率、活跃用户留存率;
-
新增用户留存率指标:
次日留存:次日留存用户数
三日留存:第三日留存用户数
七日留存:第七日留存用户数
-
案例:留存堆积直方图_python实现
针对新增用户留存指标,可以绘制留存堆积直方图:
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个要素:
判断留存率的高低标准,要考虑以下因素:
-
环境:获取用户的方式,该方式是否有影响留存的独特因素。
要结合获取方式的特点来看待留存,比如app store可能更愿意下载(打开app store就是为了下载app),但不一定是目标用户,则留存会较低,就不能拿核心用户渠道的标准来对比;渠道跳转是否顺利,比如渠道服跳转总是闪退,那可能该渠道留存较低是正常的情况;
-
用户:获取用户的质量,是否是长留存用户。
比如获取的用户定位就是捞一波就走的用户,那么留存率低也是正常情况。
-
产品:产品的质量和定位,是否是长留存产品。
如果产品的定位就不是长留存的产品,那么留存较低属于正常情况。但如果产品重视体验,有意拉长用户付出的成本和时间;或者游戏的未知性较高,需要用户等待反馈,那么这种产品就需要严格重视留存。
如何分析留存率?(案例:如何分析留存率下降)
- 留存率的趋势具有一致性,可横向对比
- 不同用户群体间留存率趋势一致;不同用户群体的留存率可横向对比;
- 不同产品间留存率趋势一致;不同产品的留存率可横向对比;
- 不同日期间留存率趋势一致;不同时间段的留存率可横向对比,比如推广期和自然增长期;
- 通过留存率,可以反映用户质量、运营效果、挖掘用户行为
-
用户质量分析(案例:分批用户留存率对比+python绘制不同批次用户留存曲线)
分析方法:分析不同批次的用户留存率,得到用户质量
案例描述:用户质量对留存率下降的影响
-
由图片可知,通过多日留存率对比,5、6日的曲线较低,留存较差。结合运营动作可知,当日提供新手礼包。 是否因为提供新手礼包导致留存下降呢?是因为新手礼包的内容不符合用户的预期,导致用户流失的吗? 进一步分析发现,新手礼包内容并没有问题,而是因为有很多老用户注册新号来领取礼包,从而导致留存变差。
这个案例说明,留存率下降不能直接归因为运营动作;分析时要考虑用户质量对留存率的影响。通过对每批用户的留存变化对比,得到每批用户的留存情况,从而进一步对比每批用户的质量。(案例:每批用户留存率变化曲线_python)
labels=data_count['date_y'].tolist() x=['次日','2日','3日','4日'] plt.figure(figsize=(10,3)) for i in range(data_rr.shape[0]): plt.plot(x,data_rr.iloc[i,:-1] ,label=labels[i].strftime('%y-%m-%d') # Timestamp提取年月日 ,linewidth=2) # 设定线条粗细 plt.xlim(-0.1,3.7) plt.legend(loc='right') plt.show()
-
运营效果(案例:留存周期拐点判断+用户活跃度判断)
衡量运营效果的指标为:用户活跃度、用户收益,而用户活跃度越高,留存越高,所以通过留存可以看出用户活跃度;-
案例:留存率周期与拐点判断图
通过对比两条不同的留存率曲线可知,留存率是波动下降的,趋势一致;且在31-51之间,两条线段出现交点,并都线条都呈现范围较大的浮动,所以可确定为蒸馏期,那么拐点也在这之间。当拐点出现时,可以判断留存周期转化,从而调整运营策略。
❓ 感觉以上结论逻辑前后有矛盾。留存率线段的发生是同步进行的,而拐点的产生是滞后的,如果留存率线条不进入稳定期,那么也没办法判断是否已经产生拐点。
留存率已经进入了稳定期,再知道拐点来修订运营策略,是否属于业务决策滞后有待考证。 -
案例:某月登录用户近3个月的注册分布图
-
-
挖掘用户特征
通过对留存用户做特征挖掘,可得到核心目标用户的行为特点、用户画像等。用户特征挖掘方面:
游戏等级(难度、新手教程)、
游戏次数(BUG、网络质量)、
游戏时长(核心机制、第一印象)、
核心留存、
是否付费(付费设计、流失因素)通常以上特征会呈现正态分布,如果出现偏态分布,那可能就有问题需要挖掘
-
-
留存率分析常用指标:留存率计算方式、衰减率、留存矩阵
两种方法差异较大,因为每日导入的用户量级不同,第二种没有考虑用户量级这个影响因素。
- 留存率计算方法
业务普遍方法:N个7日留存的算术平均数为7日留存率
第二种方法:N日留存人数/所有新用户数,求和 - 案例:渠道性质、市场流量对留存率的影响
对渠道流量的分析,需要结合渠道的性质、流量的数量级综合判断。
案例1:比如A渠道留存率较低,可能是因为用户在别的网站看到广告后,再跳转到A渠道下载,但被错判断为A渠道的推广效果;
案例2:A渠道导入100用户,留存率40%;B渠道导入10000用户,留存率35%。不能直接判断B渠道效果比A渠道差,当给A渠道导入10000用户时,其留存不一定优于B渠道。
- 留存率计算方法
Tips:
1. 如果7日留存率<8%,说明要重新优化;
2. 留存效果:端游>手游>app;行业标准:次留40%,周留20%,月留10%。
-
留存矩阵_Python实现
# 以下代码只考虑用户每日登录的情况,没有考虑用户次日未登录,间隔几日登录的情况
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 # 得到留存率矩阵
-
衰减率=
衰减率下降,说明N+1日留存率提高,留存率曲线在上升,所以留存转好;
衰减率上升,说明N+1日留存率下降,留存率曲线下降,所以留存# 每批用户留存衰减率变化曲线 data_weaken=(data_rr.shift(periods=1,axis=1)/data_rr)-1 labels=data_count['date_y'].tolist() plt.figure(figsize=(10,3)) for i in range(data_rr.shape[0]): plt.plot(range(1,21),data_weaken.iloc[i,1:] ,label=labels[i].strftime('%y-%m-%d') # Timestamp提取年月日 ,linewidth=2) # 设定线条粗细 plt.xticks(range(1,22)) plt.legend(loc='upper right') plt.show()
-
案例:如何分析留存率下降?
背景:某三日的次日留存率较之前和之后下降了50%,但DAU没有趋势变化。
分析思路:之前提及留存率3要素:环境、用户、产品,留存率分析可以从这3个角度入手。
- 环境:先查看DAU变化,确定是否由于积分墙等推广手段导致低质量用户涌入;
- 用户:因为留存率=$\frac{某批留存用户}{某批新增用户}$,可以先检验是否分母用户质量问题,即安装量、注册量;同时也需要通过运营和推广来确定;
- 产品:如果安装量没有明显变化,但是注册量增加,可能是优化了注册环节,转化了更多新用户;也可能是受运营活动影响,活跃用户注册了新号
通过以上分析,大致可以得到两种结论:
新开服务器,注册账号增加
老玩家刷新号
第一种情况下:
分析注册量和安装量的趋势,确定是否新开服务器会对注册量、安装量产生影响,以及产生多大的影响;并确定问题数据期间是否有新开服务器;
第二种情况下:
- 进一步细化数据:查看注册活跃占比、注册安装转化率、玩家单日游戏次数、留存趋势。因为老玩家新号必然安装量不会有明显增长,且游戏活跃度也会较低;
- 查找问题数据期间的运营活动情况;
通过以上分析,基本能得出结论:
留存率下降原因为:开服+活动影响
新开服后,新建帮派在开服后3日召集10名玩家加入帮派可送帮主大量金额,所以老玩家开新号给自己刷金币用。
如何从数据方面佐证?
-
单日游戏次数
拉取整个游戏所有玩家累计游戏次数,正常情况下数据会是平稳上升的直线,但问题数据期间,数据会有较大幅度的提高。
-
单次游戏时长
拉取整个游戏所有玩家平均游戏时长,正常情况下数据会是平稳的直线,但问题数据期间,数据会出现小幅下降。
-
留存趋势
拉取各批次用户每日留存率,正常情况下各批次用户留存率波动应该一致,但问题数据期间批次用户留存率会明显偏低。
如何优化留存率?
-
产品:提升游戏品质,低成本设定
提升游戏品质可采取的措施:提升游戏界面品质、数值优化、优化新手体验、强化个性化体验。
考虑到提升游戏品质成本较高,从低成本角度考虑,可以进行的措施有:加入每日登录奖励、消息推送、短信提醒未登录用户、退出时提醒次日登录奖励
-
环境:持续的推广有助于回流
选择优质的渠道:偏重优质渠道的用户导入;如果优质渠道的留存率低于警戒线,那么要转换为活跃用户留存提升。
增加用户触达方式,比如消息推送、广告展示、应用商城。
-
消息推送:适合老用户,先总结用户特征,根据不同用户特征制定不同的推送方案,以个性化触达用户。
-
广告展示:对于新用户重点为引导转换;对于老用户重点在引导回流;
-
应用商城:这种方式的主要问题在于安装后不会提醒打开APP,这是游戏转化率的原因之一。
-
什么是付费留存、留存作弊?
-
付费用户
付费留存指对付费用户的留存单独计算,其本质是用户人群划分,可以分为:新增付费用户、活跃付费用户。
案例:假设今日的付费用户有100人,其中20人是新增付费用户,80人是老付费用户;老付费用户中有40人在7日内有过付费行为,且今日也有付费,另外40人在7日前有过付费行为,且今日也有付费。那么可以得知,今日付费用户中,有40%来自于7日前付费用户。
付费留存的趋势:付费用户群在游戏刚开始时,新增比例大,随着游戏的发展,老付费用户不断增大,然后稳定。
-
留存作弊
留存作弊指渠道商为了显示渠道用户多、质量高,而向游戏内导入“假用户”,以骗取更多的市场推广费用。这些用户不仅活跃度低,而且几乎不会向游戏付费,是游戏的非目标人群,要尽量识别并避免。
以上内容为《游戏数据分析的艺术》个人学习笔记,包含书籍内容概括、自己的解读。
文章内容仅供参考,有兴趣可自行购买阅读原文。
标签:分析,plt,用户,留存,直方图,付费,date,data 来源: https://blog.csdn.net/weixin_46704989/article/details/121564524