作者:mobiledu2502890883 | 来源:互联网 | 2023-09-10 20:16
1.分析背景这是一份某电商平台的销售数据,数据包含2010年4月22到2014年7月24的销售数据。分析该销售数据,可以发现客户价值。现利用KMeans聚类实现LRFM模型来分析客
1. 分析背景
这是一份某电商平台的销售数据,数据包含2010年4月22到2014年7月24的销售数据。分析该销售数据,可以发现客户价值。
现利用KMeans聚类实现LRFM模型来分析客户的价值,便于客户分群,针对性推广,提高销售额。
LRFM模型定义:
2. 分析流程
3. 数据探索
3.1 导入相关包和读取数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import preprocessing
from datetime import datetime
from sklearn.cluster import KMeans
plt.rcParams['font.sans-serif'] = 'SimHei'
%matplotlib inline
# 读取数据
df = pd.read_csv(r'C:/Users/Administrator/Desktop/RFM分析1.csv',
engine='python')
# 查看行列
df.shape
输出:
3.2 查看表结构
从图可以看出这里的数据只有class2有缺失值,这里暂时不用提取这个指标,暂不清洗。
3.3 描述性分析查看
这里销售金额为负数的情况,数据清洗的时候得把这些异常值过滤。
4. 数据清洗
4.1 将销售额<0的过滤掉
# 销售金额有小于等于0的,直接过滤掉
# 这里有22542条数据
data = df[df['销售金额'] >0]
data.shape
输出:
4.2 会员创建日期、销售日期转换成datetime格式
data['会员创建日期'] = pd.to_datetime(data['会员创建日期'])
data['销售日期'] = pd.to_datetime(data['销售日期'])
# 查看是否转换成功
data.info()
输出:
5. 构建L、R、F、M指标
5.1 提取有用指标
L = 相对日期(这里我指定:2014年7月25) - 会员创建日期
R = 相对日期(这里我指定:2014年7月25) - 最晚(大)的销售日期
F = 用户购买的次数(这里针对流水号进行计数不同)
M = 用户购买的汇总金额
代买实现:
# 计算L,再转换成月,这里转换成月,直接除于30天,保留两位小数
# L是最早的购买日期距离会员创建日期
data1 = data.groupby('UseId').agg({'会员创建日期': ['min'],
'销售日期': ['min', 'max'],
'销售金额':['sum'],
'流水号':['nunique']})
data1
输出:
删除一层列名,并重新进行命名:
# 删除第一层的列名
data1.columns = [col[1] for col in data1.columns]
# 重新命名列名
data1.columns = ['会员创建日期', '最早销售日期', '最晚销售日期', 'M', 'F']
data1
输出:
M、F指标已经构建完成。
5.2 购买L、R指标
# 先计算L,R,再转化成单位月
data1['L'] = datetime.strptime('2014-7-25', '%Y-%m-%d') - data1['会员创建日期']
data1['R'] = datetime.strptime('2014-7-25', '%Y-%m-%d') - data1['最晚销售日期']
# 将L、R转换成月做为单位
data1['L'] = data1['L'].apply(lambda x: round(x.days/30,3))
data1['R'] = data1['R'].apply(lambda x: round(x.days/30,3))
data1
输出结果:
提取有用的指标:
LRFM_data = data1[['L', 'R', 'F', 'M']]
6. 进行L、R、F、M数据的Z-Score转换
ss = preprocessing.StandardScaler()
ss_LRFM_data = ss.fit_transform(LRFM_data)
ss_LRFM_data
输出:
7. 使用KMeans进行聚类分析
# n_clusters聚类的个数
kmodel = KMeans(n_clusters=5, n_jobs=4)
kmodel.fit(ss_LRFM_data)
#查看聚类中心
kmodel.cluster_centers_
输出:
将结果转成DataFrame
client_level = pd.DataFrame(kmodel.cluster_centers_,
index=['客户群1', '客户群2', '客户群3', '客户群4', '客户群5'],
columns=['L', 'R', 'F', 'M'])
client_level
输出:
8. 针对结果进行客户群的分类
客户群1分析:
L大,R小,F大,M较大,这里判断是重要发展客户。
客户群2分析:
L大,R大,F小,M较小,这里判断是重要挽留客户。
客户群3分析:
L小,R小,F小,M小,这里判断是低价值客户。
客户群4分析:
L大,R大,F小,M小,这里判断是一般价值客户。
客户群5分析:
L大,R小,F大,M大,这里判断是重要保持客户。