网站首页 > 技术文章 正文
导语:在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
猜你喜欢
- 2024-10-01 机器学习100天-Day1803随机森林 随机森林算法详解
- 2024-10-01 「机器学习」自动调参器设计实现 自动调参法
- 2024-10-01 boosting 原理 boost模型原理
- 2024-10-01 机器学习入门精讲,这40个知识点不可错过(一)
- 2024-10-01 Python 数据分析实例——集成方法
- 2024-10-01 机器学习入门精讲,这40个知识点不可错过(1)
- 2024-10-01 集成学习,集成算法 Ensemble methods
- 2024-10-01 人工智能科普|机器学习入门精讲,这40个知识点不可错过(1)
- 2024-10-01 「五分钟机器学习」集成学习——Ensemble Learning
- 2024-10-01 Day95:集成学习(Ensemble Learning)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)