數(shù)據(jù)分析工具箱v1.4——留存分析

背景

留存分析(群組分析,cohort analysis)是以一段時(shí)間窗內(nèi)的研究對(duì)象,觀察其在后續(xù)若干個(gè)時(shí)間窗內(nèi)有指定行為的比例變化趨勢(shì)。

留存率是一個(gè)與DAU強(qiáng)相關(guān)的核心指標(biāo),是反映產(chǎn)品生命力的重要風(fēng)向標(biāo),如果留存率高、衰減速度慢,那就說(shuō)明產(chǎn)品生命力強(qiáng)勁,反之則衰弱。近來(lái)在用戶增長(zhǎng)領(lǐng)域出現(xiàn)一種論調(diào):AARRR已過(guò)時(shí),RARRA才是更好的增長(zhǎng)模型。也強(qiáng)調(diào)了留存率的重要性——如果用戶都不留下來(lái),就不會(huì)給你機(jī)會(huì)做運(yùn)營(yíng)。

與此同時(shí),留存分析也是一種非常常見(jiàn)的數(shù)據(jù)分析模型,基本上各個(gè)業(yè)務(wù)線都會(huì)研究其特定的用戶留存(當(dāng)然留存分析模型不一定僅限于用戶,比如我以前在某自行車(chē)公司就研究過(guò)自行車(chē)的留存,雖然我現(xiàn)在已經(jīng)忘了當(dāng)時(shí)是在研究啥……),比如:

  • 做了一個(gè)運(yùn)營(yíng)活動(dòng),想看參加活動(dòng)的用戶留存
  • 做了一個(gè)AB試驗(yàn),想對(duì)比實(shí)驗(yàn)組和對(duì)照組的用戶留存
  • 產(chǎn)品做了一次改動(dòng),想看影響范圍下的用戶留存
    ……

如果來(lái)一個(gè)這樣的需求,就跑一次數(shù),那就顯得有點(diǎn)不夠優(yōu)雅。正是因?yàn)樗匾?,又常?jiàn),且模型本質(zhì)和計(jì)算邏輯比較通用,所以可以把數(shù)據(jù)處理和計(jì)算的部分抽象在數(shù)據(jù)平臺(tái)上,以便用戶能夠快速高效地進(jìn)行留存分析。

本文的目標(biāo)在于連通底層明細(xì)數(shù)據(jù),并支持用戶在前端上組合篩選條件來(lái)自定義群組,然后自動(dòng)計(jì)算群組的日、周、月留存,并在此基礎(chǔ)上擬合一個(gè)留存率衰減模型,以此來(lái)預(yù)測(cè)群組在任意一天的留存值。整體思路如下:

留存分析數(shù)據(jù)產(chǎn)品設(shè)計(jì)邏輯

數(shù)據(jù)分析方法

留存率計(jì)算方法

在數(shù)據(jù)倉(cāng)庫(kù)日常生產(chǎn)調(diào)度中,有一種計(jì)算留存率的方法,即拿1個(gè)分區(qū)的基準(zhǔn)明細(xì)數(shù)據(jù)不斷左關(guān)聯(lián)后續(xù)N個(gè)時(shí)間窗分區(qū)的明細(xì)數(shù)據(jù),以計(jì)算重合數(shù),進(jìn)而計(jì)算留存率——這是一種穩(wěn)妥的數(shù)據(jù)生產(chǎn)調(diào)度方法,卻有失靈活。

本文計(jì)算的方法如下:
基準(zhǔn)表與行為表按id關(guān)聯(lián),日期不作限制,即同id按日期作笛卡爾積,得到的中間表如下示意——

基準(zhǔn)日 用戶id 行為日 日期差
2019-09-01 user1 2019-09-02 1
2019-09-01 user1 2019-09-03 2
2019-09-01 user1 2019-09-04 3
2019-09-01 user2 2019-09-02 2
2019-09-01 user3 2019-09-05 4

先去重,然后按基準(zhǔn)朱和日期差分組統(tǒng)計(jì)行數(shù),得到的中間表如下示意——

基準(zhǔn)日 日期差 用戶數(shù)
2019-09-01 0 1000
2019-09-01 1 500
2019-09-01 2 300
2019-09-02 0 900
2019-09-02 1 400

再作行列轉(zhuǎn)換——

基準(zhǔn)日 0 1 2 3 4
2019-09-01 1000 500 300 200 100
2019-09-02 900 400 250 150 90
2019-09-03 1200 600 400 200 100

其中0那一列則是基準(zhǔn)值,也是分母,后面各列除以基準(zhǔn)值則可得到留存率;例如1列除以0列則是次日留存率,7列除以0列則是7日留存率。向量化計(jì)算,則可快速得出每一天的留存率。

周、月留存率計(jì)算同理。

留存冪函數(shù)擬合

就拿新增活躍舉例,一個(gè)正常的互聯(lián)網(wǎng)產(chǎn)品,觀察某一天的新增用戶,在后續(xù)N天的留存率,它總體上一定是以斜率逐步下降的速率在逐步衰減,然后到達(dá)平衡——如果把散點(diǎn)圖畫(huà)出來(lái)看,很容易看到長(zhǎng)得很像冪小于0的函數(shù)曲線。

冪函數(shù)曲線

于是就可以用冪函數(shù)來(lái)擬合留存率模型,然后就可以用戶預(yù)測(cè)留存率了。
y = a*x^b

其中y是留存率,x是往后的天數(shù),a是次日留存率(當(dāng)x=1時(shí),y = a),b是衰減冪。
從這個(gè)公式中可以看出:

  1. 次日留存率很重要,它決定了留存衰減曲線的起點(diǎn)和整體高度
  2. 衰減冪b小于0,b越大(越接近0)則衰減越慢,留存越穩(wěn)定;b越?。ń^對(duì)值越大),則衰減越快,越容易流失。

在這個(gè)公式中,x,y和a在訓(xùn)練集中都是已知的,就只需要擬合b;兩邊取對(duì)數(shù),就能把這個(gè)冪函數(shù)模型轉(zhuǎn)化成線性模型,然后用線性模型的擬合方法即可,十分簡(jiǎn)單。

> get_fit_power <- function(x,y){
+   a <- log(x)
+   b <- log(y) - log(y[1])
+   fit <- lm(b~a)
+   return(fit$coefficients[2])
+ }
> 
> # 構(gòu)造樣例數(shù)據(jù)來(lái)驗(yàn)證一下
> x <- 1:100
> y <- rnorm(1)*x^(-0.56234) # 系數(shù)怎么取不重要,冪隨便瞎寫(xiě)一個(gè)
> get_fit_power(x,y)
       a 
-0.56234 

拿完全的冪函數(shù)樣本數(shù)據(jù)去擬合,擬合的結(jié)果完全吻合樣本上的冪,毫無(wú)誤差,哈哈哈。

有了上述2個(gè)數(shù)據(jù)分析方法,就可以進(jìn)行數(shù)據(jù)產(chǎn)品建設(shè)了。

數(shù)據(jù)產(chǎn)品示意

(本文中的示例數(shù)據(jù)來(lái)自于網(wǎng)絡(luò)上某產(chǎn)品的數(shù)據(jù),其中用戶id作去隱私處理。)

上傳基準(zhǔn)明細(xì)數(shù)據(jù)

第一步?jīng)]有別的,還是上傳數(shù)據(jù)。上傳一份用戶粒度的新增明細(xì)數(shù)據(jù),其中日期和用戶id必備,其他維度可加可不加,主要用來(lái)篩選用。

上傳基準(zhǔn)明細(xì)數(shù)據(jù)

控件說(shuō)明

  • 第1個(gè)上傳框用于上傳行為明細(xì)數(shù)據(jù)
  • 第2個(gè)日期區(qū)間選擇器用于選定一段基準(zhǔn)日期,即只看這一段日期以?xún)?nèi)新增的留存率情況
  • 第3個(gè)和第4個(gè)下拉框只有當(dāng)2份數(shù)據(jù)都上傳后才能篩選,取值范圍為2個(gè)表列名的交集(所以2個(gè)表的日期和ID必須同名),通過(guò)用戶篩選,用來(lái)告訴用戶哪個(gè)字段是日期,哪個(gè)字段是ID,才能讓系統(tǒng)正確地關(guān)聯(lián)計(jì)算
  • 第5個(gè)是統(tǒng)計(jì)周期,有daily(默認(rèn))、weeklymonthly3個(gè)值可選,分別對(duì)應(yīng)日留存、周留存和月留存
  • 最后一個(gè)日期單選器,用于在留存冪函數(shù)模型擬合出來(lái)以后,指定1天,計(jì)算基準(zhǔn)日期內(nèi)的新增在指定天的留存預(yù)測(cè)值
頁(yè)面控件

留存率熱力圖

2份數(shù)據(jù)都上傳后,指定日期字段為day,關(guān)聯(lián)ID為userid,統(tǒng)計(jì)周期為daily,則可自動(dòng)計(jì)算并以熱圖形式可視化出統(tǒng)計(jì)周期內(nèi)每1天的新增在后續(xù)的逐日留存率。這是一個(gè)標(biāo)準(zhǔn)的下三角形,每一個(gè)熱塊代表著某一個(gè)基準(zhǔn)日在后續(xù)時(shí)間窗的留存率,顏色從淺到深表示留存率從小到大,鼠標(biāo)移到一個(gè)熱塊上,可以顯示對(duì)應(yīng)的基準(zhǔn)日期、時(shí)間窗間隔,以及對(duì)應(yīng)的留存率。

留存率熱圖

當(dāng)然你可能覺(jué)得這樣會(huì)逼死密集恐懼癥,沒(méi)有關(guān)系,可以縮小要觀察的基準(zhǔn)日期范圍,比如我只想看8月內(nèi)的留存率——

8月內(nèi)留存率

當(dāng)然你可能還是覺(jué)得密集,不想看那么多天,沒(méi)有關(guān)系,可以在圖上通過(guò)縮放截取,只看你關(guān)心范圍內(nèi)的留存情況——

熱力圖截取

同樣地,你可以通過(guò)切換統(tǒng)計(jì)周期,來(lái)觀察周留存和月留存。

周留存
月留存

通過(guò)這幾個(gè)功能,可以對(duì)留存率作全局分析,也可以發(fā)現(xiàn)一些異常的現(xiàn)象。比如下圖所示,這款產(chǎn)品整體留存率偏低,6月5號(hào)這一天的新增用戶,在80+天內(nèi)留存率都很高(約40%+以上的水平),在88天后驟然恢復(fù)到正常水平,所以這一天的新增用戶是什么情況?是數(shù)據(jù)出問(wèn)題了,還是持續(xù)活躍了80+天的水軍?

留存率異常

留存衰減冪函數(shù)模型

留存熱力圖下方有2部分,左下方是留存冪函數(shù)擬合曲線,這個(gè)是基于用戶所篩選(如果沒(méi)有選則不篩選)的基準(zhǔn)日日期范圍內(nèi)的新增用戶的留存率數(shù)據(jù)作擬合,藍(lán)色的點(diǎn)為實(shí)際留存率數(shù)值,黑色的虛線為擬合的冪函數(shù)模型曲線,圖上有擬合的模型結(jié)果;右下方是預(yù)測(cè)留存數(shù),是基于擬合后的冪函數(shù)模型,在用戶指定的預(yù)測(cè)留存日期(上方最后一個(gè)日期選擇器控件篩選結(jié)果)預(yù)測(cè)的數(shù)值,比如第1行的結(jié)果表示,2019-07-17這1天有999個(gè)新增用戶,在經(jīng)過(guò)57天之后(即2019-09-12)將會(huì)衰減至3.78個(gè)。從曲線圖中可以看到散點(diǎn)的分布并不是嚴(yán)格符合冪函數(shù)模型,所以擬合的模型效果不會(huì)很好。

留存衰減冪函數(shù)模型

當(dāng)然,用戶切換基準(zhǔn)日日期范圍后,訓(xùn)練集會(huì)變化,擬合的模型結(jié)果也會(huì)跟著變。比如我這里限定基準(zhǔn)日期范圍為7月下半月(2019-07-16 - 2019-07-31),來(lái)預(yù)測(cè)這一段時(shí)期內(nèi)的新增用戶在8.1號(hào)的留存值。

從下面的曲線來(lái)看,這次的擬合結(jié)果較好?;谛聰M合的模型預(yù)測(cè)結(jié)果,可以看到7.30號(hào)新增了147個(gè)用戶,預(yù)期2天后能留存15個(gè)。

以7月下旬的訓(xùn)練集擬合的留存衰減模型

切片留存分析

我把數(shù)據(jù)處理放在左側(cè)導(dǎo)航欄,表示著數(shù)據(jù)處理結(jié)果可以適用于任何模型,包括這里的篩選,就意味著任何一個(gè)模型不僅能作用于全體數(shù)據(jù),還能作用于用戶任意自定義的切片。比如我只想觀察“來(lái)自于渠道3,用brand_2品牌的男性用戶”的留存情況,只需在左側(cè)輸入篩選條件channel == 'channel_3', brand == 'brand_2', gender == 'male',系統(tǒng)則會(huì)自動(dòng)計(jì)算展現(xiàn)這個(gè)群組的留存率和留存模型。

切片后的留存分析

總結(jié)

本文以留存分析為主題,提供了一種高效的留存率計(jì)算邏輯和留存率冪函數(shù)擬合方法,并將之產(chǎn)品化——只需要指定2份數(shù)據(jù)集,即可自動(dòng)計(jì)算出日、周和月留存,并支持自由篩選群體范圍、觀測(cè)周期、以及時(shí)間窗長(zhǎng)度,同時(shí)還能基于留存率數(shù)據(jù)自動(dòng)擬合留存率冪函數(shù)衰減模型,并基于這個(gè)模型預(yù)測(cè)一段時(shí)間的群組在任意1天的留存情況、

不過(guò)后續(xù)仍有2個(gè)問(wèn)題需要考慮——

  1. 由于這套系統(tǒng)是在單機(jī)內(nèi)存上運(yùn)行,所以試驗(yàn)用的是小樣本量數(shù)據(jù)。但在一款成熟產(chǎn)品的數(shù)據(jù)倉(cāng)庫(kù)中,用戶明細(xì)數(shù)據(jù)可是很龐大的,且關(guān)于日期作笛卡爾運(yùn)算,會(huì)很消耗集群計(jì)算資源——所以真正在生產(chǎn)環(huán)境中,系統(tǒng)的穩(wěn)定性、計(jì)算效率是需要考慮的問(wèn)題。
  2. 其實(shí)留存冪函數(shù)衰減模型再往下挖,就應(yīng)該是DAU預(yù)測(cè)模型了,不過(guò)這個(gè)我現(xiàn)在還拿不準(zhǔn),所以這次先不搞。

參考文檔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 【河馬12月11日打卡】 言語(yǔ)理解:對(duì)29 錯(cuò)11 判斷推理:對(duì) 錯(cuò) 資料分析:對(duì) 錯(cuò) 數(shù)量關(guān)系:對(duì) 錯(cuò) 常識(shí)判斷...
    河馬先森閱讀 373評(píng)論 0 0
  • 如果一個(gè)人在第一次面對(duì)誘惑時(shí)妥協(xié)了,事情發(fā)生后他/她會(huì)說(shuō)保證不會(huì)有下次,但是再下一次再次面對(duì)這樣的事情的時(shí)候,往往...
    年華隨流星而逝閱讀 212評(píng)論 0 1
  • 夢(mèng)行者 2017.11.21 工作時(shí)間占據(jù)了大部分,可控就剩早上...
    UP夢(mèng)行者閱讀 229評(píng)論 4 0
  • 上周四,去新華書(shū)店訂購(gòu)書(shū)籍,發(fā)現(xiàn)了一套適合兒子的書(shū)籍,<培養(yǎng)男孩子的男子漢氣質(zhì)>,正好家里的書(shū)和他現(xiàn)在的階段有點(diǎn)青...
    選定事情999閱讀 261評(píng)論 0 0
  • 人生苦短,請(qǐng)珍惜眼前的路.
    張一諾de閱讀 181評(píng)論 0 1

友情鏈接更多精彩內(nèi)容