赞
踩
最近我们被客户要求撰写关于用户流失数据挖掘的研究报告,包括一些图形和统计输出。
逻辑回归Logistic模型原理和R语言分类预测冠心病风险实例
,时长06:48
从决策树到随机森林:R语言信用卡违约分析信贷数据实例
,时长10:11
在今天产品高度同质化的品牌营销阶段,企业与企业之间的竞争集中地体现在对客户的争夺上。“用户就是上帝”促使众多的企业不惜代价去争夺尽可能多的客户。但是企业在不惜代价发展新用户的过程中,往往会忽视或无暇顾及已有客户的流失情况,结果就导致出现这样一种窘况:一边是新客户在源源不断地增加,而另一方面是辛辛苦苦找来的客户却在悄然无声地流失。因此对老用户的流失进行数据分析从而挖掘出重要信息帮助企业决策者采取措施来减少用户流失的事情至关重要,迫在眉睫。
深入了解用户画像及行为偏好,挖掘出影响用户流失的关键因素,并通过算法预测客户访问的转化结果,从而更好地完善产品设计、提升用户体验。
Boosting集成学习原理与R语言提升回归树BRT预测短鳍鳗分布生态学实例
,时长10:25
此次数据是携程用户一周的访问数据,为保护客户隐私,已经将数据经过了脱敏,和实际商品的订单量、浏览量、转化率等有一些差距,不影响问题的可解性。
- # 显示全部特征
- df.head()
-
- # 划分训练集,测试集
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=666)
可以看到变量比较的多,先进行分类,除去目标变量label,此数据集的字段可以分成三个类别:订单相关指标、客户行为相关指标、酒店相关指标。
- # 用训练集进行数据探索
- train = pd.concat([X_train,y_train],axis=1)
- X_train.pop("sampleid")
- X_test.pop("sampleid")
- train.pop("sampleid")
字符串类型的特征需要处理成数值型才能建模,将arrival和d相减得到"提前预定的天数",作为新的特征
- # 增加列
- # 将两个日期变量由字符串转换为日期格式类型
- train["arrial"] = pd.to_datimetain["arrval"])
- X_tst["arival"] = d.to_daetime(X_est["arival"])
- # 生成提前预定时间列(衍生变量)
- X_trin["day_adanced"] = (X_rain["arival"]-Xtrain["d"]).dt.days
-
- ## 删除列
- X_tran.dro(columns="d","arrivl"],inpace=True)
- zsl = tain.isnll().sum()[tain.isnll(.sum()!=0].inex
-
ordernum_oneyear 用户年订单数为0 ,lasthtlordergap 11%用600000填充 88%用600000填充 一年内距离上次下单时长,ordercanncelednum 用0填充 用户一年内取消订单数,ordercanceledprecent 用0t填充 用户一年内取消订
单率 242114 242114 -为空 有2种情况 1:新用户未下订单的空-88.42% 214097 2.老用户1年以上未消费的空 增加编码列未下订单新用户和 1年未下订单的老用户
price_sensitive -0 ,中位数填充 价格敏感指数,consuming_capacity -0 中位数填充 消费能力指数 226108 -为空情况 1.从未下过单的新用户214097 2.12011个人为空原因暂不明确
uv_pre -24小时历史浏览次数最多酒店历史uv. cr_pre -0,中位数填充 -24小时历史浏览次数最多酒店历史cr -0,中位数填充 29397 -为空 1.用户当天未登录APP 28633 2.刚上线的新酒店178 586 无uv,cr记录 编码添加 该APP刚上线的新酒店 764 29397
customereval_pre2 用0填充-24小时历史浏览酒店客户评分均值, landhalfhours -24小时内登陆时长 -用0填充28633 -为空:用户当天未登录APP 28633
hotelcr ,hoteluv -中位数填充 797
#刚上新酒店 60 #未登录APP 118
avgprice 0 填充一部分价格填充为0 近一年未下过订单的人数,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填充,一部分用中位數填充
- # 新用戶影響的相關屬性: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
将customer_value_profit、ctrip_profits中的负值按0处理
将delta_price1、delta_price2、lowestprice中的负值按中位数处理
- 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
趋于正态分布的字段,使用均值填充:businessrate_pre2、cancelrate_pre、businessrate_pre;偏态分布的字段,使用中位数填充.
- 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
-
- scaler = MinMacaer()
-
- #决策树检验
- dt = DeonTreasifi(random_state=666)
-
-
- 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)
- #共线性--严重共线性0.9以上,合并或删除
- d = Xtrai.crr()
- d[d<0.9]=0 #赋值显示高相关的变量
- pl.fufsiz=15,15,dpi200)
- ssheatp(d)
- 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
- gnb = GasinNB() # 实例化一个LR模型
- gnb.fi(trai,ytran) # 训练模型
- y_prob = gn.pic_proba(X_test)[:,1] # 预测1类的概率
- y_pred = gnb.preict(X_est) # 模型对测试集的预测结果
- 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) # 模型准确率
- 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) # 模型对测试集的预测结果
- 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)
- dtc.fit(X_tran,_raiproba(X_test)[:,1] # 预测1类的概率
- y_pred = dtc.predct(X_test # 模型对测试集的预测结果
- fpr_dtc,pr_dtc,thresod_dtc= metrcs.roc_curvey_test,yprob) # 获取真阳率、伪阳率、阈值
-
-
- c = RndoForetlassiir(rand_stat=666) # 建立随机森
- rfc.it(X_tain,ytrain) # 训练随机森林模型
- y_rob = rfc.redict_poa(X_test)[:,1] # 预测1类的概率
- y_pedf.pedic(_test) # 模型对测试集的预测结果
- 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) # 模型准确率
- # 读训练数据集和测试集
- dtainxgbatrx(X_rai,yrain)
- dtest=g.DMrx(Xtest
- # 设置xgboost建模参数
- paras{'booser':'gbtee','objective': 'binay:ogistic','evlmetric': 'auc'
-
- # 训练模型
- watchlst = (dtain,'trai)
- bs=xgb.ran(arams,dtain,n_boost_round=500eva=watchlst)
- # 输入预测为正类的概率值
- y_prob=bst.redict(dtet)
- # 设置阈值为0.5,得到测试集的预测结果
- 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))
-
- plt.xlabel('伪阳率')
- plt.ylabel('真阳率')
- plt.title('ROC曲线')
- plt.savefig('模型比较图.jpg',dpi=400, bbox_inches='tight')
- plt.show()
- ea = pd.Sries(dct(list((X_trclumsfc.eatre_imortancs_))))
- ea.srt_vlues(acedig=False
- fea_s = (fa.srt_vauesacnding=alse)).idex
- # 用户画像特征
- user_feature = ["decisiohabit_user,'starprefer','lastpvgap','sid',
- 'lernum",'historyvisit_visit_detaipagenum',
- "onyear_dealrat
- ]
- # 流失影响特征
- fea_lis = ["cityuvs",
- "cityorders",
- "h",
- "businessrate_pre2"
- # 数据标准化 Kmeans方法对正态分布数据处理效果更好
- 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 # 训练模型
- k_char=Kmenscluster_centers_ # 得到每个分类
- plt.figure(figsize=(5,10))
- types=['高价值用户','潜力用户']
- ax.pie[1], raius=0.,colors='w')
- plt.savefig(用户画像.jpg'dpi=400, box_inchs='tigh')
占比19.02,访问频率和预定频率都较高,消费水平高,客户价值大,追求高品质,对酒店星级要求高,客户群体多集中在老客户中,
建议:
多推荐口碑好、性价比高的商务酒店连锁酒店房源吸引用户;
在非工作日的11点、17点等日间流量小高峰时段进行消息推送。
为客户提供更多差旅地酒店信息;
增加客户流失成本:会员积分制,推出会员打折卡
占比:80.98% 访问频率和预定频率都较低,消费水平较低,对酒店星级要求不高,客户群体多集中在新客户中,客户价值待挖掘 建议:
因为新用户居多,属于潜在客户,建议把握用户初期体验(如初期消费有优惠、打卡活动等),还可以定期推送实惠的酒店给此类用户,以培养用户消费惯性为主;
推送的内容应多为大减价、大酬宾、跳楼价之类的;
由于这部分用户占比较多,可结合该群体流失情况分析流失客户因素,进行该群体市场的开拓,进一步进行下沉分析,开拓新的时长。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。