PYTHON用戶流失數(shù)據(jù)挖掘:建立邏輯回歸、XGBOOST、隨機森林、決策樹、支持向量機、樸
原文鏈接:http://tecdat.cn/?p=24346
在今天產(chǎn)品高度同質(zhì)化的品牌營銷階段,企業(yè)與企業(yè)之間的競爭集中地體現(xiàn)在對客戶的爭奪上(點擊文末“閱讀原文”獲取完整代碼數(shù)據(jù))。
“用戶就是上帝”促使眾多的企業(yè)不惜代價去爭奪盡可能多的客戶。但是企業(yè)在不惜代價發(fā)展新用戶的過程中,往往會忽視或無暇顧及已有客戶的流失情況,結(jié)果就導(dǎo)致出現(xiàn)這樣一種窘?jīng)r:一邊是新客戶在源源不斷地增加,而另一方面是辛辛苦苦找來的客戶卻在悄然無聲地流失。因此對老用戶的流失進行數(shù)據(jù)分析從而挖掘出重要信息幫助企業(yè)決策者采取措施來減少用戶流失的事情至關(guān)重要,迫在眉睫。

1.2 目的:
深入了解用戶畫像及行為偏好,挖掘出影響用戶流失的關(guān)鍵因素,并通過算法預(yù)測客戶訪問的轉(zhuǎn)化結(jié)果,從而更好地完善產(chǎn)品設(shè)計、提升用戶體驗。
拓端
,贊20
1.3 數(shù)據(jù)說明:
此次數(shù)據(jù)是攜程用戶一周的訪問數(shù)據(jù),為保護客戶隱私,已經(jīng)將數(shù)據(jù)經(jīng)過了脫敏,和實際商品的訂單量、瀏覽量、轉(zhuǎn)化率等有一些差距,不影響問題的可解性。
2 讀取數(shù)據(jù)
#?顯示全部特征 df.head()

?3 切分數(shù)據(jù)
#?劃分訓(xùn)練集,測試集 X\_train,?X\_test,?y\_train,?y\_test?=?train\_test\_split(X,?y,?test\_size=0.2,?random\_state=666)
3.1 理解數(shù)據(jù)
可以看到變量比較的多,先進行分類,除去目標變量label,此數(shù)據(jù)集的字段可以分成三個類別:訂單相關(guān)指標、客戶行為相關(guān)指標、酒店相關(guān)指標。


4 特征工程
#?用訓(xùn)練集進行數(shù)據(jù)探索 train?=?pd.concat(\[X\_train,y\_train\],axis=1)

4.1 數(shù)據(jù)預(yù)處理


4.1.1 刪除不必要的列
X_train.pop("sampleid") X_test.pop("sampleid") train.pop("sampleid")
4.1.2 數(shù)據(jù)類型轉(zhuǎn)換
字符串類型的特征需要處理成數(shù)值型才能建模,將arrival和d相減得到"提前預(yù)定的天數(shù)",作為新的特征
#?增加列 #?將兩個日期變量由字符串轉(zhuǎn)換為日期格式類型 train\["arrial"\]?=?pd.to_datimetain\["arrval"\]) X\_tst\["arival"\]?=?d.to\_daetime(X_est\["arival"\]) #?生成提前預(yù)定時間列(衍生變量) X\_trin\["day\_adanced"\]?=?(X_rain\["arival"\]-Xtrain\["d"\]).dt.days ##?刪除列 X_tran.dro(columns="d","arrivl"\],inpace=True)
4.1.3 缺失值的變量生成一個指示啞變量
zsl?=?tain.isnll().sum()\[tain.isnll(.sum()!=0\].inex
4.1.4 根據(jù)業(yè)務(wù)經(jīng)驗填補空缺值?
ordernum_oneyear 用戶年訂單數(shù)為0 ,lasthtlordergap 11%用600000填充 88%用600000填充 一年內(nèi)距離上次下單時長,ordercanncelednum 用0填充 用戶一年內(nèi)取消訂單數(shù),ordercanceledprecent 用0t填充 用戶一年內(nèi)取消訂
單率 242114 242114 -為空 有2種情況 1:新用戶未下訂單的空-88.42% 214097 2.老用戶1年以上未消費的空 增加編碼列未下訂單新用戶和 1年未下訂單的老用戶
price\_sensitive -0 ,中位數(shù)填充 價格敏感指數(shù),consuming\_capacity -0 中位數(shù)填充 消費能力指數(shù) 226108 -為空情況 1.從未下過單的新用戶214097 2.12011個人為空原因暫不明確
uv\_pre -24小時歷史瀏覽次數(shù)最多酒店歷史uv. cr\_pre -0,中位數(shù)填充 -24小時歷史瀏覽次數(shù)最多酒店歷史cr -0,中位數(shù)填充 29397 -為空 1.用戶當(dāng)天未登錄APP 28633 2.剛上線的新酒店178 586 無uv,cr記錄 編碼添加 該APP剛上線的新酒店 764 29397
customereval_pre2 用0填充-24小時歷史瀏覽酒店客戶評分均值, landhalfhours -24小時內(nèi)登陸時長 -用0填充28633 -為空:用戶當(dāng)天未登錄APP 28633
hotelcr ,hoteluv -中位數(shù)填充 797
剛上新酒店 60 #未登錄APP 118
avgprice 0 填充一部分價格填充為0 近一年未下過訂單的人數(shù),cr 用0填充,
tkq?=?\["hstoryvsit\_7ordernm","historyviit\_visit\_detaipagenum","frstorder\_b","historyvi #?tbkq?=?\["hitoryvsit\_7dernum","hisryvisit\_isit_detailagenum"\] X_train\[i\].fillna(0,inplace=True)##?一部分用0填充,一部分用中位數(shù)填充 #?新用戶影響的相關(guān)屬性:ic\_sniti,cosuing\_cacity n\_l?=?picesensitive","onsmng\_cpacty"\] fori?in?n_l X\_trini\]\[Xra\[X\_trinnew_ser==1\].idex\]=0 X\_est\[i\]\[X\_test\[X\_test.nw\_user==1\].inex\]=0
4.1.5 異常值處理
將customer\_value\_profit、ctrip_profits中的負值按0處理
將delta\_price1、delta\_price2、lowestprice中的負值按中位數(shù)處理
for?f?in?flter_two: a?=?X_trin\[\].median() X\_tran\[f\]\[X\_train\[f\]<0\]=a X\_test\[f\]\[X\_est\[\]<0\]=a tran\[f\]\[train\[f\]<0\]=a
4.1.6 缺失值填充
趨于正態(tài)分布的字段,使用均值填充:businessrate\_pre2、cancelrate\_pre、businessrate_pre;偏態(tài)分布的字段,使用中位數(shù)填充.
def?na_ill(df): for?col?in?df.clumns: mean?=?X_trai\[col\].mean() dfcol\]=df\[col\].fillna(median) return##?衍生變量年成交率 X\_train\["onear\_dalate"\]=\_tain\["odernum\_onyear"\]/X\_tran"visinum\_onyar"\] X\_st\["onyardealae"\]=X\_st\["orernum_neyear"\]/Xtest\[visitumonyear"\] X_al?=pd.nca(\[Xtin,Xtes)#決策樹檢驗 dt?=?Decsionr(random_state=666) pre=?dt.prdict(X_test) pre\_rob?=?dt.preicproa(X\_test)\[:,1\] pre_ob
4.2 數(shù)據(jù)標準化
scaler?=?MinMacaer() #決策樹檢驗 dt?=?DeonTreasifi(random_state=666)
5 特征篩選
5.1 特征選擇-刪除30%列
X\_test?=?X\_test.iloc\[:,sp.get_spport()\] #決策樹檢驗 dt?=?DecisonreeClssifie(random_state=666) dt.fit(X\_trin,y\_tain) dt.score(X\_tst,y\_est) pre?=?dt.pdict(X_test) pe\_rob?=?dt.redicproba(X\_test)\[:,1\] pr_rob uc(pr,tpr)

5.2 共線性/數(shù)據(jù)相關(guān)性
#共線性--嚴重共線性0.9以上,合并或刪除 d?=?Xtrai.crr() d\[d<0.9\]=0?#賦值顯示高相關(guān)的變量 pl.fufsiz=15,15,dpi200) ssheatp(d)

6 建模與模型評估
6.1 邏輯回歸
y\_prob?=?lr.preictproba(X\_test)\[:,1\] y\_pred?=?lr.predict(X\_test fpr\_lr,pr\_lr,teshold\_lr?=?metris.roc\_curve(y\_test,y\_prob) ac\_lr?=?metrcs.aucfpr\_lr,tpr_lr) score\_lr?=?metrics.accuracy\_score(y\_est,y\_pred) prnt("模準確率為:{0},AUC得分為{1}".fomat(score\_lr,auc\_lr)) prit("="*30
6.2 樸素貝葉斯
拓端
,贊31
gnb?=?GasinNB()?#?實例化一個LR模型 gnb.fi(trai,ytran)?#?訓(xùn)練模型 y\_prob?=?gn.pic\_proba(X_test)\[:,1\]?#?預(yù)測1類的概率 y\_pred?=?gnb.preict(X\_est)?#?模型對測試集的預(yù)測結(jié)果 fpr\_gnb,tprgnbtreshold\_gb?=?metrics.roc\_crve(ytesty\_pob)?#?獲取真陽率、偽陽率、閾值 aucgnb?=?meic.aucf\_gnb,tr\_gnb)?#?AUC得分 scoe\_gnb?=?merics.acuray\_score(y\_tes,y\_pred)?#?模型準確率

6.3 支持向量機
拓端
,贊19
s?=SVkernel='f',C=,max_ter=10,randomstate=66).fit(Xtrain,ytrain) y\_rob?=?sc.decsion\_untio(X_st)?#?決策邊界距離 y\_ed?=vc.redit(X\_test)?#?模型對測試集的預(yù)測結(jié)果 fpr\_sv,tpr\_vc,theshld\_sv?=?mtris.rc\_urv(y\_esty\_pob)?#?獲取真陽率、偽陽率、閾值 au\_vc?=?etics.ac(fpr\_sc,tpr_sv)?#?模型準確率 scre\_sv?=?metrics.ccuracy\_sore(_tst,ypre)
6.4 決策樹
拓端
,贊20
dtc.fit(X\_tran,\_raiproba(X_test)\[:,1\]?#?預(yù)測1類的概率 y\_pred?=?dtc.predct(X\_test?#?模型對測試集的預(yù)測結(jié)果 fpr\_dtc,pr\_dtc,thresod\_dtc=?metrcs.roc\_curvey_test,yprob)?#?獲取真陽率、偽陽率、閾值

6.5 隨機森林
c?=?RndoForetlassiir(rand_stat=666)?#?建立隨機森 rfc.it(X_tain,ytrain)?#?訓(xùn)練隨機森林模型 y\_rob?=?rfc.redict\_poa(X_test)\[:,1\]?#?預(yù)測1類的概率 y\_pedf.pedic(\_test)?#?模型對測試集的預(yù)測結(jié)果 fpr\_rfc,tp\_rfc,hreshol\_rfc?=?metrcs.roc\_curve(y\_test,\_prob)?#?獲取真陽率、偽陽率、閾值 au\_fc?=?meris.auc(pr\_rfctpr_fc)?#?AUC得分 scre\_rf?=?metrcs.accurac\_scor(y\_tes,y\_ped)?#?模型準確率
6.6 XGboost
拓端
,贊11
#?讀訓(xùn)練數(shù)據(jù)集和測試集 dtainxgbatrx(X_rai,yrain) dtest=g.DMrx(Xtest #?設(shè)置xgboost建模參數(shù) paras{'booser':'gbtee','objective':?'binay:ogistic','evlmetric':?'auc' #?訓(xùn)練模型 watchlst?=?(dtain,'trai) bs=xgb.ran(arams,dtain,n\_boost\_round=500eva=watchlst) #?輸入預(yù)測為正類的概率值 y_prob=bst.redict(dtet) #?設(shè)置閾值為0.5,得到測試集的預(yù)測結(jié)果 y\_pred?=?(y\_prob?>=?0.5)*1 #?獲取真陽率、偽陽率、閾值 fpr\_xg,tpr\_xgb,heshold\_xgb?=?metricsroc\_curv(test,y_prob) aucxgb=?metics.uc(fpr\_gb,tpr\_xgb?#?AUC得分 score\_gb?=?metricsaccurac\_sore(y\_test,y\_pred)?#?模型準確率 print('模型準確率為:{0},AUC得分為:{1}'.format(score\_xgb,auc\_xgb))


6.7 模型比較
plt.xlabel('偽陽率') plt.ylabel('真陽率') plt.title('ROC曲線') plt.savefig('模型比較圖.jpg',dpi=400,?bbox_inches='tight') plt.show()
點擊標題查閱往期內(nèi)容
Python對商店數(shù)據(jù)進行l(wèi)stm和xgboost銷售量時間序列建模預(yù)測分析
左右滑動查看更多
01

02
03
04
6.8 重要特征
ea?=?pd.Sries(dct(list((X\_trclumsfc.eatre\_imortancs_)))) ea.srt_vlues(acedig=False fea\_s?=?(fa.srt\_vauesacnding=alse)).idex

6.9 流失原因分析
cityuvs和cityorders值較小時用戶流失顯著高于平均水平,說明攜程平臺小城市的酒店信息缺乏,用戶轉(zhuǎn)向使用小城市酒店信息較全的競品導(dǎo)致用戶流失
訪問時間點在7點-19點用戶流失比例高與平均水平:工作日推送應(yīng)該避開這些時間點
酒店商務(wù)屬性指數(shù)在0.3-0.9區(qū)間內(nèi)用戶流失大于平均水平,且呈現(xiàn)遞增趨勢,說明平臺商務(wù)指數(shù)高的酒店和用戶期望有差距(價格太高或其他原因?), 商務(wù)屬性低的用戶流失較少
一年內(nèi)距離上次下單時長越短流失越嚴重,受攜程2015年5月-2016年1月爆出的負面新聞影響較大,企業(yè)應(yīng)該更加加強自身管理,樹立良好社會形象
消費能力指數(shù)偏低(10-40)的用戶流失較嚴重,這部分用戶占比50%應(yīng)該引起重視
價格敏感指數(shù)(5-25)的人群流失高于平均水平,注重酒店品質(zhì)
用戶轉(zhuǎn)化率,用戶年訂單數(shù),近1年用戶歷史訂單數(shù)越高,24小時內(nèi)否訪問訂單填寫頁的人群比例越大流失越嚴重,需要做好用戶下單后的追蹤體驗, 邀請?zhí)顚懭胱◇w驗,整理意見作出改進
提前預(yù)定天數(shù)越短流失越嚴重用戶一年內(nèi)取消訂單數(shù)越高流失越嚴重
6.10 建議:

考慮占取三四線城市和低端酒店范圍的市場份額
用戶易受企業(yè)負面新聞影響,建議企業(yè)勇于承擔(dān)社會責(zé)任,加強自身管理,提高公關(guān)新聞處理時效性,樹立品牌良好形像
在節(jié)假日前2-3周開始熱門景點酒店推送
做好酒店下單后的追蹤體驗,邀請?zhí)顚懭胱◇w驗,并整理用戶意見作出改進
7 客戶畫像
7.1 建模用戶分類
#?用戶畫像特征 user\_feature?=?\["decisiohabit\_user,'starprefer','lastpvgap','sid', 'lernum",'historyvisit\_visit\_detaipagenum', "onyear_dealrat \] #?流失影響特征 fea_lis?=?\["cityuvs", "cityorders", "h", "businessrate_pre2" #?數(shù)據(jù)標準化?Kmeans方法對正態(tài)分布數(shù)據(jù)處理效果更好 scaler?=?StanardScalr() lo\_atribues?=?pdDatarame(scr.fittransfrm(all\_cte),columns=all_ce.coluns) #?建模分類 Kmens=Means(n\_cluste=2,rndom\_state=0)?#333 Keans.fi(lot_attributes?#?訓(xùn)練模型 k\_char=Kmenscluster\_centers_?#?得到每個分類 plt.figure(figsize=(5,10))



7.2 用戶類型占比
types=\['高價值用戶','潛力用戶'\] ax.pie\[1\],?raius=0.,colors='w') plt.savefig(用戶畫像.jpg'dpi=400,?box_inchs='tigh')
7.3 高價值用戶分析
占比19.02,訪問頻率和預(yù)定頻率都較高,消費水平高,客戶價值大,追求高品質(zhì),對酒店星級要求高,客戶群體多集中在老客戶中,
建議:
多推薦口碑好、性價比高的商務(wù)酒店連鎖酒店房源吸引用戶;
在非工作日的11點、17點等日間流量小高峰時段進行消息推送。
為客戶提供更多差旅地酒店信息;
增加客戶流失成本:會員積分制,推出會員打折卡
7.4 潛力用戶分析
占比:80.98% 訪問頻率和預(yù)定頻率都較低,消費水平較低,對酒店星級要求不高,客戶群體多集中在新客戶中,客戶價值待挖掘 建議:
因為新用戶居多,屬于潛在客戶,建議把握用戶初期體驗(如初期消費有優(yōu)惠、打卡活動等),還可以定期推送實惠的酒店給此類用戶,以培養(yǎng)用戶消費慣性為主;
推送的內(nèi)容應(yīng)多為大減價、大酬賓、跳樓價之類的;
由于這部分用戶占比較多,可結(jié)合該群體流失情況分析流失客戶因素,進行該群體市場的開拓,進一步進行下沉分析,開拓新的時長。
關(guān)于作者
Lijie?Zhang邏輯思辨能力強,考慮問題全面,熟練掌握數(shù)據(jù)清洗和數(shù)據(jù)預(yù)處理、繪圖和可視化展示,熟悉機器學(xué)習(xí) sklearn, xgboost 等庫進行數(shù)據(jù)挖掘和數(shù)據(jù)建模,掌握機器學(xué)習(xí)的線性回歸、邏輯回歸、主成分分析、聚類、決策樹、隨機森林、?xgboost、 svm、神經(jīng)網(wǎng)絡(luò)算法。

本文摘選《PYTHON用戶流失數(shù)據(jù)挖掘:建立邏輯回歸、XGBOOST、隨機森林、決策樹、支持向量機、樸素貝葉斯和KMEANS聚類用戶畫像》,點擊“閱讀原文”獲取全文完整資料。
點擊標題查閱往期內(nèi)容
Python對商店數(shù)據(jù)進行l(wèi)stm和xgboost銷售量時間序列建模預(yù)測分析
PYTHON集成機器學(xué)習(xí):用ADABOOST、決策樹、邏輯回歸集成模型分類和回歸和網(wǎng)格搜索超參數(shù)優(yōu)化
R語言集成模型:提升樹boosting、隨機森林、約束最小二乘法加權(quán)平均模型融合分析時間序列數(shù)據(jù)
Python對商店數(shù)據(jù)進行l(wèi)stm和xgboost銷售量時間序列建模預(yù)測分析
R語言用主成分PCA、?邏輯回歸、決策樹、隨機森林分析心臟病數(shù)據(jù)并高維可視化
R語言基于樹的方法:決策樹,隨機森林,Bagging,增強樹
R語言用邏輯回歸、決策樹和隨機森林對信貸數(shù)據(jù)集進行分類預(yù)測
spss modeler用決策樹神經(jīng)網(wǎng)絡(luò)預(yù)測ST的股票
R語言中使用線性模型、回歸決策樹自動組合特征因子水平
R語言中自編基尼系數(shù)的CART回歸決策樹的實現(xiàn)
R語言用rle,svm和rpart決策樹進行時間序列預(yù)測
python在Scikit-learn中用決策樹和隨機森林預(yù)測NBA獲勝者
python中使用scikit-learn和pandas決策樹進行iris鳶尾花數(shù)據(jù)分類建模和交叉驗證
R語言里的非線性模型:多項式回歸、局部樣條、平滑樣條、 廣義相加模型GAM分析
R語言用標準最小二乘OLS,廣義相加模型GAM?,樣條函數(shù)進行邏輯回歸LOGISTIC分類
R語言ISLR工資數(shù)據(jù)進行多項式回歸和樣條回歸分析
R語言中的多項式回歸、局部回歸、核平滑和平滑樣條回歸模型
R語言用泊松Poisson回歸、GAM樣條曲線模型預(yù)測騎自行車者的數(shù)量
R語言分位數(shù)回歸、GAM樣條曲線、指數(shù)平滑和SARIMA對電力負荷時間序列預(yù)測
R語言樣條曲線、決策樹、Adaboost、梯度提升(GBM)算法進行回歸、分類和動態(tài)可視化
如何用R語言在機器學(xué)習(xí)中建立集成模型?
R語言ARMA-EGARCH模型、集成預(yù)測算法對SPX實際波動率進行預(yù)測
在python 深度學(xué)習(xí)Keras中計算神經(jīng)網(wǎng)絡(luò)集成模型
R語言ARIMA集成模型預(yù)測時間序列分析
R語言基于Bagging分類的邏輯回歸(Logistic Regression)、決策樹、森林分析心臟病患者
R語言基于樹的方法:決策樹,隨機森林,Bagging,增強樹
R語言基于Bootstrap的線性回歸預(yù)測置信區(qū)間估計方法
R語言使用bootstrap和增量法計算廣義線性模型(GLM)預(yù)測置信區(qū)間
R語言樣條曲線、決策樹、Adaboost、梯度提升(GBM)算法進行回歸、分類和動態(tài)可視化
Python對商店數(shù)據(jù)進行l(wèi)stm和xgboost銷售量時間序列建模預(yù)測分析
R語言隨機森林RandomForest、邏輯回歸Logisitc預(yù)測心臟病數(shù)據(jù)和可視化分析
R語言用主成分PCA、?邏輯回歸、決策樹、隨機森林分析心臟病數(shù)據(jù)并高維可視化
Matlab建立SVM,KNN和樸素貝葉斯模型分類繪制ROC曲線
matlab使用分位數(shù)隨機森林(QRF)回歸樹檢測異常值