1. 分析背景

这是一份某电商平台的销售数据,数据包含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

2. 分析流程

python 各指数估值情况 python 估值模型_读取数据

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
输出:
blog

3.2 查看表结构

python 各指数估值情况 python 估值模型_python做估值模型_02

从图能够看出这里的数据只有class2有缺失值,这里暂时不用提取这个指标,暂不清洗。图片

3.3 描述性分析查看

python 各指数估值情况 python 估值模型_聚类_03

这里销售金额为负数的状况,数据清洗的时候得把这些异常值过滤。ci

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
输出:

python 各指数估值情况 python 估值模型_读取数据_04

删除一层列名,并从新进行命名:

# 删除第一层的列名
data1.columns = [col[1] for col in data1.columns]
# 从新命名列名
data1.columns = ['会员建立日期', '最先销售日期', '最晚销售日期', 'M', 'F']
data1
输出:

python 各指数估值情况 python 估值模型_数据_05

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
输出:


python 各指数估值情况 python 估值模型_聚类_06

7. 使用KMeans进行聚类分析

# n_clusters聚类的个数
kmodel = KMeans(n_clusters=5, n_jobs=4)
kmodel.fit(ss_LRFM_data)
#查看聚类中心
kmodel.cluster_centers_
输出:

python 各指数估值情况 python 估值模型_python做估值模型_07

将结果转成DataFrame
client_level = pd.DataFrame(kmodel.cluster_centers_,
index=['客户群1', '客户群2', '客户群3', '客户群4', '客户群5'],
columns=['L', 'R', 'F', 'M'])
client_level
输出:

python 各指数估值情况 python 估值模型_读取数据_08

8. 针对结果进行客户群的分类

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大,这里判断是重要保持客户。