原文链接:http://tecdat.cn/?p=24346
在今天产品高度同质化的品牌营销阶段,企业与企业之间的竞争集中地体现在对客户的争夺上(点击文末“阅读原文”获取完整代码数据)。
“用户就是上帝”促使众多的企业不惜代价去争夺尽可能多的客户。但是企业在不惜代价发展新用户的过程中,往往会忽视或无暇顾及已有客户的流失情况,结果就导致出现这样一种窘况:一边是新客户在源源不断地增加,而另一方面是辛辛苦苦找来的客户却在悄然无声地流失。因此对老用户的流失进行数据分析从而挖掘出重要信息帮助企业决策者采取措施来减少用户流失的事情至关重要,迫在眉睫。
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小时历史浏览酒店客户评分均值, landh