风中呢喃者 2018-03-05
导语:在2月份举办的网页搜索与数据挖掘会议WSDM上,阿里巴巴获得了WSDM Cup 2018的第二名。本文对获奖论文进行了技术解读。
预测方法
1.介绍
KKBOX 是亚洲一家音乐流媒体公司,其业务模式与 Spotify 和 Apple Music 类似。对于音乐流媒体业务来说,付费会员非常重要,不仅直接影响订阅收入,还会间接影响广告收入。
本次比赛的目标是利用 KKBOX真实的用户行为数据,预测会员是否会流失。比赛中我们面临了很多挑战,如正负样本不均衡、脏数据等问题。我们采取了一些列措施来解决这些问题,比如建立数据清洗和交叉验证机制,使用Stacking Model 来提升准确率。
2.问题定义
本次比赛的目标是预测当月会员到期的用户中哪些会流失。这里“流失”的定义是会员到期后30天内没有续费。
本次比赛的结果采用 Log Loss 进行评估,Log Loss 的计算公式如下:
公式中,N 表示测试样本数,
表示测试样本最终是否流失(1表示流失,0表示没有流失),
为模型预测用户是否会流失的概率(取值0-1)。
3.方法
考虑到模型的数据量和开发效率,我们采用了阿里云的 DataWorks 作为开发平台。
3.1 数据预处理
比赛提供了三份数据,分别是用户的订单明细、听歌日志和人口统计学信息。见下表:
脏数据问题例如年龄数值小于0或者大于100,注册时间和支付金额中的极端异常值。我们处理脏数据的方式包括根据分布将异常值转换为合理取值,删除无法解释且不包含重要信息的数据。
训练样本中,is_churn 是样本的 label,训练样本取自2017年2月和3月订阅到期的用户。训练数据的正负样本极不均衡,以2月份订阅到期的训练样本为例,在总共992931条数据中,is_churn = 1的样本只有63471,占比6.4%。
传统的分类算法比如决策树和逻辑回归都是对正负样本比例有要求。我们使用欠采样的方式对训练样本进行了处理,分别尝试了1:3,1:5,1:8的正负样本配比,在最终模型中,我们根据交叉验证的结果选择了最优配比。
3.2 特征工程
特征工程阶段,我们从计算逻辑、时间窗、额外条件三个维度将数据进行组合。如下图,右边特征列表中 last_7_auto_tran_cnt 表示最近7天(时间窗)自动完成的(额外条件)订单笔数(计算逻辑)。特征组合完成后,我们对特征还要一系列的处理,如 log 转换、one-hot 编码。
我们通过交叉验证来测试特征的有效性。在交叉验证中我们发现,最有效的特征包括:1. 最近60或90天自动完成的订单笔数 2. 最近一笔交易是否被取消或自动完成 3. 账号注册的方式。最终,我们提取了300多个特征,并根据交叉验证的结果留下了204个特征。
3.3 模型
我们使用了一个两阶段模型来预测最终的流失情况。如下图,在第一阶段,提取出的特征会输入逻辑回归、随机森林、XGBoost 三个模型,而第一阶段模型的输出会被当做第二阶段的特征,最终组成一个 Stacking Model。
如下图,我们采用了5-fold stacking 策略。
在第一阶段,将训练数据均匀地分成5份,使用“留一法”训练5个逻辑回归模型,用这5个模型分别去预测剩下的一份训练数据和测试数据,将5份预测的训练数据合并,可以得到一份新的训练数据 NewTrainingData,将5份预测的测试数据采用均值法合并,得到一份新的测试数据 NewTestData。用同样的方法再分别训练随机森林和 XGBoost,新的训练和测试数据上,就可以得到3个模型的分数。
第二阶段,将上一阶段的 NewTraningData 作为训练数据,NewTestData 作为测试数据,重新训练一个 XGBoost 模型,得到最终的预测分数。这种方法可以避免过拟合,学习出特征之间组合的信息,还能提高预测的准确率。
3.4 模型评估
交叉验证不仅可以做特征筛选,在模型阶段,还给调参、Stacking Model 策略的调整提供依据。下图可以看到我们每一步的优化带来的提升,最初的 LR 模型可以得到0.2106的分数,XGBoost 和特征提取技术可以把分数提升到0.1151,最终 Stacking Model 和调参让我们得到0.0934的分数。
4.结论
本文我们介绍了在参加 WSDM Cup 2018 中所做的实践,最终我们获得了第二名的成绩。对几个关键的优化技术在文中做了阐述,如数据预处理阶段的欠采样、特征提取方式、Stacking Model。通过分析和测试,我们发现这些方法都可以提升预测的准确率,后续我们还将测试更多的超参数,并引入深度学习进行优化。
论文原文地址:
https://wsdm-cup-2018.kkbox.events/pdf/7_A_Practical_Pipeline_with_Stacking_Models_for_KKBOXs_Churn_Prediction_Challenge.pdf