专栏名称: 机器学习研究会
机器学习研究会是北京大学大数据与机器学习创新中心旗下的学生组织,旨在构建一个机器学习从事者交流的平台。除了及时分享领域资讯外,协会还会举办各种业界巨头/学术神牛讲座、学术大牛沙龙分享会、real data 创新竞赛等活动。
目录
相关文章推荐
人工智能那点事  ·  男明星粉丝涉嫌伪造官网文章?女演员报警!人民 ... ·  3 天前  
爱可可-爱生活  ·  【CAX:高性能的元胞自动机库,基于JAX/ ... ·  3 天前  
新智元  ·  Pika ... ·  5 天前  
爱可可-爱生活  ·  【OpenAI Realtime ... ·  6 天前  
51好读  ›  专栏  ›  机器学习研究会

【干货】携程酒店浏览客户流失概率预测

机器学习研究会  · 公众号  · AI  · 2017-05-07 19:46

正文



点击上方“机器学习研究会”可以订阅哦
摘要
 

转自: 携程技术中心

 *视频由“IT大咖说”提供,时长约34分钟,请在WiFi环境下观看。更多视频可在大咖说平台观看*


流失率是考量是业务的一个非常关的指。根据史数据建立模型,使用机器学的方法预测流失概率,可以找出用流失的因素,从而完善品,减少客流失概率。


那么,这样的一个问题,我需要做哪些数据分析?特征又是如何提取?如何选择合适的机器学模型?如何整模型的参数?同时对似的问题,又有什么常的套路呢?本文将基于客流失率预测的赛题,以及个人的实战经验上述的问题一一做出解答。


接下来,将从以下几个方面对客户流失率预测这个问题进行阐述:首先,对现有的赛题和数据进行了一个简要的分析;然后是特征工程的介绍,着重介绍了针对现有的数据如何有效地提取特征;第三部分是模型及其原理的介绍,介绍了GBDT的原理,以及XGBoost的使用以及调参方法;第四部分介绍了常见的模型融合的方法,包括Bagging和Stacking,以及在本赛题中融合的架构;最后一部分是经验的总结,结合个人多次的参加大数据竞赛的实战经验,分享了相关经验。


问题分析


拿到一个机器学习问题,我们首先需要明白我们要解决一个什么问题。在云海竞赛平台的官方网站上给的赛题描述是非常模糊的一段话(深入了解...找到...),看完这个可能还是不明白需要干什么。没关系,继续看数据,数据如下图所示。数据上面有个label,是1表示客户最后流失了,是0的话表示最后客户没有流失。看到这里,于是明白了,这是一个分类的预测问题。


                           

接着需要关注赛题的评价标准,对于任何比赛,评价标准一直是一个很重要的东西。评价标准即损失函数,直接决定了我们后边分类器的学习目标。对于一个分类的问题而言,最终的评价标准是准确率和召回率的一个组合,常见的就是F1值或者加权的F1值。对于这个比赛,评价标准是要求在达到97%的准确率的情况下,可以使得最后的召回率尽可能的高。这个也很好理解,和携程的业务关系密不可分。


对于客户流失概率而言,我“宁可错杀三千,也不可放过一个”。就是说,我是要尽可能地采取相关的措施,一定不能允许有客户流失的情况发生。同时,因为挽救可能流失的客户需要成本,所以我也要求尽可能高的召回率。



接下来关注的是数据的具体情况。数据的特征除了id和label以外大致可以分为三类,一种是订单本身的特征,比如订单的预定日期以及订单的入住日期等;另外一种是和用户相关的特征;还有一类特征是和酒店相关的特征,比如酒店的点评人数、酒店的星级偏好等。


同时,我们会注意到官方对于赛题数据,曾经做过这样一个解答:如果一个用户浏览了A、B、C、D四个酒店,最后选择了第四个酒店的话,那么会产生四条记录,并且这四条记录的label都会被标记为1。


从这一点我们可以看出,我们在做本地测试集划分的时候需要基于用户进行划分,也就是要保证划分前后的数据是满足独立同分布的。但是很遗憾,为了保护用户的隐私,并没有提供User ID的数据。因此,我们采取了一种近似的方法,就是看所有和用户相关的属性,如果这些属性都是相同的,那么我们就认为这是一个用户的行为。


我们基于上述原则,将原始训练数据集的三分之二划分为训练数据集,三分之一划分为本地测试集。因为这个场景下的时间序列特性不是很明显,所以没有按时间线对数据进行划分。在特征选择和调参的过程中我们主要使用线下的数据集进行的。


我们整个的工作流程如下图所示。线上的测评每天只有一次机会,我们在线下每天进行多次的特征选择和参数调整。整个的流程包括特征的抽取、数据集重采样、特征选择和模型的融合。



特征工程


整个特征工程的总体流程如下所示,相关的数据已经由比赛的主办方提取完成。我们在本次比赛中主要进行了数据采样一直到模型评估中间的工作。在生成了所有特征之后,我们会进行特征选择,我们通过本地的测试集对特征进行评估,保留有效的特征,去除无用的特征。



首先要进行缺失值的填充工作,从下图的数据中我们看到,有大量的缺失值分布在各个特征中。一般情况下填充缺失值的方法是使用均值或者0进行填充。我们在这里用0填充。但是有些属性,比如用户年订单量这样的特征,用0填充的话会产生混淆,填充之后无法判断是本身是0还是后来填充的0。所以我们对于这类特征,在填充0的基础上,构造一列新的特征,标记原始的数据中的0是否是我们填充得到的。



然后是特征的二值化以及特征的多项式变换,二值化主要使用了one-hot。前者将一些用数字枚举的特征变换成多维的0-1编码,后者根据现有特征演化出相关的特征。这一类的特征可以直接通过调用Sklearn的相关函数实现。


在第一部分的数据分析中,提到了这个数据跟用户是息息相关的。所以在这里在对数据进行用户分组之后,需要提出每组的最大值和最小值作为特征,如下图例子所示。



另外还有聚类特征,整个数据集中重要的两个部分,一个是用户相关的数据,一个是酒店相关的数据。因此,我们把这两类主体进行一个聚类,把类的标签号作为一个新的特征。对用户和酒店我们分别使用以下的特征进行聚类。



最后还有一类特征是根据现有特征衍生出来的一些特征,比如访问日期和实际入住日期之间的差值,还有访问日期和入住日期是不是周末等特征。在机器学习中,是否为周末这个特征往往是非常重要的。


原文链接:

https://mp.weixin.qq.com/s/EwQOpbOaItyvTCKRtDxlVA

“完整内容”请点击【阅读原文】
↓↓↓