應(yīng)用案例:快手是如何利用「生存分析」?
導讀:隨著互聯(lián)網(wǎng)的發(fā)展,一些常規(guī)北極星指標不能準確反映業(yè)務(wù)現(xiàn)狀,例如DAU只體現(xiàn)了一定時間窗口內(nèi)用戶留存的結(jié)果,而用戶行為是隨時間推移陸續(xù)發(fā)生的,發(fā)生時間的快慢包含許多業(yè)務(wù)決策信息。本文將介紹快手數(shù)據(jù)科學家是如何利用生存分析對用戶活躍進行全新的解讀,在關(guān)注事件結(jié)果的同時,也將事件發(fā)生的時間納入日常分析框架,有效刻畫事件隨時間變化的規(guī)律。
具體將從以下幾部分展開:
為什么選擇生存分析描述用戶活躍度
生存分析概述
使用生存分析理解用戶活躍表現(xiàn)
生存分析業(yè)務(wù)應(yīng)用舉例
Kwai Survival:基于深度學習的生存分析模型
1.?DAU的局限性

DAU經(jīng)常被互聯(lián)網(wǎng)公司用作衡量活躍用戶的北極星指標。它的計算非常簡單,在某天24小時內(nèi),如果有一個用戶曾訪問過app,則計為1個DAU。
然而,用戶的行為是隨時間推移陸續(xù)發(fā)生的,發(fā)?時間的快慢和發(fā)生的頻次都能為分析決策提供重要的信息;而DAU只體現(xiàn)了一定時間窗口內(nèi)用戶留存的結(jié)果,是個binary的結(jié)果,并未描述出重要的時間信息。
舉一個具體的例子:快手app在A城市和B城市均有100萬DAU;但A城市的?戶每隔4?時使??次快手(即每天6個sessions),而B城市的?戶每隔6?時使??次快手(即每天4個sessions)。那么,A、B兩個城市誰的?戶活躍度更?呢?如果使用DAU作為衡量指標,A、B的活躍度是一樣的;如果將時間維度考慮進去的話,可以看出兩個城市的用戶訪問app的頻次強度,也就是活躍度,是存在顯著差別的。
2.?為什么選擇?存分析
一般的回歸模型處理的是截面數(shù)據(jù),只關(guān)注事件的結(jié)果(例如用戶是否打開了我們的APP);但生存分析不僅關(guān)注事件的結(jié)果,還將事件發(fā)?的時間納入了模型的分析框架,能夠有效刻畫事件的發(fā)生時間,以及事件隨時間變化的規(guī)律。
生存分析有別于傳統(tǒng)的數(shù)據(jù)分析方法論,對于很多數(shù)據(jù)科學家、算法工程師來說,生存分析可能會是個比較陌生的概念。接下來會著重對生存分析做一個概述。
1.??存分析基本概念

生存分析最早被醫(yī)學領(lǐng)域采?,研究病?從診斷出癌癥后使?不同藥物治療后的死亡時間;?存分析主要是研究直到發(fā)??個或多個事件的預(yù)期持續(xù)時間的?系列統(tǒng)計分析?法,處理的是TIME-TO-EVENT DATA(sequential event data)。
生存分析基本概念匯總:
事件(event):例如死亡、疾病發(fā)?、合約終止等;本文中提到的事件是指用戶活躍,例如用戶是否打開APP。
?存時間(t):從觀察期開始到事件發(fā)?的時間。例如?術(shù)或開始治療的時間、上次到下次打開APP的時間等。
刪失(censorship):在觀察期間內(nèi)(last follow-up)沒有觀測到事件發(fā)?。
?險中的數(shù)量:在觀察期內(nèi)可追蹤其狀態(tài)且未發(fā)?事件的對象數(shù)量。
生存分析的數(shù)據(jù)特征:
非負,離散型,非連續(xù)型變量
不包含missing data
Moments for survival data:mean or median - 半衰期
右圖展示的是典型的生存分析研究:病人診斷出癌癥是在不同的時間段,發(fā)生死亡或者刪失也是在不同的時間段,但經(jīng)過生存分析基本概念的變化能夠把所有事件開始的時間拉到一個統(tǒng)一的基準線,從而進行下一步的研究。
2.?生存分析幾個重要函數(shù)
接下來我們來學習幾個生存分析中的重要函數(shù)。

3.?生存函數(shù)的刻畫

生存函數(shù)一般有兩種刻畫方法:參數(shù)方法與非參數(shù)法。參數(shù)法假定?存時間符合某種分布(如指數(shù)分布、威布爾分布、對數(shù)正態(tài)分布等),根據(jù)樣本觀測值來估計假定分布模型中的參數(shù),以獲得?存時間的概率密度模型;非參數(shù)法即不對數(shù)據(jù)分布做任何假設(shè),直接用概率乘法定理估計生存率,常見的方法包括KaplanMeier曲線、NelsonAalen累計?險曲線等。本文重點介紹非參數(shù)方法,并主要使用KM曲線描述生存函數(shù)。
前文所述的概念、函數(shù)等可能太過抽象,不易理解;接下來我們舉幾個具體的例子來形象化地理解生存函數(shù)。

假設(shè)我們有共k個觀測時刻及N個樣本,d代表在t時刻發(fā)?事件的?數(shù),mj表示在(t,t+1)時間段內(nèi)刪失的?數(shù),那么t時刻依然處于?險中的?數(shù)等于刪失的人數(shù)+t時刻發(fā)生事件的人數(shù);可以表示為:
nj=(mj+dj)+...+(mk+dk)
這樣,t時刻的風險率為dj/n,KM曲線對應(yīng)?存函數(shù)的估計表示為:

即樣本總數(shù)減去t時刻發(fā)?事件的?數(shù)d,再除以樣本總數(shù);最后基于此做累乘而得,形狀如右圖曲線所示。

進一步具體化地描述一個case:目前疫情正在肆虐全球,假設(shè)初始時刻我們共有6個COVID病?,在他們患病后1年的觀測期內(nèi),3號病?在5個?去世了,1號和2號病?在第8個?去世了,8號病?在第10個?去世了,有2個人存活(即刪失)。如右圖所示。
將以上case具體化,可以得到上圖下方的生存函數(shù)表和KM曲線。
以上是對生存分析的大致介紹以及幾個簡單的使用案例,相信讀者們已經(jīng)對生存分析的核心概念有了初步的理解。接下來我們會結(jié)合快手的具體應(yīng)用場景,詳細介紹如何使用生存分析幫助數(shù)據(jù)分析師和業(yè)務(wù)決策者理解用戶的活躍表現(xiàn)。
1.?主要應(yīng)用場景
在快手,數(shù)據(jù)科學家和分析師們利用生存分析做深入研究的應(yīng)用場景主要包括以下4類:

2.?使用KM曲線刻畫用戶群體的活躍度

在介紹基于KM曲線刻畫用戶群體活躍度之前,我們首先將剛才介紹的生存分析基本概念和與描述用戶群體活躍度的相關(guān)狀態(tài)做一一映射:
開始事件:某用戶上次使用快手app的時刻;
結(jié)束事件:該用戶再次使用快手app的時刻;
刪失狀態(tài):上次使用后,在觀測期間再沒有訪問過;
生存函數(shù):截止某時刻,該用戶仍未再次訪問的概率。
為了更直觀地理解,我們模擬并虛構(gòu)了某個區(qū)域用戶的活躍數(shù)據(jù)(風險中人數(shù)、訪問人數(shù)、刪失人數(shù)等),并計算了隨時間變化該區(qū)域的生存函數(shù)變化,如右圖表格所示。
在上表中,“再次訪問”代表事件,“未再次訪問”代表刪失;該區(qū)域研究的初始風險中人數(shù)為1,000,000,隨后每次觀測得到的風險中人數(shù),可以通過前一觀測時刻的風險中人數(shù),減去該次觀測的訪問人數(shù),再減去刪失人數(shù)而最終得到。也就是根據(jù)如下公式:
nj+1=nj-dj-cj
式中,nj代表tj時的風險中人數(shù);dj代表tj時“死亡”(即發(fā)生再次訪問)的人數(shù);cj代表tj時“刪失”(即未發(fā)生再次訪問)的人數(shù)。
類似地,生存函數(shù)的計算公式為:

有了生存函數(shù),我們就可以很容易地通過幾個函數(shù)間的關(guān)系換算得到用戶的留存曲線、風險曲線等。

留存曲線反映了隨著時間推移,累計有Y比例的用戶會在X天內(nèi)再次訪問;換一個角度解讀,也可以理解為Y%的用戶回流需要多少天。曲線形狀越靠近左上方,代表該地區(qū)用戶整體活躍度越高。
風險曲線可以看做是生存函數(shù)S(t)的求導,能反映出隨著時間推移,有Y比例的用戶會在第X天再次訪問;風險曲線可以幫助發(fā)現(xiàn)用戶活動的周期規(guī)律,下圖中區(qū)域2體現(xiàn)了以周為單位的用戶回流周期性。和留存曲線相似,風險曲線也是越靠近左上方,該區(qū)域的的用戶整體活躍度越高。
3.?刻畫區(qū)域用戶群體的活躍度

下面我們看一個通過生存分析比較不同區(qū)域用戶群體活躍度的例子。在左下這個散點圖中,縱坐標“用戶規(guī)模”體現(xiàn)的是用戶量(DAU),橫坐標“未來X日累計留存率”體現(xiàn)的是用戶的活躍度。從圖上看,用戶量和用戶活躍度幾乎沒有明顯的相關(guān)性。實際上,即使兩個區(qū)域的DAU規(guī)模比較接近,用戶在X日內(nèi)的累計留存率的差異也許是非常大的。如右下圖所示,區(qū)域1和區(qū)域2的用戶數(shù)相當,而且DAU、MAU相差也不大,用戶粘性因子(DAU/MAU)數(shù)值也相近。但是如果使用生存函數(shù)去分析兩個區(qū)域用戶的活躍度,就會發(fā)現(xiàn)兩者的差距非常大:例如計算月活用戶活躍小于X天的比例,發(fā)現(xiàn)區(qū)域1只有10%,而區(qū)域2達到20%;同樣,計算日活用戶平均訪問次數(shù),發(fā)現(xiàn)區(qū)域1的平均訪問次數(shù)為3.5,而區(qū)域2的平均訪問次數(shù)僅有2.5。這就意味著,區(qū)域2的高活用戶在區(qū)域1可能就不是高活用戶;如果按照統(tǒng)一標準,那么不同區(qū)域的用戶活躍規(guī)模的異質(zhì)性就難以描述出來。

為了更直觀地體現(xiàn)不同地理區(qū)域用戶活躍度差異,我們引入了?戶活躍度地理版圖,把基于生存分析框架下計算得出的用戶生存概率在地圖上進行投射。圖中,不同的顏色標識X天內(nèi)再次訪問的概率的大小,可以看出,在不同區(qū)域的用戶活躍是有顯著差異和地理聚集性的。對于業(yè)務(wù)決策者來說,如果想要整體提升用戶的活躍度,可以嘗試打破地理區(qū)域的間隔,將相似用戶活躍的地區(qū)進行聚類后制定相應(yīng)的精細化運營策略。
4.?用戶活躍度影響因?建模
① 回歸模型:

接下來著重介紹生存函數(shù)的建模,探索用戶活躍度的影響因子。這里首先介紹標準COX回歸模型,該模型主要研究變量對事件發(fā)?時間的影響。針對一些可重復的事件,可使用ANDERSON GILL COUNTING PROCESS(安德森-吉爾計數(shù)法)。
對于模型效果的評估,這里不能采用分類模型常用的AUC方法;本文采?CONCORDANCE對模型效果進?評估,具體定義如右圖所示。
對于建模特征,主要引入人口特征、消費行為特征和推薦策略特征3大類別。
② 影響?戶活躍度的貢獻度排序

可以使用COX模型結(jié)合SHAPLEY VALUES來對影響用戶活躍的特征貢獻度進行排序,從而直觀展示哪些些特征對用戶的活躍影響更大。例如,從左下圖可以看出,feature_75是最影響用戶活躍度的,其次是feature_21)。右下圖SHAPLEY VALUES是博弈論中的一個概念,是解釋所有排列中特征邊際貢獻的平均值。
我們不僅可以把SHAPLEY VALUES中每個特征邊際貢獻的平均值作為GLOBAL INTERPRETATION來解釋特征對所有用戶的平均效用,同時SHAPLEY VALUES也可以輸出下圖中的LOCAL INTERPRETATION,用來解釋每個特征對不同?戶活躍度的正向或負向影響貢獻度。
接下來我們分享幾個快手數(shù)據(jù)科學家是如何由把生存分析應(yīng)用到業(yè)務(wù)策略的具體實例。
1.?用戶活躍度分層和聚類

第一個業(yè)務(wù)應(yīng)用案例,是基于KM生存曲線對用戶活躍度進行分層,對相似活躍度(KM生存曲線)的用戶進行聚類。以下圖為例,DS對9條生存曲線進行合并和聚類,最終劃分為4類用戶群。針對不同的具有相同特質(zhì)的群體,業(yè)務(wù)部門將更有策略去制定相應(yīng)的產(chǎn)品運營策略。在用戶活躍度分析中,前文提到的傳統(tǒng)的聚類特征(包括人口屬性特征、消費者偏好特征、時長統(tǒng)計特征等)包含的信息量不夠多,而基于用戶行為模式的聚類能夠更加精細地、生動地刻畫和還原用戶與產(chǎn)品間的交互。
2.?利用生存曲線進行防流失干預(yù)

第二個業(yè)務(wù)應(yīng)用案例是利用生存曲線做用戶的防流失干預(yù)。左圖是某群用戶的生存曲線;可以明顯看到,在第X天,生存曲線有一個明顯的拐點 - 這表明在該時間點后,當用戶再次使用產(chǎn)品的概率較小且呈現(xiàn)緩慢衰減時,最佳流失預(yù)警干預(yù)時機其實就是這個時間點。如果對該用戶進行一些有效的防流失干預(yù)(如PUSH、短信等潛在流失?戶召回策略),我們是有可能bend the curve的。
生存分析除了可預(yù)測最佳的防止用戶流失干預(yù)點,還對具體的防流失干預(yù)方式(即召回的?戶觸達策略)提供了充分的信息。例如基于前文提到的SHAPLEY VALUES的LOCAL INTERPRETATION,可以找出影響該用戶的活躍度的正向貢獻因?等。例如,對于某用戶,“是否看直播”這一特征對于用戶活躍度是一個非常大的正向貢獻因子,那么在PUSH中可加?“直播”的相關(guān)內(nèi)容或?案,將用戶感興趣的直播內(nèi)容推送給他,可大大提升用戶的點擊PUSH的ctr,從而加大用戶重回快手APP消費的概率。
3.?推薦策略的優(yōu)化

最后分享的業(yè)務(wù)應(yīng)用案例是推薦策略的優(yōu)化。這個應(yīng)用也和前文提到的SHAPLEY VALUE相關(guān)。我們可以根據(jù)各特征邊際貢獻的平均值排序,有針對性地調(diào)整召回和索引的相關(guān)策略,并優(yōu)化推薦模型在粗排或者精排階段的不同特征的權(quán)重。
1.?KwaiSurvival簡介
本部分將重點分享和介紹快手自主開發(fā)的基于深度學習的生存分析模型——KwaiSurvival。KwaiSurvival 是快?DA?主開發(fā)的基于深度學習框架的集成?存分析軟件,幫助使?者在Python編程環(huán)境下?效地使??存分析模型實現(xiàn)?規(guī)模的數(shù)據(jù)分析。
2.?KwaiSurvival的軟件功能

KwaiSurvival目前集成了3種基于深度學習模型框架的生存模型。分別是DeepSurv Model ;DeepHit Model ;Neural Muyltitask Logistic Model。對于這3個模型框架,在此對相關(guān)的參考文獻做簡要介紹,供參考:

① DeepSurv Model
DeepSurv模型是基于Cox回歸模型的神經(jīng)網(wǎng)絡(luò)版本,其損失函數(shù)定義和Cox模型相似,都是負對數(shù)似然函數(shù)。主要區(qū)別在于,DeepSurv模型將風險函數(shù)非線性化,采用全連接網(wǎng)絡(luò)進行多層感知,進而對風險函數(shù)進行預(yù)估。
② Neural Multitask Logistic Model(N-MTLR)
N-MTLR模型是DeepSurv模型的改進版,主要對網(wǎng)絡(luò)結(jié)構(gòu)和損失函數(shù)做了一系列改進。經(jīng)過多層網(wǎng)絡(luò)連接,最終通過softmax輸出事件在時間s上發(fā)生的概率(即風險函數(shù)),進而求得生存函數(shù)。
③ DeepHit Model
DeepHit模型是基于N-MTLR模型做的進一步改進,仍然是對網(wǎng)絡(luò)結(jié)構(gòu)和損失函數(shù)進行的調(diào)整。基于N-MTLR模型,通過softmax輸出事件發(fā)生的概率之后,特別采用了ResNet結(jié)構(gòu),在share層結(jié)束后可再次輸入信息。該模型的損失函數(shù)包括兩個:一個是類似Cox模型的負對數(shù)似然函數(shù),另一個是類似于前文所述CONCORDANCE的rank loss。基于這兩個損失函數(shù),可大幅提升模型的一致性效果。
3.?KwaiSurvival的優(yōu)勢
為了對比傳統(tǒng)Cox模型和KwaiSurvival的模型表現(xiàn),我們使用包含74個特征共計70W條數(shù)據(jù)作為訓練數(shù)據(jù)進行測試,可以明顯看出:
① KwaiSurvival包含的3種模型的訓練效果都比較良好,其中DeepHit的模型表現(xiàn)比傳統(tǒng)的Cox模型要更加優(yōu)異;
② 在KwaiSurvival包含的3種模型中,DeepHit的模型表現(xiàn)也顯著優(yōu)于另外兩種模型。
③ 從模型計算時間角度看,這幾種模型的計算時間接近。
下表簡單地匯總了傳統(tǒng)Cox模型和KwaiSurvival模型之間的優(yōu)劣勢:

目前我們已經(jīng)將KwaiSurvival的幾個基礎(chǔ)模型上傳分享到GitHub,歡迎對生存分析感興趣的同學能夠把其他的生存分析框架、模型進行上傳和整合。我們的模型還在初期迭代階段,希望大家多給我們提寶貴的意見,謝謝。
GitHub地址:
https://github.com/kwaiDA/KwaiSurvival/tree/kwaiDA-liuziyue

推薦閱讀
歡迎長按掃碼關(guān)注「數(shù)據(jù)管道」
