首页 > 编程语言 >【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据

时间:2023-10-27 11:39:20浏览次数:28  
标签:SVM 填充 Python train 用户 流失 test 酒店 数据挖掘

最近我们被客户要求撰写关于用户流失数据挖掘的研究报告,包括一些图形和统计输出。

即使是同一种植物,由于生长的地理环境的不同,它们的特征会有所差异。例如鸢尾花,可分为山鸢尾、杂色鸢尾、维吉尼亚鸢尾。

假设此时您得到了一朵鸢尾花,如何判断它属于哪一类呢?

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_支持向量机

支持向量机算法原理

·其主要思想是找到空间中的一个能够将所有数据样本划开的超平面,并且使得样本集中所有数据到这个超平面的距离最短。

·支持向量机可以分为线性和非线性两大类。

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_决策树_02

支持向量机的标准:

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_数据_03

非线性支持向量机

·高斯核:尺度参数gamma

·多项式核:阶数degree

(线性支持向量机:正则化参数C) 调参

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_支持向量机_04

数据指标:

SL花尊长度(cm) ,SW花芎宽度(cm)PL花辨长度(cm),PW花瓣宽度(cm)鸢尾花种类: Iris Setosa;

Iris Versicolour;Iris Virginica

数据数量:共150个数据点

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_支持向量机_05

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_支持向量机_06

使用多项式核函数的非线性支持向量机训练分类模型

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_决策树_07

Python用户流失数据挖掘:建立支持向量机、逻辑回归、XGboost、随机森林、决策树、朴素贝叶斯模型和Kmeans用户画像

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

“用户就是上帝”促使众多的企业不惜代价去争夺尽可能多的客户。但是企业在不惜代价发展新用户的过程中,往往会忽视或无暇顾及已有客户的流失情况,结果就导致出现这样一种窘况:一边是新客户在源源不断地增加,而另一方面是辛辛苦苦找来的客户却在悄然无声地流失。因此对老用户的流失进行数据分析从而挖掘出重要信息帮助企业决策者采取措施来减少用户流失的事情至关重要,迫在眉睫。

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_决策树_08

1.2 目的:

深入了解用户画像及行为偏好,挖掘出影响用户流失的关键因素,并通过算法预测客户访问的转化结果,从而更好地完善产品设计、提升用户体验。

1.3 数据说明:

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

2 读取数据

 

 

# 显示全部特征
df.head()

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_决策树_09

 3 切分数据

 

 

# 划分训练集,测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=666)

3.1 理解数据

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

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_支持向量机_10

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_支持向量机_11

4 特征工程

 

 

# 用训练集进行数据探索
train = pd.concat([X_train,y_train],axis=1)

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_支持向量机_12

4.1 数据预处理

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_决策树_13

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_决策树_14

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)

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_决策树_15

5.2 共线性/数据相关性

 

 

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

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_支持向量机_16

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 朴素贝叶斯

 

 

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

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_数据_17

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

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_决策树_18

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))

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_支持向量机_19

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=False
fea_s = (fa.srt_vauesacnding=alse)).idex

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_决策树_20

6.9 流失原因分析

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

6.10 建议:

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_支持向量机_21

  • 考虑占取三四线城市和低端酒店范围的市场份额
  • 用户易受企业负面新闻影响,建议企业勇于承担社会责任,加强自身管理,提高公关新闻处理时效性,树立品牌良好形像
  • 在节假日前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))

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_决策树_22

【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_数据_23

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% 访问频率和预定频率都较低,消费水平较低,对酒店星级要求不高,客户群体多集中在新客户中,客户价值待挖掘 建议:
因为新用户居多,属于潜在客户,建议把握用户初期体验(如初期消费有优惠、打卡活动等),还可以定期推送实惠的酒店给此类用户,以培养用户消费惯性为主;
推送的内容应多为大减价、大酬宾、跳楼价之类的;
由于这部分用户占比较多,可结合该群体流失情况分析流失客户因素,进行该群体市场的开拓,进一步进行下沉分析,开拓新的时长。


关于作者

在此对Bailey ZhengLijie Zhang对本文所作的贡献表示诚挚感谢。Lijie Zhang熟悉机器学习 sklearn, xgboost 等库进行数据挖掘和数据建模。Bailey擅长计量经济、机器学习。

若您是个人学习者或培训负责人,希望学习拓端的线上/线下课程, 欲了解更多拓端学堂课程及信息,


【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例|附代码数据_支持向量机_24

最受欢迎的见解

1.PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯模型和KMEANS聚类用户画像

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

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

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

5.R语言用随机森林和文本挖掘提高航空公司客户满意度

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

7.用机器学习识别不断变化的股市状况——隐马尔可夫模型的应用

8.python机器学习:推荐系统实现(以矩阵分解来协同过滤)

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

▍关注我们 【大数据部落】第三方数据服务提供商,提供全面的统计分析与数据挖掘咨询服务,为客户定制个性化的数据解决方案与行业报告等。 ▍咨询链接:http://y0.cn/teradat ▍联系邮箱:[email protected]



标签:SVM,填充,Python,train,用户,流失,test,酒店,数据挖掘
From: https://blog.51cto.com/u_14293657/8051900

相关文章

  • Python用正则化Lasso、岭回归预测房价、随机森林交叉验证鸢尾花数据可视化2案例
    机器学习模型的表现不佳通常是由于过度拟合或欠拟合引起的,我们将重点关注客户经常遇到的过拟合情况。过度拟合是指学习的假设在训练数据上拟合得非常好,以至于对未见数据的模型性能造成负面影响。该模型对于训练数据中没有的新实例的泛化能力较差。复杂模型,如随机森林、神经网络和X......
  • Python给你一个字符串,你怎么判断是不是ipv4地址?手写这段代码,并写出测试用例【杭州多测
    ipv4地址的格式:(1~255).(0 ~255).(0 ~255).(0 ~255)1.正则表达式importredefcheck_ip(one_str):compile_ip=re.compile('^(([1-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$')ifcompile_ip.match(one_str):......
  • 在线问诊 Python、FastAPI、Neo4j — 创建症状节点
    目录症状数据创建节点附学习电子病历中,患者主诉对应的相关检查,得出的诊断以及最后的用药情况。症状一般可以从主诉中提取。症状数据symptom_data.csvCSV中,没有直接一行一个症状,主要想后面将症状=>疾病做关联,最后会在一个Excel中表达所以每行实际对应一个症病,但在创建节点......
  • window安装python3
    win10安装python3a.下载python3网址https://www.python.org/downloads/,点击下图中红框内的按钮下载Python3b.安装python3打开上一步中下载好的文件,显示如下图所示界面。先勾选下图中红色框内的复选框,然后点击紫色框内的“InstallNow”进行安装安装完成后,显示下......
  • 一周学会python2-IDE
    2-IDE2.1集成开发环境的特点与库和框架的简单集成集成面向对象设计语法高亮代码自动完成版本控制除了这些功能,集成开发环境还能为开发人员提供高级调试功能。2.2PyCharmPyCharm是由软件工具开发领域的先驱JetBrains开发的仅用于Python的集成开发环境。最初,JetBrains......
  • 21.8 Python 使用BeautifulSoup库
    BeautifulSoup库用于从HTML或XML文件中提取数据。它可以自动将复杂的HTML文档转换为树形结构,并提供简单的方法来搜索文档中的节点,使得我们可以轻松地遍历和修改HTML文档的内容。广泛用于Web爬虫和数据抽取应用程序中。读者如果需要使用这个库,同样需要执行pip命令用以安装:安装PI......
  • python 字符串str与字典dict转换
    目录python字符串str与字典dict转换字典转字符串字符串转字典带引号不带引号python字符串str与字典dict转换字典转字符串c={'a':'1','b':'1'}b=str(c)print(b,type(b))字符串转字典字符串转字典分两种情况,需要根据你的字符串内容是否带引号决定,如#带引号c={'a......
  • Python 继承和子类示例:从 Person 到 Student 的演示
    继承允许我们定义一个类,该类继承另一个类的所有方法和属性。父类是被继承的类,也叫做基类。子类是从另一个类继承的类,也叫做派生类。创建一个父类任何类都可以成为父类,因此语法与创建任何其他类相同:示例,创建一个名为Person的类,具有firstname和lastname属性以及一个printna......
  • Python 继承和子类示例:从 Person 到 Student 的演示
    继承允许我们定义一个类,该类继承另一个类的所有方法和属性。父类是被继承的类,也叫做基类。子类是从另一个类继承的类,也叫做派生类。创建一个父类任何类都可以成为父类,因此语法与创建任何其他类相同:示例,创建一个名为Person的类,具有firstname和lastname属性以及一个printn......
  • python进阶知识体系md笔记14大体系200页,第2章:linux基础命令学习
    本文从14大模块展示了python高级用的应用。分别有Linux命令,多任务编程、网络编程、Http协议和静态Web编程、html+css、JavaScript、jQuery、MySql数据库的各种用法、python的闭包和装饰器、mini-web框架、正则表达式等相关文章的详细讲述。完整版笔记直接地址:请移步这里共14......