原文链接:http://tecdat.cn/?p=24346 

1.1 我的项目背景:

在明天产品高度同质化的品牌营销阶段,企业与企业之间的竞争集中地体现在对客户的抢夺上。“用户就是上帝”促使泛滥的企业不惜代价去抢夺尽可能多的客户。然而企业在不惜代价倒退新用户的过程中,往往会漠视或无暇顾及已有客户的散失状况,后果就导致呈现这样一种窘况:一边是新客户在源源不断地减少,而另一方面是辛辛苦苦找来的客户却在悄然无声地散失。因而对老用户的散失进行数据分析从而挖掘出重要信息帮忙企业决策者采取措施来缩小用户散失的事件至关重要,火烧眉毛。

1.2 目标:

深刻理解用户画像及行为偏好,挖掘出影响用户散失的关键因素,并通过算法预测客户拜访的转化后果,从而更好地欠缺产品设计、晋升用户体验。

1.3 数据阐明:

此次数据是携程用户一周的拜访数据,为爱护客户隐衷,曾经将数据通过了脱敏,和理论商品的订单量、浏览量、转化率等有一些差距,不影响问题的可解性。

2 读取数据

 

# 显示全副特色df.head()

 3 切分数据

# 划分训练集,测试集X\_train, X\_test, y\_train, y\_test = train\_test\_split(X, y, test\_size=0.2, random\_state=666)

3.1 了解数据

能够看到变量比拟的多,先进行分类,除去指标变量label,此数据集的字段能够分成三个类别:订单相干指标、客户行为相干指标、酒店相干指标。

4 特色工程

 

# 用训练集进行数据摸索train = pd.concat(\[X\_train,y\_train\],axis=1)

4.1 数据预处理

4.1.1 删除不必要的列

X_train.pop("sampleid")X_test.pop("sampleid")train.pop("sampleid")

4.1.2 数据类型转换

字符串类型的特色须要解决成数值型能力建模,将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)

4.1.3 缺失值的变量生成一个批示哑变量

 

zsl = tain.isnll().sum()\[tain.isnll(.sum()!=0\].inex

4.1.4 依据业务教训填补空缺值 

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\_cacityn\_l = picesensitive","onsmng\_cpacty"\]fori in n_lX\_trini\]\[Xra\[X\_trinnew_ser==1\].idex\]=0X\_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中的负值按中位数解决
 

for f in flter_two:a = X_trin\[\].median()X\_tran\[f\]\[X\_train\[f\]<0\]=aX\_test\[f\]\[X\_est\[\]<0\]=atran\[f\]\[train\[f\]<0\]=a

4.1.6 缺失值填充

趋于正态分布的字段,应用均值填充: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

4.2 数据标准化

 

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_robuc(pr,tpr)

 5.2 共线性/数据相关性

 

#共线性--重大共线性0.9以上,合并或删除d = Xtrai.crr()d\[d<0.9\]=0 #赋值显示高相干的变量pl.fufsiz=15,15,dpi200)ssheatp(d)

6 建模与模型评估

6.1 逻辑回归

 

y\_prob = lr.preictproba(X\_test)\[:,1\]y\_pred = lr.predict(X\_testfpr\_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 奢侈贝叶斯

 

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) # 模型准确率

6.3 反对向量机

 

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)

 6.4 决策树

 

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) # 获取真阳率、伪阳率、阈值

6.5 随机森林

 

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) # 模型准确率

6.6 XGboost

 

# 读训练数据集和测试集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))

 6.7 模型比拟

 

plt.xlabel('伪阳率')plt.ylabel('真阳率')plt.title('ROC曲线')plt.savefig('模型比拟图.jpg',dpi=400, bbox_inches='tight')plt.show()

6.8 重要特色

ea = pd.Sries(dct(list((X\_trclumsfc.eatre\_imortancs_))))ea.srt_vlues(acedig=Falsefea\_s = (fa.srt\_vauesacnding=alse)).idex

 

6.9 散失起因剖析

  •  cityuvs和cityorders值较小时用户散失显著高于平均水平,阐明携程平台小城市的酒店信息不足,用户转向应用小城市酒店信息较全的竞品导致用户散失
  • 拜访工夫点在7点-19点用户散失比例高与平均水平:工作日推送应该避开这些工夫点
  • 酒店商务属性指数在0.3-0.9区间内用户散失大于平均水平,且出现递增趋势,阐明平台商务指数高的酒店和用户冀望有差距(价格太高或其余起因?), 商务属性低的用户散失较少
  • 一年内间隔上次下单时长越短散失越重大,受携程2015年5月-2016年1月爆出的负面新闻影响较大,企业应该更加增强本身治理,建立良好社会形象
  • 生产能力指数偏低(10-40)的用户散失较重大,这部分用户占比50%应该引起器重
  • 价格敏感指数(5-25)的人群散失高于平均水平,重视酒店品质
  • 用户转化率,用户年订单数,近1年用户历史订单数越高,24小时内否拜访订单填写页的人群比例越大散失越重大,须要做好用户下单后的追踪体验, 邀请填写入住体验,整顿意见作出改良
  • 提前预约天数越短散失越重大用户一年内勾销订单数越高散失越重大

6.10 倡议:

  • 思考占取三四线城市和低端酒店范畴的市场份额
  • 用户易受企业负面新闻影响,倡议企业敢于承当社会责任,增强本身治理,进步公关新闻解决时效性,建立品牌良好形像
  • 在节假日前2-3周开始热门景点酒店推送
  • 做好酒店下单后的追踪体验,邀请填写入住体验,并整顿用户意见作出改良

7 客户画像

7.1 建模用户分类

# 用户画像特色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) #333Keans.fi(lot_attributes # 训练模型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,拜访频率和预约频率都较高,消费水平高,客户价值大,谋求高品质,对酒店星级要求高,客户群体多集中在老客户中,
倡议:
多举荐口碑好、性价比高的商务酒店连锁酒店房源吸引用户;
在非工作日的11点、17点等日间流量小顶峰时段进行音讯推送。
为客户提供更多差旅地酒店信息;
减少客户散失老本:会员积分制,推出会员打折卡

7.4 后劲用户剖析

占比:80.98% 拜访频率和预约频率都较低,消费水平较低,对酒店星级要求不高,客户群体多集中在新客户中,客户价值待开掘 倡议:
因为新用户居多,属于潜在客户,倡议把握用户初期体验(如初期生产有优惠、打卡流动等),还能够定期推送实惠的酒店给此类用户,以造就用户生产惯性为主;
推送的内容应多为大减价、大酬宾、跳楼价之类的;
因为这部分用户占比拟多,可联合该群体散失状况剖析散失客户因素,进行该群体市场的开辟,进一步进行下沉剖析,开辟新的时长。


最受欢迎的见解

1.从决策树模型看员工为什么到职

2.R语言基于树的办法:决策树,随机森林

3.python中应用scikit-learn和pandas决策树

4.机器学习:在SAS中运行随机森林数据分析报告

5.R语言用随机森林和文本开掘进步航空公司客户满意度

6.机器学习助推快时尚精准销售工夫序列

7.用机器学习辨认一直变动的股市情况——隐马尔可夫模型的利用

8.python机器学习:举荐零碎实现(以矩阵合成来协同过滤)

9.python中用pytorch机器学习分类预测银行客户散失