这是一份某电商平台的销售数据,数据包含2010年4月22到2014年7月24的销售数据。分析该销售数据,能够发现客户价值。python
现利用KMeans聚类实现LRFM模型来分析客户的价值,便于客户分群,针对性推广,提升销售额。app
LRFM模型定义:ide
L:会员建立日期距离距离2014年7月25的时间间隔(单位:月 )spa
R:会员最近一次购买时间距离2014年7月25的时间间隔(单位:月 )3d
F:会员购买次数code
M:会员的总购买金额orm
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
输出:
blog
从图能够看出这里的数据只有class2有缺失值,这里暂时不用提取这个指标,暂不清洗。图片
这里销售金额为负数的状况,数据清洗的时候得把这些异常值过滤。ci
# 销售金额有小于等于0的,直接过滤掉
# 这里有22542条数据
data = df[df['销售金额'] >0]
data.shape
输出:
data['会员建立日期'] = pd.to_datetime(data['会员建立日期'])
data['销售日期'] = pd.to_datetime(data['销售日期'])
# 查看是否转换成功
data.info()
输出:
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指标已经构建完成。
# 先计算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']]
ss = preprocessing.StandardScaler()
ss_LRFM_data = ss.fit_transform(LRFM_data)
ss_LRFM_data
输出:
# 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
输出:
L越大,表明注册会员时间距离指定时间(2014年7月25)越长,表明老客户,该指标越大越好。
R越小,表明购买时间距离指定时间(2014年7月25)越短,R越小越好。
F越大,表明会员的购买次数越多。
M越大,表明会员购买的金额越多。
客户群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大,这里判断是重要保持客户。