暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

高频笔面试考点『留存』你会了吗?

数据攻略 2022-10-22
701

点击上方蓝色【数据攻略】关注+星标~

第一时间获取最新内容


哈喽大家好,我是六哥~

最近不少同学反馈

面试中碰到不少「留存」相关的问题


的确,流量红利逐渐消失

留存作为各大平台重要的KPI指标之一

当然也成为各大厂面试官的热门出题点

在笔试、面试中出现频率、花活也越来越多


所以本篇,咱们就从简到深

从指标定义、方法应用

再结合SQL实操(含数据集

细细来唠唠



------正文手动分割线------

本文结构速览:

一、基础概念

二、衍生指标

三、留存分析方法

四、SQL实战(含数据集)



1

基础概念

▌高频概念

▼留存用户
用户在平台上活跃且经过一段时间后依旧活跃的用户即为留存用户。比如抖音APP在1月1日活跃的用户数为1亿,经过N天后,依旧有活跃的用户为5千万

新注册留存用户

注册登录的用户N天后依旧有活跃的用户即为新注册留存用户。该指标常用在新客拉活等项目中

次日留存率

当日活跃用户中第二日依旧活跃的用户占比,也就是(当日活跃∩次日活跃用户)/ 当日活跃用户数

3日留存率

当日活跃且后3日依旧有活跃的用户占比,也就是(当日活跃∩后3日活跃用户)/ 当日活跃用户数

第3日留存率

当日活跃且第3日依旧有活跃的用户占比,也就是(当日活跃∩第日活跃用户)/ 当日活跃用户数,第三日留存率和三日留存率的差异就是分子统计活跃的时间窗口不一样

N日留存率

当日活跃且后N日依旧有活跃的用户占比,也就是(当日活跃∩后N日活跃用户)/ 当日活跃用户数

第N日留存率

当日活跃且第N日依旧有活跃的用户占比,(当日活跃∩第N日活跃用户)/ 当日活跃用户数


▌Case

为方便大家更直观的理解

这里引入一个简单的案例进行计算

下图是某平台每日的活跃用户:


下图是每日的次留率


下图是三日和第3日的留存如下



2

衍生指标


了解了前面的基础概念

再来讲讲留存中常用的衍生指标

渠道留存率
拆分渠道计算用户留存率。拆分逻辑是根据用户统计当日访问渠道。
比如,通过微信访问小红书的用户A和B,第二日仅有A用户打开了小红书APP,且并非通过微信访问。此时的微信渠道次日留存率为1/2=50%。

留存周期

针对平台新用户,或者是某段特定周期、特定渠道的访问用户,用户的留存率趋势一般呈现如下表现:


根据用户留存的下降趋势可以将用户留存分成三个周期

  • 振荡期,我们主要关注用户激活,在这个阶段中,我们需要让用户迅速低成本地感受到产品的核心价值

  • 选择期(蒸馏期、淘汰期),在这个阶段,用户对产品有初步了解,开始探索产品是否满足其核心需求,我们就要关注老用户的留存提升,打造好产品的核心功能,培养用户对产品的使用习惯。

  • 平稳期,用户已经基本养成使用习惯,我们接下来就要思考产品对用户的长期价值是什么,如何才能让用户反复体验到产品的价值。



3

留存分析方法


在日常工作中会经常碰到例如

留存相关的异常分析\探索等问题

因此接下来讲讲有关留存的常用分析方法

为了让大家更好理解

我会引入一个具体的业务问题

将对应分析方法的应用做一个简单demo:


方法一 :同期群留存分析法
定义:同期群留存分析法即按某条件(如时间维度)对用户建立分组,锚定分组用户观察后续统计日期内的留存率表现,可纵向比较不同时期分组的用户留存差异。


举例:比如下面根据每天的注册的用户进行拆分分组,观察用户1天~5天的留存情况。从下面的结果中发现,2022.1.1活跃度用户,1-5天的留存率均低于其他日期。但是2022.1.1当日活跃用户数也远高于其他日期。猜测是当日可能引入了一波新用户。


▼子方法① :新老用户同期群留存分析法

通常情况下,新老用户对产品的行为表现差异较大。以电商为例,新用户的购物转化及客单价均远低于老用户。所以针对留存率问题,可以结合新老用户和同期群进行比对分析。


继续前面提到的数据和猜想,我们将用户拆分成新老客,数据如下:

  • 老客的留存率相对比较稳定,每天无明显差异。
  • 2022.1.1的新客引入量为31万,留存率远低于其他日期
因此图1中1.1留存异常的原因是因为1.1新注册的新用户

▼Tips:

  • 新老用户在留存上存在非常大的差异
  • 新老用户的组成比例也容易出现辛普森悖论

关于辛普森悖论,可参考往期文章

高频面试题--辛普森悖论


子方法②:渠道同期群分析
一般情况下,各大公司的产品均会通过多种渠道来获客。比如在知乎上总能“不小心”点击跳转到京东平台,比如通过线下沙龙或者公众号活动来导流。

由于每个渠道的获客成本不一样,分析每个渠道的留存率尤其是新用户的留存率就非常重要。留存率高说明是一个高价值渠道,后续可尝试做更多的投入。


继续图2的分析,前面已经定位到2022.1.1新注册用户的留存率较低,所以导致数据出现异常。现在将2022.1.1新注册的用户来源进行拆分,并统计拆分后用户1-5天的留存情况。如下图所示:

图3

为了更加直观的看到头条与其他渠道的差异,下面用曲线图表示:



Tips: 图像相比表格数据更能直观获取到数据结果。



方法二:产品功能留存矩阵

对于平台不同的产品尤其是同类型产品,比如淘宝的种树浇水、种果树等均属于游戏类产品。可以通过分析不同产品/产品内的重要功能模块的使用量和留存率进行分析比对,进一步来定位留存表现。


图3我们得到从头条注册进来的用户留存率较差,下面我们继续结合产品形态进行分析,可以进一步获取到这批用户注册后首次使用的产品及后续的留存情况:


  • 图中最右上的橘色代表该功能留存率和使用量均很高,这类产品可以进行监控,对流失用户进行预警挽留。
  • 图中左上角的红色代表使用量高但是留存率低,这类产品应优化产品,增加用户粘性。

  • 图中右下角绿色代表使用量低但是留存率高,这类产品应该扩大用户影响面,提高使用的用户量。


至此,结合新老用户,同期分期,渠道,产品功能,基本定位了2022.1.1留存异常的问题。


最后针对本次Case,再来做个小的总结:

  • ① 首先通过同期群对比发现,1月1日的活跃用户多但是留存率低
  • 然后对用户进行新老客拆分,并进行同期群比较,得到①中的问题主要是新客引起的。

  • 为了进一步了解新用户的注册来源,对1月1日新注册的用户进行了渠道拆分,发现头条过来注册的新用户量大但是留存率较低,进而推导出头条注册新用户质量较差的结论。

  •  对头条新注册的用户再做进一步的拆分,结合平台的产品功能,分析产品功能留存矩阵,对比挖掘出具体是哪个产品功能的用户留存率更低,以便后续给到产品相关优化建议。



▌Tips

在处理留存异常的问题,如需量化不同渠道或者不同用户对异常指标的贡献度,可参考往期文章

『指标异动』你真的理解吗?

『指标异动』贡献度定量归因之法



4

SQL实战


留存作为SQL笔面试中的高频考点

同时,也为了加强大家对留存指标的理解

这里我出一个SQL的测试题供大家自测


现有两张表,分别为:

表①:用户活跃表(user_actv_log)

  • 用户ID:uid

  • 活跃日期:dt

表②:用户城市信息表(user_info)

  • 用户ID:uid

  • 用户所在城市: city

定义:30天内有访问数据记为活跃,反之为流失。

请统计每个城市2021年6月30日当天的活跃用户及流失情况。

  • 6.30活跃定义为6.1~6.30期间活跃
  • 6.30流失定义为7.1~7.30期间没有活跃
请输出以下字段:
  • 城市信息:city

  • 活跃人数:actv_usr

  • 流失人数: churn_cnt

  • 流失率: churn_rate


参考答案
    SELECT
    c.city
    ,COUNT(1) AS actv_usr
    ,SUM(CASE WHEN b.uid IS NULL THEN 1 ELSE 0 END) AS churn_cnt
    ,SUM(CASE WHEN b.uid IS NULL THEN 1 ELSE 0 END)/COUNT(1) AS churn_rate
    FROM
    (
    SELECT
    uid
    FROM user_actv_log a
    WHERE dt >= '2021-06-01'
    AND dt <= '2021-06-30'
    GROUP By uid
    )a
    INNER JOIN user_info c
    ON a.uid = c.uid
    LEFT JOIN
    (
    SELECT
    uid
    FROM user_actv_log a
    WHERE dt >= '2021-07-01'
    AND dt <= '2021-07-30'
    GROUP By uid
    )b
    ON a.uid = b.uid
    GROUP By c.city
    order by city , actv_usr

    想动手实操的同学,可复制下面数据集到本地进行测试

      CREATE TABLE user_actv_log
      (`uid` int, `dt` date)
      ;


      INSERT INTO user_actv_log
      (`uid`, `dt`)
      VALUES
      (1, '2021-06-01'),
      (1, '2021-06-03'),
      (2, '2021-06-30'),
      (4, '2021-06-03'),
      (5, '2021-06-30'),
      (1, '2021-07-02'),
      (2, '2021-07-02'),
      (3, '2021-07-02'),
      (4, '2021-07-03'),
      (5, '2021-08-30'),
      (6, '2021-07-02'),
      (7, '2021-07-02'),
      (8, '2021-07-03'),
      (9, '2021-08-30'),
      (7, '2021-06-02'),
      (8, '2021-06-03'),
      (9, '2021-06-30')
      ;




      CREATE TABLE user_info
      (`uid` int, `city` varchar(8))
      ;


      INSERT INTO user_info
      (`uid`, `city`)
      VALUES
      (1, 'shanghai'),
      (2, 'beijing'),
      (3, 'shanghai'),
      (4, 'beijing'),
      (5, 'shanghai'),
      (6, 'beijing'),
      (7, 'xian'),
      (8, 'xian'),
      (9, 'xian'),
      (10, 'beijing'),
      (11, 'shanghai')
      ;
      输出结果为:


      最后,为助力大家冲刺心仪offer
      六哥我为大家整理了笔面试真题库
      需要的同学可后台回复求职资料,获取领取方式
      题库已做了更新补充,获取方式如已失效的同学可我

      资料库部分资料列举:





      如若盼 追更 求职类干货系列 
      欢迎大家转发,点亮在看
      你的鼓励,是对创造者最大的支持~
      也可以在公众号后台找到我,说说你的困惑 ~

      往期好文推荐 
      求职类
      【数据分析岗】面试该如何做准备
      大厂面试官唠唠『优秀简历』长啥样?
      【数据分析岗】常见笔试题型梳理(附case)
      【数据分析岗】字节面试真题(含答案)+送100道面试题库
      日常学习类

      警惕数据分析中的『幸存者偏差』陷阱

      2种方法快速分析群体差异(附case)!

      『指标异动』贡献度定量归因之法,带你知因又知果!

      讲懂高频Hive:窗口函数(一)

      更多 『求职干货』 & 『日常学习』 系列好文,等你发现~



      Ps. 微信推文改了规则

      看完记得设置为 “ 星标 ” 

      不然我会消失的




        点个在看,肝『干货』更有动力

      文章转载自数据攻略,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论