基于产品的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()

总结

RFM呈现给我们仅仅是数据的表象,这个表象是时间所积累的事件的累计造成的,所以我们分析时需要抓住时间节点,比如某个运营事件可能会造成F的次数增多,比如双11期间购买的频率也会增多,还有周期的定义,不同行业的供需关系会造成购买的周期也会不同,例如生鲜食品行业可能就是以天去定义跨度,而某些大宗商品的行业可能就以月定义跨度,这个不是固定的定义,所以在设计模型时需要多与业务沟通核心的定义,而校核模型的准确性可就以业务的反馈以及实际上线后的指标变化作为指标进行反馈迭代。
经验分享 程序员 微信小程序 职场和发展