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

1. 分析背景

这是一份某电商平台的销售数据,数据包含2010年4月22到2014年7月24的销售数据。分析该销售数据,可以发现客户价值。

现利用KMeans聚类实现LRFM模型来分析客户的价值,便于客户分群,针对性推广,提高销售额。

LRFM模型定义:

  • L:会员创建日期距离距离2014年7月25的时间间隔(单位:月 )

  • R:会员最近一次购买时间距离2014年7月25的时间间隔(单位:月 )

  • F:会员购买次数

  • M:会员的总购买金额

2. 分析流程

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

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

Python实现LRFM模型分析客户价值从图可以看出这里的数据只有class2有缺失值,这里暂时不用提取这个指标,暂不清洗。


3.3 描述性分析查看

Python实现LRFM模型分析客户价值这里销售金额为负数的情况,数据清洗的时候得把这些异常值过滤。


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实现LRFM模型分析客户价值
删除一层列名,并重新进行命名:

# 删除第一层的列名
data1.columns = [col[1] for col in data1.columns]
# 重新命名列名
data1.columns = ['会员创建日期', '最早销售日期', '最晚销售日期', 'M', 'F']
data1

输出:

Python实现LRFM模型分析客户价值
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实现LRFM模型分析客户价值

7. 使用KMeans进行聚类分析

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

输出:

Python实现LRFM模型分析客户价值
将结果转成DataFrame

client_level = pd.DataFrame(kmodel.cluster_centers_, 
                            index=['客户群1', '客户群2', '客户群3', '客户群4', '客户群5'],
                           columns=['L', 'R', 'F', 'M'])
client_level

输出:

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

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


上一篇:2014联赛讲解


下一篇:「题解」 BalticOI 2014 Day 1 三个朋友