1、RFM模型的含义
RFM模型是衡量客户价值和客户创利能力的重要工具和手段。在众多的客户关系管理(CRM)的分析模式中,RFM模型是被广泛提到的。
该模型通过一个客户的近期购买行为®、购买的总体频率(F)以及花了多少钱(M)三项指标来描述该客户的价值状况,从而能够更加准确地将成本和精力更精确的花在用户层次身上,实现针对性的营销。
详细来说,R指的是客户最后一次下单时间距离今天多少天了,该指标与客户的复购和流失直接相关。F指标指的是客户的下单频率,即客户在某个时间段内共消费了多少次,该指标用于衡量客户消费的活跃度。M指标指的是客户在该时间段内共消费了多少钱,该指标用于反应客户对于公司的贡献值。
2、RFM分析的前提条件
最近有过交易行为的客户,再次发生交易行为的可能性高于最近没有交易行为的客户。
交易频率高的客户,比交易频率低的客户,更有可能再次发生交易行为。
过去所有交易总金额较大的客户,比过去所有交易总金额较小的客户,更有消费积极性。
3、原始数据
本文数据集如果有需要的话,可以留言获取。如果觉得本文写的还不错,可以关注一下,获取更多精彩文章。
原始数据集在这里先展示一下,让你对这个数据有一个主观印象。
4、数据处理
1)什么是R、F、M呢?
“R”表示最近一次消费时间距离今天共有多少天。什么是最近一次消费时间呢?如果同一个人在不同时间有不同多个订单,那么该时间距离当前时间的差值的最小值,就是最近一次消费时间。
“F”表示某个人一段时间内的消费频次。
“M”表示一段时间内的消费总额。
2)熟悉数据集
熟悉数据集,就是在进行数据处理之前,应该先熟悉数据,只有对数据充分熟悉之后,才能更好的进行分析。
熟悉数据常用的方法和属性有shape、head()、tail()、sample()、info()、describe()。
df = pd.read_excel(r"C:\Users\黄伟\Desktop\RFM_Model\RFM.xlsx") display(df.shape) display(df.sample(5))
结果如下:
从上述结果中可以发现:这笔数据总共有28833行条记录,12列。观察上图,可以清楚地看到每一列数据代表什么含义。
3)保留有效数据
针对此数据集,我们先说一下什么是“有效数据”。“有效数据”指的就是有效购买,也就是说对应的“订单状态”字段显示的是“交易成功”,对于“退款”的记录,我们就直接将这个数据剔除掉。
display("剔除之前共有:"+ str(df.shape[0]) + "条记录") df = df[df["订单状态"]=="交易成功"] display("剔除之后共有:"+ str(df.shape[0]) + "条记录")
结果如下:
4)选取有效字段
通过上面的分析,我们知道了“R”、“F”、“M”三个指标的概念。鉴于此,我们只需要选取"买家昵称",“付款时间”,"实付金额"这三个字段,用于RFM模型的构建,其余字段用处不大,因此删除其余字段。
df1 = df[["买家昵称","付款时间","实付金额"]] df1.index = np.arange(df1.shape[0]) display(df1.shape) display(df1.head())
结果如下:
5)缺失值处理
df1.isnull().sum(axis=0)
结果如下:
从上述结果中可以发现:各字段中没有缺失值,因此不需要做任何处理。
5、RFM建模过程
1)计算RFM三个指标
① 增加“天数”字段,用于计算“R”指标
针对上述“R”、“F”、“M”三个指标的概念,我们对数据做一定的处理。由于 “R”表示的是最近一次消费时间距离今天共有多少天。但是数据集中只有每一天的“付款时间”字段。因此计算RFM指标之前,需要事先添加一个“天数”字段,求出每个“付款时间”距今共有多少天。“天数”越小,就表示最近一次的消费时间。
然后针对上述处理后的数据,做一个数据透视表。以“买家昵称”作为分组字段,对“天数”求最小值;对“付款昵称”计数;对“实付金额”求和,就可以得到我们想要的RFM三个指标。
df1["付款时间"] = pd.to_datetime(df1["付款时间"]) df1["天数"] = (pd.to_datetime("today")-df1["付款时间"]).dt.days display(df1.sample(10))
结果如下: