用PySpark ML构建流失预测模型的五个步骤

网站建设3年前发布
70 0 0

Sparkify是一个数字音乐服务,用户在其中使用免费层或使用高级订阅模式,即每月支付固定费用,播放他们喜欢的歌曲。用户与应用程序的所有互动(事件)都被记录下来,这为收集洞察力、学习行为模式和探索客户漏斗提供数据。每个用户我们都收集历史事件,如歌曲播放、喜欢、不喜欢、登录、退出、升级、降级等。分析这些数据,我们可以帮助企业了解 "让客户满意"的关键驱动因素,并回答诸如如何提高客户满意度,如何让用户更加投入,激励他们升级订阅等问题。,用户可以升级、降级或取消服务。如果我们能够预测用户取消服务的意图,我们就可以尝试针对这些用户提供特别优惠,这将有可能防止用户流失并为企业节省数百万美元。在这个项目中,我们已经建立了一个模型,根据用户在应用程序中的历史事件,识别出具有高流失倾向的用户。,"流失预测" 问题的主要挑战是目标不平衡。在目前的数据集中,流失的用户占所有用户的22.5%,这对用于模型学习和调整的指标提出了限制。我们使用网格搜索,并以F1-score作为评价指标以选出最佳超参数,因为F1-score对不平衡的类较为稳健的。对于业务层面的解释,计算最佳模型的召回率也是很有帮助的,因为它显示了我们真正松动的流失案例的比例。,由于我们研究的是一个小子集,所以使用pandas来执行EDA非常方便。,我们的分析包括3个步骤:,将Spark数据框架转换为pandas数据框架,使EDA运行更加灵活。使用“sweetviz”,我查看每一列的主要属性。,20230305220225e7c45aa720f17f9536d65784f7314d66236919613,我们对一个数据样本进行了数据探索,其中包括225个注册用户的278154条记录和8346条未知用户的记录。完整的数据集包括22278个注册用户的数据,我们稍后使用这些数据来训练模型。为了在进入细节之前在3行中获得数据集的良好概述,我们使用了 sweetviz (https://pypi.org/project/sweetviz/) 包。,以下是关于样本数据的简短总结。,20230305210947221d46620f18bff4b0e4298f97391592a09242636,20230305211005b212d5c70319f9c7df984266c303370983405b541,图1.Sparkify中付费与免费层级的用户分布情况,2023030521100571dad2052fef44b58016483daff9acb06711d7776,我们将流失定义为现有用户取消订阅的事实。取消的事实是通过两列数据推出的的:Auth='Cancelled'和page='Cancellation Confirmation',这两列是唯一定义的,所以我们可以使用两列中的任何一列来定义目标。使用page='Cancellation Confirmation'作为我们的目标变量。此外还有一个事件page='Cancel',它在'Cancellation Confirmation'之前,所以应该把这个事件从训练数据集中删除,以避免数据泄露。,比较流失用户和活跃用户,20230305210950e916ea476bd239044bb895d56007ce4a39cca6670,图3.搅局者(蓝色)和活跃者(橙色)的性别分布,20230305211007191874839593a64a0046871165a1245f324a3f189,图4.流失用户(蓝色)和活跃用户(橙色)的层级分布,原始数据集由每个用户的多条记录(事件)组成。利用这些数据,在用户层面推导出特征,因此在训练/测试数据中,我们对每个唯一的userId只有一条记录。,1.排除具有空userId的记录。,2.添加标签:1=流失,0=留存。条件:page='Cancellation Confirmation'(取消确认)。,3.删除page='Cancellation Confirmation'和page='Cancel'的记录。,4.按照userId和ts对数据框架进行排序,5.在用户层面上汇总特征。,对列表应用TF-IDF转换:歌曲、艺术家、页面事件。对于歌曲和艺术家,我们只保留前100名的数值,页面事件全部包括在内(因为总共只有22个数值)。,特征工程是通过 pyspark.ml.feature实现,并作为一个阶段纳入建模管道。,从特征转换器中提取特征名称和词汇,以便稍后用于特征重要性分析,客户流失预测是一个二分类问题,所以我们考虑了pyspark.ml.classification中可用的分类器。由于大部分特征来自于分类数据(歌曲、艺术家、网页),我们决定使用基于树的模型。重点比较了两种算法。,两个模型都使用了相同的数据(70%的训练记录和30%的测试记录通过随机分割得到)。,我们使用网格搜索来寻找更好的超参数,网格搜索的设置。,3倍交叉验证被用来测量平均F1-score。以下是为RF分类器管道设置网格搜索的示例代码。,Random Forest Classifier,Gradient Boosted Tree classifier,我们通过F1-score和召回率来比较2个优化的网格搜索模型。,20230305210952b29ef4e30ac54626845652937f0c6b2eb2bcfb460,两个模型都显示出相当好的分数(召回率>80%,F1-score>75%)。由于完整数据集的交叉验证是一个耗时的过程(运行时间大于1小时),我们检查了有限数量的参数组合。我们看到,最好的GBT模型是在树的深度和迭代次数的最高选项下得到的,因此我们认为增加这两个参数可以得到更高的模型质量。,20230305210953c98ed58258fe41ea229147b9dc2c361b1bf30b167,图5.随机森林和梯度增强树分类器的前10个最重要特征,从图5中我们可以清楚地看到,会话的频率在两个模型中都是主导因素。另一个重要的特征是寿命。与这两个模型相比,RF模型的所有特征的优先级都降低了,对于GBT来说,我们看到页面事件的重要性相当高,这很好,因为会话频率和寿命对于新用户来说是误导性的因素(由于观察的数量少)。我们还可以注意到,最重要的是与用户忠诚度/满意度有关的页面事件:例如,喜欢/不喜欢,添加好友,升级/降级。,即使在树的深度和迭代次数较少的情况下,梯度增强的树也表现出较好的质量。,可以考虑采取以下步骤来改进模型。,为了帮助企业有效地使用模型,我们提出了3个需要考虑的问题。

© 版权声明

相关文章