国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

用戶行為與生存分析

xushaojieaaa / 3005人閱讀

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

生存分析的來歷

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

T為標記事件發生的時間。

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

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

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

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

兩個函數之間的關系:

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

生存分析與新用戶行為

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

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

很難具有預測性

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

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

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

用戶留存

用戶轉化

用戶點擊

...

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

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

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

轉化率 = # 轉化用戶數 / # 總用戶數數

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

數據樣例

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

因此我們采集了如下數據。其中sexbirth_yearprovince三個字段用以后面的分析,duration則是到事件發生時總共花費的時間,即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
分析轉化率隨注冊后時間發生的變化

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

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

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

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

image-20180805225520337.png

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

(1 - kmf.survival_function_).plot()

image-20180805230116015.png

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

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

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

顯然,我們從圖中可以發現,女性更傾向于更快相信此產品,更早時間并且更多比例的發現轉化。接下來,我們可以利用自帶的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"])

顯然,差異是顯著的。

分析轉化率的變化率

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

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

image-20180805231451494.png

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

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

當然,我們如同上面板塊一樣,也不叫一下性別差異。

image-20180805231922162.png

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

生存分析的回歸分析

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

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

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

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

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

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

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

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

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

image-20180805234322978.png

image-20180805234340974.png

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

結語

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

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42136.html

相關文章

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

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

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

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

    lentoo 評論0 收藏0

發表評論

0條評論

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