关于数据挖掘:PYTHON用户流失数据挖掘建立逻辑回归XGBOOST随机森林决策树支持向量机朴素贝叶斯和KMEANS附代码数据

7次阅读

共计 8519 个字符,预计需要花费 22 分钟才能阅读完成。

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

最近咱们被客户要求撰写对于用户散失数据挖掘的钻研报告,包含一些图形和统计输入。

在明天产品高度同质化的品牌营销阶段,企业与企业之间的竞争集中地体现在对客户的抢夺上

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

1.2 目标:

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

**

拓端

,赞 25

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_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 中的负值按中位数解决

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 缺失值填充

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

uc(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_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 奢侈贝叶斯

**

拓端

,赞 35

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 反对向量机

**

拓端

,赞 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) # 模型对测试集的预测后果
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 决策树

**

拓端

,赞 25

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

**

拓端

,赞 13

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


点击题目查阅往期内容

Python 对商店数据进行 lstm 和 xgboost 销售量工夫序列建模预测剖析

左右滑动查看更多

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 值较小时用户散失显著高于平均水平,阐明携程平台小城市的酒店信息不足,用户转向应用小城市酒店信息较全的竞品导致用户散失
  • 拜访工夫点在 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) #333
Keans.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% 拜访频率和预约频率都较低,消费水平较低,对酒店星级要求不高,客户群体多集中在新客户中,客户价值待开掘 倡议:
因为新用户居多,属于潜在客户,倡议把握用户初期体验(如初期生产有优惠、打卡流动等),还能够定期推送实惠的酒店给此类用户,以造就用户生产惯性为主;
推送的内容应多为大减价、大酬宾、跳楼价之类的;
因为这部分用户占比拟多,可联合该群体散失状况剖析散失客户因素,进行该群体市场的开辟,进一步进行下沉剖析,开辟新的时长。


对于作者

Lijie Zhang 逻辑思辨能力强,思考问题全面,熟练掌握数据荡涤和数据预处理、绘图和可视化展现,相熟机器学习 sklearn,xgboost 等库进行数据挖掘和数据建模, 把握机器学习的线性回归、逻辑回归、主成分剖析、聚类、决策树、随机森林、xgboost、svm、神经网络算法。


本文摘选 PYTHON 用户散失数据挖掘:建设逻辑回归、XGBOOST、随机森林、决策树、反对向量机、奢侈贝叶斯和 KMEANS 聚类用户画像 ,点击“ 浏览原文”获取全文残缺材料。


点击题目查阅往期内容

Python 对商店数据进行 lstm 和 xgboost 销售量工夫序列建模预测剖析
PYTHON 集成机器学习:用 ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜寻超参数优化
R 语言集成模型:晋升树 boosting、随机森林、束缚最小二乘法加权均匀模型交融剖析工夫序列数据
Python 对商店数据进行 lstm 和 xgboost 销售量工夫序列建模预测剖析
R 语言用主成分 PCA、逻辑回归、决策树、随机森林剖析心脏病数据并高维可视化
R 语言基于树的办法:决策树,随机森林,Bagging,加强树
R 语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测
spss modeler 用决策树神经网络预测 ST 的股票
R 语言中应用线性模型、回归决策树主动组合特色因子程度
R 语言中自编基尼系数的 CART 回归决策树的实现
R 语言用 rle,svm 和 rpart 决策树进行工夫序列预测
python 在 Scikit-learn 中用决策树和随机森林预测 NBA 获胜者
python 中应用 scikit-learn 和 pandas 决策树进行 iris 鸢尾花数据分类建模和穿插验证
R 语言里的非线性模型:多项式回归、部分样条、平滑样条、狭义相加模型 GAM 剖析
R 语言用规范最小二乘 OLS,狭义相加模型 GAM,样条函数进行逻辑回归 LOGISTIC 分类
R 语言 ISLR 工资数据进行多项式回归和样条回归剖析
R 语言中的多项式回归、部分回归、核平滑和平滑样条回归模型
R 语言用泊松 Poisson 回归、GAM 样条曲线模型预测骑自行车者的数量
R 语言分位数回归、GAM 样条曲线、指数平滑和 SARIMA 对电力负荷工夫序列预测 R 语言样条曲线、决策树、Adaboost、梯度晋升 (GBM) 算法进行回归、分类和动静可视化
如何用 R 语言在机器学习中建设集成模型?
R 语言 ARMA-EGARCH 模型、集成预测算法对 SPX 理论稳定率进行预测在 python 深度学习 Keras 中计算神经网络集成模型 R 语言 ARIMA 集成模型预测工夫序列剖析 R 语言基于 Bagging 分类的逻辑回归 (Logistic Regression)、决策树、森林剖析心脏病患者
R 语言基于树的办法:决策树,随机森林,Bagging,加强树
R 语言基于 Bootstrap 的线性回归预测置信区间预计办法
R 语言应用 bootstrap 和增量法计算狭义线性模型(GLM)预测置信区间
R 语言样条曲线、决策树、Adaboost、梯度晋升(GBM) 算法进行回归、分类和动静可视化
Python 对商店数据进行 lstm 和 xgboost 销售量工夫序列建模预测剖析
R 语言随机森林 RandomForest、逻辑回归 Logisitc 预测心脏病数据和可视化剖析
R 语言用主成分 PCA、逻辑回归、决策树、随机森林剖析心脏病数据并高维可视化
Matlab 建设 SVM,KNN 和奢侈贝叶斯模型分类绘制 ROC 曲线
matlab 应用分位数随机森林(QRF)回归树检测异样值

正文完
 0