模型概述
RFM模型是用来衡量当前客户价值和潜在客户价值的重要工具和手段。RFM是指Recency(近度),Frequency(频度)、Monetary(额度),三个指标首字母组合,如图所示(图1-1):
通过RFM分析将客户群体划分成高价值客户、重点保持客户、重点发展客户、重点挽留客户、一般价值客户、一般保持客户、一般发展客户、潜在客户等八个级别,如图所示(图1-2):
分类客户特点:
高价值客户(高、高、高):最近消费时间较短、消费频度和消费金额都较高,这是需要重点关注和维护的客户。
重点保持客户(低、高、高):最近消费时间较长,消费频次和消费金额都较高,说明这是个一段时间没来的忠实客户,需要主动保持联系。
重点发展客户(高、低、高):最近消费时间较短、消费金额高,但消费频次较低。忠诚度不高,但是消费能力强,是非常有潜力的客户,需要重点跟进。
重点挽留客户(低、低、高):最近消费时间较长、消费频次不高,但消费金额高的客户,可能是将要流失或者已经要流失的客户,应吸引客户回流。
RFM模型的最终目的是为了在经营过程中区别出客户类群,并在此基础上针对不同类型客户进行精准化营销,进而提升客户价值,实现企业利益最大化。
模型实现
1.数据准备
我生成了一份模拟数据,该数据集共有940条数据,包含ID(主键)、R(Recency)、F(Frequency)以及M(Monetary),共4个字段。数据存储在mysql数据库中,需连接mysql并进行提取。代码如下:
#导入库
import pandas as pd
import numpy as np
import pymysql
from sklearn.cluster import KMeans
#连接数据库并导出数据
conn= pymysql.connect(host='localhost',user='root',password='123456',
db='test',port=3306)
rfm_model = pd.read_sql("select * from consumption_data",con=conn)
conn.close()
#查看数据描述
rfm_model.describe()
#查看数据
frm_model.head()
数据如下图所示(图2-1):
数据描述性统计(图2-2):
2.随机选取中心点并生成分类标签
# 调用KMeans算法,n_clusters参数表示划分的类别数,
# random_state参数表示自由度
clf = KMeans(n_clusters=8,random_state=100)
# 对数据进行拟合,训练出模型
clf.fit(rfm_model)
# 查看分类标签(0-7,共8类)
clf.labels_
# 将标签添加至数据
rfm_model['label']=clf.labels_
添加标签后数据如下(图2-3):
3.查看每类数据中心点,并得出8类分组RFM值的中位数
# 查看每类数据的中心点
# 每一行代表一个类别,三列对应了R,F,M,
r = pd.DataFrame(clf.cluster_centers_,columns=['id','R','F','M'])
rmd = r['R'].median()
fmd = r['F'].median()
mmd = r['M'].median()
print(rmd,fmd,mmd)
每类数据中心点(图2-4):
RFM值中位数(图2-5):
4.把每个类中的RFM的值分别与刚刚得出的RFM的中位数的值进行比较,并添加客户分类属性。
# 标识客户类型
customer_type = []
for i in range(len(r)):
if r.iloc[i,1]> rmd and r.iloc[i,2]>=fmd and r.iloc[i,3]>=mmd:
customer_type.append('高价值客户')
elif r.iloc[i,1]<rmd and r.iloc[i,2]>=fmd and r.iloc[i,3]>=mmd:
customer_type.append('重点保持客户')
elif r.iloc[i,1]>=rmd and r.iloc[i,2]<fmd and r.iloc[i,3]>=mmd:
customer_type.append('重点发展客户')
elif r.iloc[i,1]<rmd and r.iloc[i,2]<fmd and r.iloc[i,3]>=mmd:
customer_type.append('重点挽留客户')
elif r.iloc[i,1]>=rmd and r.iloc[i,2]>=fmd and r.iloc[i,3]<mmd:
customer_type.append('一般价值客户')
elif r.iloc[i,1]<rmd and r.iloc[i,2]>=fmd and r.iloc[i,3]<mmd:
customer_type.append('一般保持客户')
elif r.iloc[i,1]>=rmd and r.iloc[i,2]<fmd and r.iloc[i,3]<mmd:
customer_type.append('一般发展客户')
else:
customer_type.append('潜在客户')
#添加标签
r['客户分类'] = customer_type
添加标签后分类结果如下(图2-6):
5.把分类结果与原数据进行合并
# 结果合并
right = pd.DataFrame(r['客户分类'])
result=pd.merge(rfm_model,right,left_on='label',right_index=True)
result.sort_values(by='Id')
合并后结果如下(图2-7):
6.客户运营策略:
针对上述分类结果,我们可以对不同的客户分类采取相应的营销策略,例如:
对于高价值客户,我们需要重点保持关注,并对客户进行长期维护与联系;
对于重点保持客户,我们可以给予优惠券或其他促销活动,以吸引客户回流;
对于重点发展客户,我们可以为客户办理会员卡以提升客户消费频次;
对于重点挽留客户,我们可以定时推送消息和给予优惠券,以吸引客户回流。
小结
消费近度、消费频度、消费额度是衡量消费者价值最重要也是最容易的方法,这次的分析体现了这三个指标对营销活动的参考意义,但是在实际工作中,涉及到的维度以及客户的分类可能会更复杂,要针对不同公司、不同业务对RFM模型做出相应的调整。