0
点赞
收藏
分享

微信扫一扫

商业数据分析 | RFM客户分类模型

商业数据分析 | RFM客户分类模型_赋值

商业数据分析 | RFM客户分类模型_字段_02

本节给大家介绍的是RFM模型,RFM模型是衡量客户价值客户创利能力的重要工具和手段,通过一个客户的近期购买行为、购买的总体频率以及消费额度三个指标来描述该客户的价值状况。其中,用R(Recency)表示交易间隔、F(Frequency)表示交易频度、M(Monetary)表示交易金额组成,具体的含义如下表格所示:

商业数据分析 | RFM客户分类模型_Data_03

首先,计算R、F和M的分值,计算方法是在各自的维度上分为高低两类,分值高记为2,分值低记为1,R、F和M三个指标两两组合,可以得出8个不同的RFM值,按照实际情况分为8大客户群体,具体分类规则如下所示:

商业数据分析 | RFM客户分类模型_赋值_04

数据获取

公众号后台回复

RFM模型

获取本节所使用的数据集

下面一起来学习


商业数据分析 | RFM客户分类模型_赋值_05



 1   数据预处理


本文所使用的数据集一共包含七个字段和5500条样本,这些字段分别是用户id,用户出生日期,下单时间,订单ID、支付方式、支付金额和是否享受折扣。

import pandas as pd
data = pd.read_csv( r'C:\Users\尚天强\Desktop\Orders.csv',engine='python',encoding='gbk') data.head()

商业数据分析 | RFM客户分类模型_字段_06

​##查看数据情况 ​​​​data.shape​

(5500, 7)

​#重复值计数 ​​​​data['Uid'].duplicated().value_counts()​

False 2822 True 2678 Name: Uid, dtype: int64

对用户id字段重复数计数,发现一共有2678个重复值。

​#删除重复值 ​​​​data.drop_duplicates(subset=['Uid'],keep='first',inplace=True) ​​​​data['Uid'].duplicated().value_counts()​

False 2822 Name: Uid, dtype: int64

删除用户id的重复值后剩余2822条记录。

#查看是否有缺失值,以及查看数据类型
data.info()

商业数据分析 | RFM客户分类模型_字段_07

代码运行后发现没有缺失值,这里下单时间的数据类型是object,需要将其转化为日期类型,然后,根据交易日期,计算出每次交易距今的间隔天数。

# 将交易日期处理为日期数据类型 
data['Order_Date'] = pd.to_datetime(data.Order_Date,format='%Y/%m/%d')

# 假设2018-11-11是计算当天,求交易日期至计算当天的距离天数 
data['Days'] = pd.to_datetime('2018-11-11') - data['Order_Date']

# 从时间距离中获取天数 
data['Days'] = data['Days'].dt.days

data.head()

商业数据分析 | RFM客户分类模型_Data_08


 2   计算R、F、M的值


计算R、F、M的值,以用户ID作为分组列,间隔天数、订单ID、支付金额分别为聚合列,分别求最小值、计数、求和,得出结果。

​# 统计每个客户距离指定日期有多久没有消费了,即找出最小的最近消费距离 ​​​​R = data.groupby(by=['Uid'],as_index=False)['Days'].agg('min')​

商业数据分析 | RFM客户分类模型_字段_09

​# 统计每个客户交易的总次数,即对订单ID计数 ​​​​F = data.groupby(by=['Uid'],as_index=False)['Order_Id'].agg('count')​

商业数据分析 | RFM客户分类模型_字段_10

​# 统计每个客户交易的总额,即对每次的交易金额求和 ​​​​M = data.groupby(by=['Uid'],as_index=False)['Pay_Amt'].agg('sum')​

商业数据分析 | RFM客户分类模型_赋值_11

使用merge方法,将R、F、M三个数据在客户ID维度上关联起来,因为它们拥有共同的列名,在这种情况下,on参数可以省略不写。

​# 将R、F、M三个数据框关联,merge默认内连接,可省略,两表on条件的关联列名均为CustomerID,同样可省略 ​​​​RFM_Data​

​#​​​​RFM_Data.columns = ['Uid', 'R', 'F', 'M']​

​RFM_Data.head()​

商业数据分析 | RFM客户分类模型_赋值_12


 3   计算R、F、M综合分值


计算完R、F、M的值后,需要将他们各自按照平均值划分为高、低两类,高于平均值的赋值为2,低于平均值的赋值为1。

# 判断R列是否大于等于R列的平均值,使用loc将符合条件R_S列的值赋值为1 RFM_Data.loc[RFM_Data['R'] >= RFM_Data.R.mean(), 'R_S'] = 1

​#​​​​RFM_Data.loc[RFM_Data['R'] < RFM_Data.R.mean(), 'R_S'] = 2​

​#同R_S赋值方法,对F_S、M_S进行赋值,但与R相反,F、M均为越大越好 ​​​​RFM_Data.loc[RFM_Data['F'] <= RFM_Data.F.mean(), 'F_S'] = 1 ​​​​RFM_Data.loc[RFM_Data['F'] > RFM_Data.F.mean(), 'F_S'] = 2 ​​​​RFM_Data.loc[RFM_Data['M'] <= RFM_Data.M.mean(), 'M_S'] = 1 ​​​​RFM_Data.loc[RFM_Data['M'] > RFM_Data.M.mean(), 'M_S'] = 2​

​RFM_Data.head()​

商业数据分析 | RFM客户分类模型_Data_13

这里使用一个小技巧计算RFM综合分值

RFM综合分值=100*R_S+10*F_S+1*M_S

如上第一行求出来的结果就是212。

# 计算RFM综合分值 
RFM_Data['RFM'] = 100*RFM_Data.R_S+10*RFM_Data.F_S+1*RFM_Data.M_S

​RFM_Data.head()​

商业数据分析 | RFM客户分类模型_赋值_14


 4   用户分层


这里定义了一个字典,将计算出来的8个RFM综合分值,一一对应一个客户类型,并且与前面计算的RFM综合分值进行横向连接。

# 定义RFM综合分值与客户类型的对应关系表 
CustomerType = pandas.DataFrame(data={'RFM': [111,112,121,122,211,212,221,222],
'Type': ['潜在客户','重点挽留客户','一般保持客户','重点保持客户','一般发展客户','重点发展客户','一般价值客户','高价值客户'] } )

# 将RFMData与RFM综合分值客户类型的对应关系表合并为一个数据框,merge默认内连接,可省略,两表on条件的关联列名均为RFM,同样可省略 
RFM_Data = RFM_Data.merge(CustomerType)

RFM_Data.head()

商业数据分析 | RFM客户分类模型_赋值_15

​#​​​​RFM_Data.groupby(by=['RFM','Type'])['Uid'].agg('count')​

商业数据分析 | RFM客户分类模型_Data_16

对于本次结果生成的客户数进行统计,其中高价值的客户有850个,潜在的客户有681个。

​​import pandas as​​​​s=pd.DataFrame({'Type':['潜在客户','重点挽留客户','一般保持客户','重点保持客户','一般发展客户','重点发展客户','一般价值客户','高价值客户'], ​​​​'客户数':[681,22,174,276,489,6,324,850]}, ​​​​'潜在客户','重点挽留客户','一般保持客户','重点保持客户','一般发展客户','重点发展客户','一般价值客户','高价值客户']) ​​​​s.sort_values(by='客户数',ascending=True, inplace=True) ​​​​s.plot(kind='barh')​​

商业数据分析 | RFM客户分类模型_Data_17

对于结果可视化作图分析,其中高价值客户数最多,重点发展客户最少。


 5   数据导出


# 导出数据  RFM_Data.to_excel(r'C:\Users\尚天强\Desktop\RFM模型.xlsx',index=None)


 6   结论建议


通过RFM模型分类后发现,高价值客户数最多,这部分客户最近一次交易时间近、交易频次高、交易金额大,是优质客户,针对这部分客户,可以加大一些优惠力度,享受高折扣,以及做好客情维护。

而潜在客户数也较多,这部分客户最近一次交易时间长、交易频次低、交易金额小,有流失风险,鉴于这部分客户数占比较多,优先考虑挽回,可主动增加造访机会,挽回客户。

商业数据分析 | RFM客户分类模型_字段_18

举报

相关推荐

0 条评论