成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

用戶行為與生存分析

xushaojieaaa / 3014人閱讀

摘要:兩個函數(shù)之間的關系生存分析與新用戶行為然而,生存分析的定義本身讓它和很多用戶行為事件本身發(fā)生聯(lián)系。在此我們只做性別和用戶年齡的回歸分析。結(jié)語這里,我們用生存分析解決并使用在用戶行為分析中。

生存分析的來歷

生存分析(Survival Analysis)來源于基礎醫(yī)學領域,最早用來研究各種治療方案對病人壽命的影響。而壽命則用一個end event(死亡)的方式衡量。基本定義如下:

T為標記事件發(fā)生的時間。

生存函數(shù)(Survival Function)。用來描述未發(fā)生end event的樣本的比例隨時間變化的趨勢。

$S(t) = P(T > t)$

Hazard函數(shù)(Hazard Function)。描述end event發(fā)生的概率變化率。

$lambda (t) = {lim}_{h o 0} frac{P(t le T < t + h | T ge t)}{h}$

兩個函數(shù)之間的關系:

$S(t) = e^{-int_{0}^t lambda (s)ds}$

生存分析與新用戶行為

然而,生存分析的定義本身讓它和很多用戶行為事件本身發(fā)生聯(lián)系。譬如,用戶流失和生存分析研究的概念完全一致,而常見的流失分析,可能會存在以下問題:

無法提供每一個時刻流失發(fā)生的概率

很難具有預測性

多個產(chǎn)品/A-B testing時很難互相做出定量比較。

而生存分析本身就會對以上三個內(nèi)容做出預測,此外,對Customer Lifetime Value能提出一些更有價值的洞識。

但本文試圖擴展生存分析的試用范圍,任何具有觸發(fā)時間特征的事件,都可以采用生存分析的方式做出分析,譬如:

用戶留存

用戶轉(zhuǎn)化

用戶點擊

...

本文以常見的購買行為的轉(zhuǎn)化為例,介紹生存分析的某些應用。

用戶轉(zhuǎn)化
代碼以jupyter notebook的形式放在github這里。
前期構思

本實例是研究,用戶從注冊時開始,隨時間變化其轉(zhuǎn)化率會有何種變化,考慮屆時提供一些運營策略。常規(guī)計算本任務轉(zhuǎn)化率的方式是:

轉(zhuǎn)化率 = # 轉(zhuǎn)化用戶數(shù) / # 總用戶數(shù)數(shù)

這個轉(zhuǎn)化率往往很難提供更多的洞識,我們無法給出自動化運營可以介入的時間要素。而生存分析從本質(zhì)上說,恰恰是研究一個發(fā)生事件的概率隨時間發(fā)生的變化,在此項任務中,事件顯然就是轉(zhuǎn)化?;谶@種思想,我們做出如下分析。

數(shù)據(jù)樣例

生存分析需要以一個用戶為單位,提取參與實驗的時間(這里就是注冊時間),終止實驗/end event發(fā)生時間(這里就是指數(shù)據(jù)采集的截止日期和用戶發(fā)生轉(zhuǎn)化的時間),以及最后是否發(fā)生end event的標記。

因此我們采集了如下數(shù)據(jù)。其中sexbirth_year,province三個字段用以后面的分析,duration則是到事件發(fā)生時總共花費的時間,即test_last_time - signup_time。

user_id signup_time end_time test_last_time buy_time sex birth_year province have_bought duration
0 513336 2017-10-30 21:58:04.323000 2017-10-30 22:03:54.430000 2018-06-01 00:00:00 2017-10-30 22:03:54.430000 1991 山東 True 0.00405216
1 513340 2017-10-30 22:14:35.853000 2017-10-30 22:45:10.243000 2018-06-01 00:00:00 2017-10-30 22:45:10.243000 1988 安徽 True 0.0212314
2 513353 2017-10-31 07:29:04.293000 2018-06-01 00:00:00 2018-06-01 00:00:00 NaT nan nan nan False 212.688
3 513370 2017-10-31 10:45:45.586000 2018-06-01 00:00:00 2018-06-01 00:00:00 NaT 1979 河南 False 212.552
4 513387 2017-10-31 13:00:32.360000 2017-10-31 13:09:38.100000 2018-06-01 00:00:00 2017-10-31 13:09:38.100000 1992 山東 True 0.00631644
分析轉(zhuǎn)化率隨注冊后時間發(fā)生的變化

Python比較完整的支持生存分析的包是Liflinesscikit-survival。兩者之間,對分析友好的方案是前者,我們在本博文中,也主要采用該模塊進行分析。

from lifelines import NelsonAalenFitter, CoxPHFitter, KaplanMeierFitter
from lifelines.statistics import logrank_test

首先,我們需要查看用戶的未轉(zhuǎn)化率(有點繞口),這直接可以用生存分析本身的定義來實現(xiàn)。

kmf = KaplanMeierFitter()
kmf.fit(df["duration"], event_observed=df["have_bought"], label="all")
kmf.plot()

image-20180805225520337.png

顯然,我們可以發(fā)現(xiàn),在50天后,基本上變化不明顯了,最初的50天內(nèi),用40%多的用戶發(fā)生轉(zhuǎn)化。當然,這一圖示并不直觀,我們可以用1 - 未轉(zhuǎn)化率=轉(zhuǎn)化率的方式來重新繪制轉(zhuǎn)化率曲線。

(1 - kmf.survival_function_).plot()

image-20180805230116015.png

顯然,這張圖已經(jīng)可以參與到運營決策中取了,圖中顯示,用戶會在前10天內(nèi)轉(zhuǎn)化,后期變化不在明顯。但我們可以通過生存分析得到更多有意思的結(jié)論。

一個例子就是分析不同產(chǎn)品的生存曲線圖來分析產(chǎn)品之間的好壞(在此不做示范),一個就是用戶本身特征對轉(zhuǎn)化的影響。在此,我們以性別為例,分析性別對用戶更早決定購買產(chǎn)品/轉(zhuǎn)化之間有何有何關系。

ax = subplot(111)

t = np.linspace(0, 50, 51)
kmf.fit(df[df["sex"] == "男"]["duration"], event_observed=df[df["sex"] == "男"]["have_bought"], timeline=t, label="male")
ax = kmf.plot(ax=ax)

kmf.fit(df[df["sex"] == "女"]["duration"], event_observed=df[df["sex"] == "女"]["have_bought"], timeline=t, label="female")
ax = kmf.plot(ax=ax)

plt.ylim(0,1)
plt.title("not buying rate between two gender");

image-20180805230614522.png

ax = subplot(111)

t = np.linspace(0, 50, 51)
kmf.fit(df[df["sex"] == "男"]["duration"], event_observed=df[df["sex"] == "男"]["have_bought"], timeline=t, label="male")
ax = (1 - kmf.survival_function_).plot(ax=ax)

kmf.fit(df[df["sex"] == "女"]["duration"], event_observed=df[df["sex"] == "女"]["have_bought"], timeline=t, label="female")
ax = (1 - kmf.survival_function_).plot(ax=ax)

plt.ylim(0,1)
plt.title("conversion rate between two gender");

image-20180805230718723.png

顯然,我們從圖中可以發(fā)現(xiàn),女性更傾向于更快相信此產(chǎn)品,更早時間并且更多比例的發(fā)現(xiàn)轉(zhuǎn)化。接下來,我們可以利用自帶的log-rank test對兩者是否差異顯著做預測。

logrank_test(event_times_A=df[df["sex"]=="男"]["duration"], event_observed_A=df[df["sex"]=="男"]["duration"],
            event_times_B=df[df["sex"]=="女"]["duration"], event_observed_B=df[df["sex"]=="女"]["duration"])

顯然,差異是顯著的。

分析轉(zhuǎn)化率的變化率

在此,我們使用Nelson Aslen方法分析轉(zhuǎn)化率的變化率隨時間的變化(即Hazard函數(shù))。

naf = NelsonAalenFitter()
naf.fit(df["duration"], event_observed=df["have_bought"], timeline=t, label="all")
naf.plot_hazard(bandwidth=20)

image-20180805231451494.png

圖中可以看出,轉(zhuǎn)化率的變化在前5天內(nèi)略微提高,隨后斷崖式減少,大概在20天左右區(qū)域和緩。換用運營的術語,前五天內(nèi)用戶對產(chǎn)品的信任度略微增加,使得更有可能購買產(chǎn)品;但超過五天還沒有購買意愿的人,購買發(fā)生的可能性隨時間遞減。

一個可能的運營策略就是在第5天做出一些行為,增加用戶的購買意愿,從而達到提高用戶的生命周期的總價值。

當然,我們?nèi)缤厦姘鍓K一樣,也不叫一下性別差異。

image-20180805231922162.png

顯然,女性建立信任的速度更快,但是大致都是以5天為界,在5天時沒有發(fā)生購買行為,后期發(fā)生的概率會越來越小。

生存分析的回歸分析

在此,我們還介紹一種對于不同變量對生存曲線影響的分析方法,并可以作為預測用戶是否可能發(fā)生轉(zhuǎn)化的模型——Cox PH模型。其基本假設是:

$lambda (t, X) = lambda_0(t) exp(eta X)$

即假設待研究的變量不影響到生存模型的形狀,而形狀只有獨立的$$lambda_0(t)$$決定(即只和時間有關)。對此,我們需要對變量進行形狀上的驗證來判斷該模型的有效性。在此我們只做性別和用戶年齡的回歸分析。

上面已經(jīng)驗證過性別的轉(zhuǎn)化率的形狀,我們使用雙對數(shù)繪制對年齡(出生年)的影響。

kmf0 = KaplanMeierFitter()
kmf0.fit(cph_train_df[cph_train_df["birth_year"] == 1960]["duration"], event_observed=cph_train_df[cph_train_df["birth_year"] == 1960]["have_bought"])

kmf1 = KaplanMeierFitter()
kmf1.fit(cph_train_df[cph_train_df["birth_year"] == 1970]["duration"], event_observed=cph_train_df[cph_train_df["birth_year"] == 1970]["have_bought"])

fig, axes = plt.subplots()
kmf0.plot_loglogs(ax=axes)
kmf1.plot_loglogs(ax=axes)

axes.legend(["1960", "1970"])

plt.show()

image-20180805233353267.png

結(jié)果不是很符合預設,但由于演示需要,假設數(shù)據(jù)符合我們的假定,而且我們僅做線性模型。

cph = CoxPHFitter()
cph.fit(cph_train_df, duration_col="duration", event_col="have_bought", show_progress=True)
cph.print_summary()
n=10000, number of events=7683

              coef  exp(coef)  se(coef)       z      p  lower 0.95  upper 0.95     
birth_year -0.0084     0.9916    0.0010 -8.7945 0.0000     -0.0103     -0.0066  ***
sex        -0.1676     0.8457    0.0241 -6.9492 0.0000     -0.2149     -0.1203  ***
---
Signif. codes:  0 "***" 0.001 "**" 0.01 "*" 0.05 "." 0.1 " " 1 

Concordance = 0.528
Likelihood ratio test = 124.891 on 2 df, p=0.00000

我們可以發(fā)現(xiàn),sex影響的項更大,參數(shù)都是顯著的。之后,我們就可以用cph的相關函數(shù)對數(shù)據(jù)進行預測。我們在此用plot_covariate_group函數(shù)來展示不同屬性的影響:

cph.plot_covariate_groups("birth_year", [1960, 1970, 1980, 1990])
cph.plot_covariate_groups("sex", [0, 1])

image-20180805234322978.png

image-20180805234340974.png

顯然,年齡越大、性別為女性越容易信任平臺,更早的做出購買行為。

結(jié)語

這里,我們用生存分析解決并使用在用戶行為分析中。給出更多可能有助于運營以及理解用戶畫像的洞識結(jié)論。

References and Recommending Reading List

Tristan Boudreault | Survival analysis for conversion rates

Playtime Measurement with Survival Analysis https://arxiv.org/pdf/1701.02359

Using Survival Analysis to Predict Sample Retention Rates https://www.bls.gov/ore/pdf/st060060.pdf

Lifelines doc | readthedocs.io

scikit-survival | github

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42136.html

相關文章

  • 畢達哥拉斯的“數(shù)字”正在操控人類?

    摘要:古希臘哲學家畢達哥拉斯曾說,萬物的起源是數(shù)字。作為崇拜數(shù)字的始祖,畢達哥拉斯如果目睹現(xiàn)代人對數(shù)據(jù)的崇拜應該多少有些欣慰,數(shù)字聯(lián)通世界似乎正在踐行著他的古老哲學。古希臘哲學家畢達哥拉斯曾說,萬物的起源是數(shù)字。數(shù)字和數(shù)學與萬物的起源有什么關系呢?在他看來,探討萬物起源這個問題上,形式比質(zhì)料占有優(yōu)先地位。在他之前,最先思考這一哲學問題的哲學家認為萬物起源是火、是水,亦或是氣,但無論什么,都是有形可...

    Eric 評論0 收藏0
  • SDN學習筆記

    摘要:廣義的南向協(xié)議主要分為三種類型。狹義南向協(xié)議原理交換機交換機可以分成流表和安全通道兩部分。表表用于計量和限速,可以針對流制定對應的限速規(guī)則,從而實現(xiàn)豐富的功能,注意不是針對端口的。協(xié)議可以看作是協(xié)議的一種補充。 SDN 什么是SDN SDN是一種框架和思想,核心訴求是通過軟件控制網(wǎng)絡,實現(xiàn)業(yè)務的自動化部署,為方便軟件來控制網(wǎng)絡,希望控制面和轉(zhuǎn)發(fā)面是分離的。 例如,傳統(tǒng)的交換機內(nèi)部,由交...

    lentoo 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<