系列文章目录
第一章 RFM模型以及代码实现
目录
前言
RFM模型是一种被广泛使用的营销模型,又称客户价值模型。以下是对RFM模型的详细定义
一、定义与核心思想
RFM模型通过三个关键指标:R(Recency,最近购买时间)、F(Frequency,购买频率)、M(Monetary,购买金额)来对客户进行分群,从而衡量客户的价值和创收能力。该模型的核心思想是基于客户的购买历史数据,通过深入分析客户的购买行为,实现客户细分、精准营销和个性化服务,以提高客户满意度和企业利润。
二、指标解释
- R(Recency):指客户最近一次购买时间与截止时间的间隔。这个指标反映了客户的活跃度和忠诚度。通常情况下,最近一次购买时间的间隔越短,客户对商品或服务越有可能感兴趣,因此价值也越高。
- F(Frequency):指客户在一定时间内的购买次数。这个指标体现了客户对产品或服务的偏好度和忠诚度。购买频次越高的客户,其满意度和忠诚度通常也越高,因此客户价值也越大。
- M(Monetary):指客户在一定时间内的累计购买金额。这个指标代表了客户的付费能力和购买意愿。消费金额越大的客户,其消费能力自然也越大,因此价值也越高。
三、应用与方法
- 数据收集与处理:企业首先需要收集客户的交易数据,并进行清洗和聚合处理,以便后续计算RFM指标。
- 计算RFM指标:根据收集到的数据,计算每个客户的R、F、M指标值。这通常涉及对数据的分组、聚合和计算等操作。
- 客户分群与打分:将计算出的RFM指标值按照一定规则进行分群和打分。例如,可以将R、F、M指标值分别划分为不同的等级或区间,并为每个等级或区间分配相应的分数。然后,根据客户的RFM得分将其划分为不同的客户群体,如高价值客户、潜力客户、流失客户等。
- 制定营销策略:针对不同客户群体的特征和行为,制定差异化的营销策略和服务方案。例如,对于高价值客户可以提供个性化的服务和优惠;对于流失客户可以尝试通过优惠券等方式重新激活其购买欲望。
代码如下:
user_rfm =data.groupby(['user_id','ev_date']).agg(amount_sum=('amount','sum')).reset_index()
#data为原始数据集,我下面会给出
# amount为消费金额 ev_date为消费产生的时间
#思路就是 因RFM模型只与购买时间、购买次数、消费金额有关,user_id可作为统计购买次数之用 生成如下表格
user_rfm = user_rfm.groupby('user_id').agg(last_date=('ev_date','max')
,M=('amount_sum','sum')
,F=('ev_date','count')
).reset_index()
#计算F、M的值
#R为最后一次购买距今的时间 此处last_date=('ev_date','max') 计算的是最后一次产生购买行为的时间
user_rfm['R'] = user_rfm['last_date'].apply(lambda x:user_rfm['last_date'].max() - x)
#计算R 将最后一次产生购买行为的时间与数据表的截止时间插值填入R列
user_rfm = user_rfm[['user_id','R','F','M']]
#取'user_id','R','F','M' 四列重新生成一个DataFrame
user_rfm['R']=user_rfm['R'].dt.days
#将R列修改成时间格式
#生成如下数据表
定义RFM的打分标准:
R的打分:
[0-30]:5分
(30-60]:4分
(60-90]:3分
(90-120]:2分
120以上:1分
F的打分:
1次:1分
2次:2分
3次:3分
4次:4分
5次及以上:5分
M的打分:
[0-200]:1分
(200-500]:2分
(500-1000]:3分
(1000-2000]:4分
2000以上:5分
rfm_score = user_rfm.copy() #拷贝DataFrame作为操作对象
#根据以上的评分标准 以enumerate取出R列的对应的index与value 进行评分判断 下面的F、M也做同样操作
for i,j in enumerate(rfm_score['R']):
if j <= 30:
rfm_score['R'][i] = 5
elif j <= 60:
rfm_score['R'][i] = 4
elif j <= 90:
rfm_score['R'][i] = 3
elif j <= 120:
rfm_score['R'][i] = 2
else :
rfm_score['R'][i] = 1
for i,j in enumerate(rfm_score['F']):
if j <= 1:
rfm_score['F'][i] = 1
elif j <= 2:
rfm_score['F'][i] = 2
elif j <= 3:
rfm_score['F'][i] = 3
elif j <= 4:
rfm_score['F'][i] = 4
else :
rfm_score['F'][i] = 5
for i,j in enumerate(rfm_score['M']):
if j <= 200:
rfm_score['M'][i] = 1
elif j <= 500:
rfm_score['M'][i] = 2
elif j <= 1000:
rfm_score['M'][i] = 3
elif j <= 2000:
rfm_score['M'][i] = 4
else :
rfm_score['M'][i] = 5
rfm = pd.DataFrame() #取一个空的DataFrame
rfm['user_id'] = rfm_score['user_id']
#对RFM三列分别大于三列均值的数据标记为1,否则标记为0 以便后续做客户群体划分
rfm['R'] = rfm_score['R'].apply(lambda x: '1' if x >= rfm_score['R'].mean() else '0')
rfm['F'] = rfm_score['F'].apply(lambda x: '1' if x >= rfm_score['F'].mean() else '0')
rfm['M'] = rfm_score['M'].apply(lambda x: '1' if x >= rfm_score['M'].mean() else '0')
rfm['result'] = rfm['R'] + rfm['F'] + rfm['M']
#字符串拼接 会出现111、110、101、011、001、000 六类情形 每一种都对应以下一种客户群体
for i,j in enumerate(rfm['result']):
if j == '111':
rfm['result'][i] = '重要价值客户'
elif j == '101':
rfm['result'][i] = '重要发展客户'
elif j == '011':
rfm['result'][i] = '重要保持客户'
elif j == '001':
rfm['result'][i] = '重要挽留客户'
elif j == '110':
rfm['result'][i] = '一般价值客户'
elif j == '100':
rfm['result'][i] = '一般发展客户'
elif j == '010':
rfm['result'][i] = '一般保持客户'
elif j == '000':
rfm['result'][i] = '一般挽留客户'
rfm['result'].value_counts() #对客户群体做出分类统计
四、优点与局限性
-
优点:
- 直观易懂:RFM模型基于三个关键指标,直观易懂,容易计算和解释。
- 高度客户化:RFM模型通过细分客户群体,可以根据不同群体的特征和行为设计针对性的策略和方案。
- 易于实施和操作:RFM模型的计算方法简单,基于企业现有的交易数据,可以通过各种数据分析工具快速地实施和执行。
-
局限性:
- 只考虑历史行为而非未来潜力:RFM模型主要依据过去的交易数据进行分析,缺乏对客户未来行为和潜力的预测能力。
- 客户分类不够细致:RFM模型通常将客户分为几个大类,没有对每类客户进行更细致的分类。
- 忽略了某些关键客户行为:RFM模型主要关注交易金额、频次和时间等因素,忽略了其他关键客户行为,如网站访问量、社交媒体互动等。
总结
RFM模型是一种有效的客户价值分析模型,能够帮助企业实现客户细分和精准营销。然而,在应用过程中也需要注意其局限性,并结合其他客户分析工具和方法以提高客户洞察的准确性和有效性。