一、提出问题
将用户进行分类,进行精细化运营
二、理解数据
1)采集数据
数据来源:https://www.kaggle.com/jihyeseo/online-retail-data-set-from-uci-ml-repowww.kaggle.com
2)导入数据
3)查看数据集的信息
对字段的理解
交易单号 InvoiceNo:字符串类型。六位数组成。c开头表示交易取消
产品编号StockCode:字符串类型。五位数组成。每个产品的唯一标识。
产品名称Description:字符串类型
购买数量Quantity: 数值类型。每笔交易中产品的数量
交易日期和时间 InvoiceDate:数值类型。交易产生的时间。(01/12/2010 and 09/12/2011 )
单价 UnitPrice: 数值类型。商品单位数量的价格。单位为英镑
用户ID CustomerID: 字符串类型。五位数。每个客户的唯一标识
客户地理位置Country:字符串类型。客户的居住地。
三、数据清洗
1)删除重复值
2)处理缺失值
先查看存在缺失值的字段
CustomerID存在缺失值。由于是要对客户价值进行分析,需要每个用户有唯一的标识,所以将CustomerID有缺失值的行删除
3)处理异常值
查看描述统计看看是否有异常值
Quantity和UnitPrice只能>0, 所以将这两个字段大于0的行选取出来
再次查看描述统计信息,确认不存在异常值
4)一致化处理
将InvoiceDate提取出年月日,并且将字符串类型变成日期类型
用split函数提取出年月日
用to_datetime将字符串类型转成日期类型
整个数据集的日期范围为2010/12/1到2011/12/9
选取2010/12/1到2011/12/1完整一年的的数据进行分析
三、构建RFM模型
1)计算R-Recency
Recency:用户最后一次购买离今天的天数
用groupby对用户ID进行分组,然后用agg找到每名用户最后交易的日期
用timedelta对选取出的数据集的最后一天加上1即为“今天”
用“今天”减去用户交易最后日期即为相差天数
2)计算F-Frequency
Frequency:用户购买的次数
先对订单编号去重,然后再计算每个用户购买过多少次
3)M-Monetary
Monetary:用户消费的总金额
总金额=数量*单价
4)计算RFM数值
先计算出R、F、M的用concat进行合并,再进行重命名
常规做法是将R、F、M的均值作为分界线,高于均值的归为高水平一类,低于均值的归为低水平一类
但是用searbon中displot画出直方图能够看到数据的分布是呈现偏态分布,如果用均值作为判断标准误差会比较大。所以用分位数来进行分层。
用qcut计算R和M的值:qcut分成数量基本相等的四等分。r值越小指购买日期离“今天”越接近,得分越高。m值越大消费金额越大,得分越高。
用cut计算F的值:购买次数由于大部分集中在1-2次,无法用qcut函数做到四等分。
尝试用qcut计算f,会有如下报错
RFM的计算
r值分成四份的边界值需要按照实际的业务情况进行调整。这里选取了1,3,7,93四个值作为边界值
接下来就是对用户进行打标签
打标签有几种方式
1.根据RFM各自的得分判断其属于高水平还是低水平,然后据此分成八类用户
2.将RFM的得分相加,再根据得分总分进行分类
3.将RFM按照权重进行相加,例如R:F:M=3:1:3, 那么RFM各自得分乘不同系数,相加后再进行分类
本次按照第一种方式进行分类
四、结果可视化
用户类别中占比最大的是价值最低的一般挽留用户和价值较高的重要价值用户
但是用户数量占比最大的一般挽留用户,其销售占比只有7%
而占比为25%的重要价值用户的销售占比为68%
所以,最需要关注的用户群体为“重要价值用户”,不断提升这个群体的数量