1、業(yè)務(wù)背景
以網(wǎng)貸業(yè)務(wù)為背景,跟蹤每個用戶從進(jìn)件到最終還款之間所涉及到的所有環(huán)節(jié),以提高審核通過率和降低還款逾期率為目標(biāo),利用單變量分析法、用戶群組分析法、用戶行為路徑分析法,深入進(jìn)行用戶分析,為產(chǎn)品的用戶運營提供數(shù)據(jù)支持。網(wǎng)貸的一般流程如下:
2、數(shù)據(jù)分析
2.1 單變量分析
2.1.1 業(yè)務(wù)場景
假設(shè)當(dāng)前有一份放貸監(jiān)控報告,報告顯示最近的放款合同的首逾率有走高趨勢,此時就有了這樣的業(yè)務(wù)需求:通過數(shù)據(jù)探查分析制定出可以有效降低首逾率的策略。
2.1.2 分析流程
(1)首先確定分析目標(biāo),制定出降低首逾率的風(fēng)控策略;
(2)提取數(shù)據(jù)分析樣本,提取出更多維度的客戶數(shù)據(jù),比如客戶年齡、地區(qū)等等;
(3)篩選有效變量,通過計算提升度,來篩選出較優(yōu)的變量;
(4)依據(jù)上一步擬定的策略,模擬一下策略執(zhí)行后的首逾率降幅,選擇首逾率降幅大的變量作為重點關(guān)注調(diào)整變量。
2.1.3 常用概念解釋
(1)首逾率=首期逾期的合同數(shù)/首期到了應(yīng)還款的總合同數(shù)
(2)單變量分析:對每個變量單獨分析,查看其對逾期的影響,從而篩選出能夠較好區(qū)分好壞客戶的變量,以便制定對應(yīng)策略。
(3)提升度=最壞分箱的首逾客戶占總首逾客戶的比例/該分箱的區(qū)間客戶數(shù)占比。通俗的來說就是衡量拒絕最壞的那一部分客戶之后,對整體的風(fēng)險控制的提升效果。提升度越高,說明該變量可以更有效的區(qū)分好壞客戶,能夠更少的誤據(jù)好客戶。
2.1.4 具體實現(xiàn)
-
數(shù)據(jù)集
用到的數(shù)據(jù)結(jié)構(gòu)如下:
單變量分析-數(shù)據(jù)集結(jié)構(gòu).PNG
查看數(shù)據(jù)總體情況:
單變量分析-數(shù)據(jù)總體分布.PNG
根據(jù)上圖所示:芝麻信用分和信用卡額度使用率大部分缺失,分析這兩個字段沒什么意義,此處不做分析。 -
計算業(yè)務(wù)指標(biāo)
首先按照實際業(yè)務(wù)需求,對每個字段進(jìn)行分區(qū),然后計算區(qū)間內(nèi)的各大指標(biāo),此處用到的分析指標(biāo)包括區(qū)間用戶數(shù)、區(qū)間逾期用戶數(shù)、區(qū)間未逾期用戶數(shù)、區(qū)間用戶占比、區(qū)間首逾率。結(jié)果如下:字段1-征信查詢次數(shù)計算結(jié)果如下:
征信查詢次數(shù)計算首逾率.PNG
字段2-信用評級計算結(jié)果如下:
信用評級計算首逾率.PNG
字段3-年齡計算結(jié)果如下:
年齡計算首逾率.PNG
字段4-職業(yè)計算結(jié)果如下:
職業(yè)計算首逾率.PNG
字段5-工作時間計算結(jié)果如下:
工作時間計算首逾率.PNG 計算提升度
#近半年征信查詢次數(shù)
bad_rate = dt_info.iloc[dt_info['區(qū)間首逾率'].idxmax()]['區(qū)間逾期用戶數(shù)']/dt_info['區(qū)間逾期用戶數(shù)'].sum()
num_rate = dt_info.iloc[dt_info['區(qū)間首逾率'].idxmax()]['區(qū)間用戶占比']
bad_rate/num_rate
以征信查詢次數(shù)計算提升度為例,得到各個字段的提升度結(jié)果為:
征信查詢次數(shù)(1.95)、信用評級(1.71)、職業(yè)(1.07)、年齡(1.06)、工作時間(1.05)
- 制定策略
上述單變量分析的結(jié)果是:近半年征信查詢次數(shù)和信用評級這兩個變量的提升度最高,下面看一下把這兩個變量的最壞分箱的用戶拒絕后,對整體逾期的影響。
(1)近半年征信查詢次數(shù)
把近半年征信查詢次數(shù)最壞的分箱是查詢次數(shù)>=21的這部分?jǐn)?shù)據(jù),假設(shè)把這部分用戶全部拒絕掉,重新計算首逾率。
new_yq_times = dt_info['區(qū)間逾期用戶數(shù)'].sum() - dt_info.iloc[dt_info['區(qū)間首逾率'].idxmax()]['區(qū)間逾期用戶數(shù)']
new_times = dt_info['區(qū)間用戶數(shù)'].sum()- dt_info.iloc[dt_info['區(qū)間首逾率'].idxmax()]['區(qū)間用戶數(shù)']
new_yq_rate = new_yq_times/new_times
old_yq_rate = dt_info['區(qū)間逾期用戶數(shù)'].sum()/dt_info['區(qū)間用戶數(shù)'].sum()
print('拒絕近半年征信查詢次數(shù)>=21的用戶之后,當(dāng)前首逾率為:{}'.format(new_yq_rate))
print('原始首逾率為:{}'.format(old_yq_rate))
print('首逾率下降了:{}'.format(old_yq_rate-new_yq_rate))
返回:
拒絕近半年征信查詢次數(shù)>=21的用戶之后,當(dāng)前首逾率為:0.2900287361718911
原始首逾率為:0.307584667705824
首逾率下降了:0.017555931533932867
即拒絕近半年征信查詢次數(shù)>=21的用戶之后,首逾率下降了1.8%。
(2)信用評級
信用評級最壞的分箱為ERC這部分?jǐn)?shù)據(jù),假設(shè)把這部分用戶全部拒絕掉,重新計算首逾率。結(jié)果如下:
拒絕信用評級為ERC的用戶之后,當(dāng)前首逾率為:0.2709728076700554
原始首逾率為:0.307584667705824
首逾率下降了:0.036611860035768606
即拒絕信用評級為ERC的用戶之后,首逾率下降了3.7%。
綜上:根據(jù)上面的分析過程,可見,單變量分析對降低首逾率是有效果的,分析結(jié)果可以為運營部門提供參考:建議重點關(guān)注信用評級為ERC的這部分用戶,深入挖掘這部分用戶申請時提交的資料(維度越多越好),以便制定對應(yīng)策略,降低首逾率。
2.2 用戶群組分析
2.2.1 業(yè)務(wù)場景
在做用戶分析時,會有這樣的場景:一個用戶可能一月份申請貸款1次,二月份申請貸款2次,三四月沒有申請,五月份又申請了。也就是對于用戶來說他的數(shù)據(jù)是一個時間面數(shù)據(jù),而且不同用戶的時間面是不相同的,開始時間經(jīng)歷時間都不一樣,而新用戶和老用戶經(jīng)歷的產(chǎn)品運營情況也不一樣,因此我們分析的時候需要考慮到這個因素,而群組分析可以幫助我們在時間軸上對齊用戶。
2.2.2 具體過程
-
數(shù)據(jù)集
用到的數(shù)據(jù)集結(jié)構(gòu)如下:
orderid:訂單id
orderdate:訂單日期
userid:用戶id
totalcharge:金額
用戶群組分析-數(shù)據(jù)集結(jié)構(gòu).PNG - 生成用戶群組
(1)新增訂單月份字段orderperiod;按照每個用戶的訂單的最早時期,生成用戶群組字段cohortgroup
#新字段-orderperiod,用戶訂單月份
df['orderperiod'] = df['orderdate'].apply(lambda x:x.strftime("%Y-%m"))
df.set_index("userid",inplace=True)
#用戶群組字段
df["cohortgroup"] = df.groupby(level=0)['orderdate'].min().apply(lambda x:x.strftime("%Y-%m"))
df.reset_index(inplace=True)
df.head()
返回
(2)根據(jù)用戶群組和月份字段進(jìn)行分組統(tǒng)計(用戶數(shù)量、訂單數(shù)量、購買金額)
#根據(jù)用戶群組和月份字段進(jìn)行分組
grouped = df.groupby(['cohortgroup','orderperiod'])
#求每個用戶群下每一個月份的用戶數(shù)量、訂單數(shù)量、購買金額
cohorts = grouped.agg({
'userid':pd.Series.nunique,
'orderid':pd.Series.nunique,
'totalcharges':np.sum
}).rename(columns={'userid':'totalusers','orderid':'totalorders'})
cohorts.head()
返回
(3)對用戶行為進(jìn)行編號(首次申請編號為1,第二次申請編號為2,以此類推)
#把每個群組繼續(xù)購買的日期字段進(jìn)行改變
def cohort_period(df):
#給首次購買日期編號,第二次購買編號為2,第三次購買編號為3,以此類推
df['cohortperiod'] = np.arange(len(df)) + 1
return df
cohorts = cohorts.groupby(level=0).apply(cohort_period)
#得到每個群組的用戶量
cohorts.reset_index(inplace=True)
cohorts.set_index(['cohortgroup','cohortperiod'],inplace=True)
cohorts.head()
返回
(4)計算留存率
#得到每個群組的用戶量,取第一個用戶量數(shù)據(jù),作為留存率的分母
cohort_group_size = cohorts['totalusers'].groupby(level=0).first()
#計算每個群組的留存
user_retention = cohorts['totalusers'].unstack(0).divide(cohort_group_size,axis=1)
user_retention
返回
根據(jù)上圖可知:
處于相同生命周期階段的用戶(垂直分析),留存率隨著時間推移在逐漸降低;
通過比較不同的同期群,2009-02這個群組的二次留存率明顯低于其他群組的二次留存率;首購時間越晚,留存期限或者說是復(fù)購頻率越來越低。
2.3 用戶行為路徑分析
2.3.1 業(yè)務(wù)場景
以用戶申請網(wǎng)貸為背景,以用戶下載app為起點,詳細(xì)查看后續(xù)路徑的流向以及某個節(jié)點事件的轉(zhuǎn)化情況,得到用戶在網(wǎng)貸申請流程中各個模塊的流轉(zhuǎn)規(guī)律和特點,定位影響轉(zhuǎn)化的主次因素,促進(jìn)產(chǎn)品的優(yōu)化與改進(jìn)。
2.3.2 業(yè)務(wù)分析指標(biāo)
- PV:頁面瀏覽量,每次用戶對頁面或標(biāo)簽的點擊都會記一次PV
- UV:獨立訪客量,。
- 注冊用戶數(shù):只有注冊過的用戶才有可能進(jìn)一步發(fā)生轉(zhuǎn)化行為。
- 激活:激活用戶代表一個用戶在注冊完成以后成功登錄一次。
- 申請用戶數(shù):指活躍用戶中完成貸款申請行為的用戶。
- 放款用戶數(shù):指通過審核并成功放款的用戶。
- 復(fù)借用戶數(shù):指借款次數(shù)超過一次的用戶數(shù)。
- 放貸率:放貸用戶數(shù)/申請用戶數(shù)
2.3.3 具體過程
-
數(shù)據(jù)集
dt_flow(平臺流量表),數(shù)據(jù)結(jié)構(gòu)如下:
用戶行為路徑-流量表.PNG
dt_check(貸款審核表),數(shù)據(jù)結(jié)構(gòu)如下:
-
計算放貸率
按申請日期分組,分別計算新用戶pt_1和老用戶pt_2的放貸率,結(jié)果如下:
用戶行為路徑-新用戶放貸率.PNG
用戶行為路徑-老用戶放貸率.PNG - 計算各節(jié)點路徑轉(zhuǎn)化率
#連接貸款信息表和流量表
dt_1 = pd.merge(dt_flow,pt_1,on=None,left_on='日期',right_on='申請日期')
dt_2 = pd.merge(dt_1,pt_fj,on='申請日期').drop(['日期'],axis=1)
dt_2.head()
返回各節(jié)點流量數(shù)據(jù)
統(tǒng)計匯總各節(jié)點流量數(shù)據(jù)
dt_3 = pd.DataFrame(dt_2.sum()[["PV","UV","注冊數(shù)","激活數(shù)","新用戶申請數(shù)","新用戶放貸數(shù)"]]).reset_index().rename(columns={'index':'指標(biāo)',0:'匯總'})
dt_3
返回
最后以漏斗圖的形式展現(xiàn)各個節(jié)點的總體轉(zhuǎn)化率:
由上圖可知,隨著用戶行為越深入,轉(zhuǎn)化率越來越低,真正申請貸款的用戶僅為2%,最終能貸到款的不到0.1%,最后四個節(jié)點的轉(zhuǎn)化率還有很大的提升空間。