Python实现LRFM模型分析客户价值

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. 分析流程

图片

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 查看表结构

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


3.3 描述性分析查看

image.png这里销售金额为负数的状况,数据清洗的时候得把这些异常值过滤。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

输出:

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

# 删除第一层的列名
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. 针对结果进行客户群的分类

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

相关文章
相关标签/搜索