一、理论基础
(1)RFM模型
R:Recency 最近一次购买–付款日期-按照买家昵称 groupby 取付款日期的信息
F:Frequency 购买频次-付款日期-按照买家昵称 groupby 取付款曰期次数
M:Monetary 购买金额-实付金额-按照买家昵称 groupby 取实付金额的求和
R | F | M | 标签 |
---|---|---|---|
↑ | ↑ | ↑ | 重要价值客户 |
↓ | ↑ | ↑ | 重要保持客户 |
↑ | ↓ | ↑ | 重要发展客户 |
↓ | ↓ | ↑ | 重要挽留客户 |
↑ | ↑ | ↓ | 一般价值客户 |
↓ | ↑ | ↓ | 一般保持客户 |
↑ | ↓ | ↓ | 一般发展客户 |
↓ | ↓ | ↓ | 一般挽留客户 |
(2)问题:客户往往是聚集程度比较高的(从可视化角度),不会均质的分布在8个维度里。
(3)背景:业务方/需求方可能需要我们对应的对客户进行分群,以对应他们准备的3种不同的礼包/优惠券/套餐/推荐,我们作为数据分析师,需要根据客户的一些特征进行分群。
(4)算法思路:
-
分类:事先需要准备训练数据集,将训练数据集只保留特征,并提报给业务/需求方由较为有经验的资深员工,进行标签标注。划定哪些客户为第一类,哪些第二类,哪些第三类。标注结束后,用以训练模型并且预测其他客户的分类。
-
聚类:使用R/F/M三个特征进行kmeans建模,直接给定k值为3,完成三种不同客户类群的直接划分。
二、导入数据并查看
(1)总览信息查看
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_excel('data/电商用户价值挖掘.xlsx')
data.head()
data.info()
data.isnull().mean()
城市有空值,但不影响RFM模型。
(2)分别查看各有用字段
① 查看数据的时间周期
# 最早的时间为min
data['付款日期'].min() # Timestamp('2019-01-01 00:17:59')
# 最晚的时间为max
data['付款日期'].max() # Timestamp('2019-06-30 22:46:22.511000')
② 查看订单状态
data['订单状态'].value_counts()
"""
交易成功 27793
付款以后用户退款成功,交易自动关闭 1040
Name: 订单状态, dtype: int64
"""
(3)进行一些简单的预处理
① 扣除退款数据
data = data[data['订单状态'] == '交易成功']