基于产品的RFM模型分析
系列文章目录
基于python的RFM模型分析
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、RFM是什么?
关于RFM是什么,这里用一个脑图简单的阐述一下,特别注意一点是规定周期下,这个周期可以基于我们的业务常识或者基于程序去定义,在我看来这个周期可以是个变量,如果后期进行机器学习,我们可以回测这个变量值以判定周期的跨度为多少更为合适。
注意:基于第一性原理原则,这里的数据清洗将不再阐述,呈现的数据将是数据清洗过后的数据,目标是快速掌握RFM的具体含义。
二、分析步骤
1.引入库
代码如下(示例):
import datetime as dt import matplotlib.pyplot as plt import seaborn as sns import numpy as np import pandas as pd
2.读入数据
代码如下(示例):
df =pd.read_csv(./Online Retail.csv) print(df .head(3))
数据结构:这里用excel呈现可视化效果更好 计算表的Monery值,以及其时间跨度(方便计算R值)
#创建新的列,用来存储每个用户的Monetary Value
df[TotalSum] = df[UnitPrice]* df[Quantity]
#查看整个表的时间跨度
print(Min Invoice Date:,df.InvoiceDate.dt.date.min(),max Invoice Date:,
df.InvoiceDate.dt.date.max())
df.head(3)
这里我们会采用2011-12-10作为分析的当天(数据采集 是昨天,那么分析的日期就是当天(数仓里T+1原理))
snapshot_date = df[InvoiceDate].max() + dt.timedelta(days=1) snapshot_date
接下来,进行RFM的计算。
# 计算RFM矩阵
rfm = df.groupby([CustomerID]).agg({
InvoiceDate: lambda x : (snapshot_date - x.max()).days,
InvoiceNo:count,TotalSum: sum})
# R 计算每个用户的 分析的当天(2011-12-10)-购买时最大的购买时间
#重命名
rfm.rename(columns={
InvoiceDate:Recency,InvoiceNo:Frequency,TotalSum:MonetaryValue}
,inplace= True)
rfm.head()
产品分析: 关于R值,用户如果最近越近的时间买我们的产品,那么他是最值得我们运营的,同样,频率越高,以及购买价值越大也越值得我们运营,我们将这三点进行降维,R值涉及时间分析,F/M则涉及空间分析,即本质我们依旧是对时空产生的现象进行分析以发现事物的本质。
# 创建RFM切片 r_labels =range(4,0,-1) f_labels=range(1,5) m_labels=range(1,5) r_quartiles = pd.qcut(rfm[Recency], q=4, labels = r_labels) f_quartiles = pd.qcut(rfm[Frequency],q=4, labels = f_labels) m_quartiles = pd.qcut(rfm[MonetaryValue],q=4,labels = m_labels) rfm = rfm.assign(R=r_quartiles,F=f_quartiles,M=m_quartiles) # 创建RFM切片以及评分score def add_rfm(x) : return str(x[R]) + str(x[F]) + str(x[M]) rfm[RFM_Segment] = rfm.apply(add_rfm,axis=1 ) rfm[RFM_Score] = rfm[[R,F,M]].sum(axis=1) rfm.head()
