sparkify会员用户流失预测
项目概览
sparkify是一个类似于网易云音乐、QQ音乐等提供数字音乐服务的平台。用户类型有带广告的免费用户、会员用户。 会员用户每月支付固定费用免费听歌。任何时候,用户可以自己升级为会员用户或者降级为免费用户。用户的每次操作,例如播放歌曲、点赞、登录、登出、升级、降级等都会产生数据,这些数据包含了能让用户满意并帮助sparkify业务蓬勃发展的关键信息。
数据集来源于Udacity,完整的数据集大小为12GB。本项目基于完整数据集的一个子集,大小为231MB,预测哪些用户从会员降级为免费,或者直接取消服务了。如果在用户离开之前,可以精确识别到这些用户,sparkify可以通过给用户打折或者其他激励方式留住用户,这样就可以挽救数百位的营业额。数据集链接
用户路径:
- Register -> Submit Registration ->成为free用户,可以听歌、点赞、加好友等,带广告
- free用户 -> Upgrade -> Submit Upgrade -> 成为paid用户,享受尊贵服务,无广告
- paid用户 -> Downgrade -> Submit Downgrade -> 成为free用户
- free, paid用户 -> Cancel -> Cancellation Confirmation -> 注销账户
解决方案
项目目标是要在用户离开之前,精确识别这些用户,通过打折或者其他激励措施留着用户,挽救营业额。通过历史数据,预测用户继续付费使用sparkify,还是流失,这是二元分类问题。具体解决思路如下:
- paid用户才会为sparkify带来营业额,所以首先需要过滤掉免费用户
- 根据用户路径,定义执行Submit Downgrade或者Cancellation Confirmation操作的用户为流失用户
- 数据清理,处理数据集中数据缺失、异常值和数据格式问题
- 数据集探索,对比会员用户与流失用户的行为,找出用户流失的潜在规律
- 建模,使用机器学习中的分类模型,如SVM、决策树等,训练数据
- 预测,使用训练好的模型,预测用户
评估指标
目标是找到流失用户,通过打折或者其他激励留住这些用户,另外把会员用户误识别为流失用户是有害的,因为打折或者激励会造成不必要的损失。使用F1 score作为评价指标,同时考虑精确率和召回率
数据加载与清理
spark = SparkSession \
.builder \
.appName("Sparkify") \
.getOrCreate()
data = spark.read.json('medium-sparkify-event-data.json')
各字段含义如下:
- artist: string, 歌手
- auth: string, 登录状态
- firstName: string, 用户名
- gender: string, 用户性别
- itemInSession: long, 页面停留时