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 - 流失,0 - 无流失)
- 注册后时间(天)
- 用户播放歌曲数
- 用户付费或免费(1 - 付费,0 - 免费)
- 用户性别(1——女性,0——男性)
- 用户降级(计数)
- 降级和流失之间的时间段
- 用户的位置(状态的一种热编码)
这部分的结果是具有所有已创建特征的数据集。
方法
数据处理
我们使用以下数据分类模型:
- 逻辑回归
- 决策树
我们想预测流失和没有流失的用户,所以我们使用二元分类。
为每个模型构建了一个管道:
- 数据准备:将数据拆分为训练和测试数据集,缩放数据等;
- 模型定义
- 用于调整模型参数的网格搜索参数
- 交叉验证
结果和结论
为了估计结果,我们使用准确率、精度、召回率和 f1 分数。我们的目标指标是 f1-score。下面是关于训练和测试集以及不同模型的结果表。
从表中可以看出,逻辑回归模型的 f1-score 非常不同。这意味着模型过度拟合。对于决策树模型,两个结果彼此接近,看起来像训练有素的模型,对于测试数据集 f1-score = 0.8。因此,这种情况下最好的分类模型是基于决策树的模型。
你可以在我的文章中找到这篇文章的代码 Github 仓库 .
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明