PySpark ML 预测流失用户

PySpark ML 预测流失用户

项目定义

这是 Udacity 的 Capstone 项目,使用 Spark 分析来自音乐应用 Sparkify 的用户行为数据。主要目标是根据音乐应用程序的用户日志数据预测客户流失。日志包含有关用户的一些基本信息和有关单个操作的信息。

在本文中,我构建了机器学习管道以使用 PySpark ML 预测流失用户。

数据再处理的一部分包括探索性数据分析和特征工程。

数据处理部分由不同模型的管道组成,以进行客户流失预测。

最后给出了结果和最佳模型。

分析

数据探索

最初,我们有一个包含以下字段的数据集:

 ['艺术家':歌手的名字,  
 'auth':用户的登录状态,  
 'firstName':用户的名字,  
 'gender':用户的性别,  
 'itemInSession':本次会话的序号,  
 'lastName':用户的姓氏,  
 'length':歌曲的长度,  
 'level':用户是付费的还是免费的,  
 'location':用户的位置,  
 'method':获取网页的方法,  
 'page':用户浏览的页面类型,  
 'registration':用户的注册时间,  
 'sessionId':某个用户操作的sessionId,  
 'song':歌曲名称,  
 'status':页面返回码,  
 'ts':用户登录时间的时间戳,  
 'userAgent':浏览客户端信息,  
 'userId': 用户 ID]

首先,我们观察每个字段的唯一值的数量:

 艺术家 17655  
 授权 2  
 名字 189  
 性别 2  
 itemInSession 1311  
 姓氏 173  
 长度 14865  
 2级  
 位置 114  
 方法二  
 第 19 页  
 注册 225  
 会话 ID 2312  
 歌曲58480  
 状态 3  
 ts 269770  
 用户代理 56  
 用户 ID 225  
 数据类型:int64

从“页面”列中的值,我们发现用户可以采取的许多操作,与流失用户最相关的是“取消确认”,它定义了流失,例如“降级”。

然后,我们从“位置”中提取一个新列“状态”作为子字符串,并尝试查看流失用户分布与无流失用户分布之间的差异。此分布出现在下图中。

我们可以看一下,看看流失用户和普通用户之间是否存在性别差异。从下图中我们可以了解到,女性和男性用户的比例几乎是相等的。

我们还可以统计浏览不同页面类型的数量:

 +--------------------+------------+--------------+  
 |页|count_churn|count_no_churn|  
 +--------------------+------------+--------------+  
 |取消| 52|空|  
 |提交降级| 9| 54|  
 |大拇指向下| 496| 2050|  
 |主页| 1672| 8410|  
 |降级| 337| 1718|  
 |滚动广告| 967| 2966|  
 |登出| 553| 2673|  
 |保存设置| 58| 252|  
 |取消会议...| 52|空|  
 |关于| 56| 439|  
 |设置| 270| 1244|  
 |添加到播放列表| 1038| 5488|  
 |添加好友| 636| 3641|  
 |下一首| 36394| 191714|  
 |竖起大拇指| 1859| 10692|  
 |帮助| 239| 1215|  
 |升级| 112| 387|  
 |错误| 32| 220|  
 |提交升级| 32| 127|  
 +--------------------+------------+--------------+

我们进行了一些其他探索,并确定以下功能会引起我们的兴趣,并且会对最终结果产生最大的影响。

特征工程

建议的功能如下:

  1. 用户流失或无流失(1 - 流失,0 - 无流失)
  2. 注册后时间(天)
  3. 用户播放歌曲数
  4. 用户付费或免费(1 - 付费,0 - 免费)
  5. 用户性别(1——女性,0——男性)
  6. 用户降级(计数)
  7. 降级和流失之间的时间段
  8. 用户的位置(状态的一种热编码)

这部分的结果是具有所有已创建特征的数据集。

方法

数据处理

我们使用以下数据分类模型:

  • 逻辑回归
  • 决策树

我们想预测流失和没有流失的用户,所以我们使用二元分类。

为每个模型构建了一个管道:

  • 数据准备:将数据拆分为训练和测试数据集,缩放数据等;
  • 模型定义
  • 用于调整模型参数的网格搜索参数
  • 交叉验证

结果和结论

为了估计结果,我们使用准确率、精度、召回率和 f1 分数。我们的目标指标是 f1-score。下面是关于训练和测试集以及不同模型的结果表。

从表中可以看出,逻辑回归模型的 f1-score 非常不同。这意味着模型过度拟合。对于决策树模型,两个结果彼此接近,看起来像训练有素的模型,对于测试数据集 f1-score = 0.8。因此,这种情况下最好的分类模型是基于决策树的模型。

你可以在我的文章中找到这篇文章的代码 Github 仓库 .

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/1350/52582817

posted @ 2022-08-28 17:55  哈哈哈来了啊啊啊  阅读(52)  评论(0编辑  收藏  举报