R(Recency)——R 代表最近购买日期与指定日期的间隔天数F(Frequency)——F客户在最近一段时间内交易次数活跃度M(Monetray)——M客户最近一段时间内交易金额值 02 | RFM模型 RFM模型可以对用户的价值做一个合理的预估,基于一个理想的客户特征来衡量现实中客户价值的高低通过此类分析,定位最有可能成为品牌忠诚客户的群体,让我们把主要精力放在最有价值的用户身上 03 | 场景构建数据分析的主要任务就是通过数据驱动来优化业务,以实现帮助业务挣钱。实现方式主要是通过对数据的分析,针对性地优化业务中的各个板块的数据。
近几年来,精细化运营、增长黑客成为热门的词汇,其核心就是针对用户行为分析,优化用户指标。作为分析方法论,RFM模型特别具有代表性。
生命周期(Life Cycle)的概念应用很广泛,在心理学上主要是指人的生命周期和家庭的生命周期,是指它的出生、成长过程、衰老、生病和死亡的过程。引申到用户身上就是:
基于"用户-场景-产品"场景来理解的话,生命周期指的就是用户从注册进入平台,购买产品 / 使用产品 这一循环过程,而用户的流失就是生命周期的结束。用户生命周期,也可理解为用户从第一次购买到最后一次购买间隔的时间。RFM分析模型可以把用户生命周期分成不同的阶段。由于行业和品类的特殊性,划分阶段的标准不是唯一的。实际上应该根据业务场景构建不同的指标体系。
为了方便理解,我们通过例子构建一个场景:
360 天内购买不超过 4 次,那么我们定义为新生客户。有效用户(R < 360,4 ≤ F < 7)
360 天内购买了 4 到 6 次,那么我们定义为有效客户。活跃用户(R < 360,7 ≤ F < 10)
360 天内购买了 7 到 9 次,那么我们定义为活跃客户。忠诚用户(R < 360,F ≥ 10)
360 天内购买了 10 次或 10 次以上,那么我们定义为忠诚客户。休眠用户(360 ≤ R < 720)
360 天到 720 天内没有再购买,那么我们定义为休眠客户。流失用户(R ≥ 720 )
超过 720 天都没有再购买,那么我们定义为流失客户。
事实上,客户生命周期通常不像这么简单地划分。比如一些生命周期较短地互联网产品(比如手游),它的增长期可能只有最初的几个月。那么可能两周内不登陆游戏的用户就可能杯定义为休眠用户,超过1~2个月没登陆游戏的用户,基本上可以定义为流失用户
04 | 案例-user划分 1.数据集数据集是来自kaggle的数据集
https://www.kaggle.com/regivm/retailtransactiondata
'''
1.读取数据集
'''
import pandas as pd
df = pd.read_csv(r'../input/retailtransactiondata/Retail_Data_Transactions.csv')
df.head()
# 查看trans_date的格式,发现是object,需要改为时间序列
df.info()
2.数据预处理
import datetime as dt
df.trans_date = pd.to_datetime(df.trans_date)
df.info()
# 计算r、m、f的值,先构建r值
# 通过检查最新购买的日期,来定义今天的日期
df.trans_date.min()
# Timestamp('2011-05-16 00:00:00')
df.trans_date.max()
# Timestamp('2015-03-16 00:00:00')
# 用户最新购买的日期为2015-03-16,那我们就把今天的日期定义为3-17
df.trans_date[:10]
import time
today = time.strftime('2015-3-17')
today = pd.to_datetime(today)
today
# Timestamp('2015-03-17 00:00:00')
3.构建R/M/F体系
# 计算r,r = 今天日期 - 最近购买记录。由于同一id有多条购买记录,后面还需取最早的日期并去重
# 计算m,m = id.value_counts()
# 计算f
df['r_days'] = (today - df.trans_date).dt.days # 将时间序列转为int类型
df
R = df.groupby(['customer_id'])['r_days'].agg([('R',min)])
R
F = df.groupby(by = ['customer_id'])['customer_id'].agg([('F','count')])
F
M = df.groupby(by = ['customer_id'])['tran_amount'].agg([('M','sum')])
M
# 把三张表关联
# 这里也可以利用join函数,比如r.join(F)
RFM = pd.concat([R,F,M],axis = 1)
RFM
4.RMF模型构建
'''
RFM模型构建
- 思路1:将低于平均数的评分为0,高于平均数的评分为1,计算得分结果划分客户层级
- 思路1:将每个维度(比如R)划分为N个等级,每个等级得M分,计算得分结果划分客户层次
'''
# 先查看RFM模型的数据分布情况
RFM.describe()
```python
'''思路2'''
RFM_DEMO1 = RFM.copy()
def func1(x):
if x >= 800:
return 4
elif x >= 600 and x < 800:
return 3
elif x >= 400 and x < 600:
return 2
elif x >= 200 and x < 400:
return 1
else:
return 0
def func2(x):
if x >= 30:
return 4
elif x >= 20 and x < 30:
return 3
elif x >= 10 and x < 20:
return 2
elif x >= 5 and x < 10:
return 1
else:
return 0
def func3(x):
if x >= 2000:
return 4
elif x >= 1500 and x < 2000:
return 3
elif x >= 1000 and x < 1500:
return 2
elif x >= 500 and x < 1000:
return 1
else:
return 0
RFM_DEMO1['R_score'] = RFM_DEMO1.R.apply(func1)
RFM_DEMO1['F_score'] = RFM_DEMO1.F.apply(func2)
RFM_DEMO1['M_score'] = RFM_DEMO1.M.apply(func3)
RFM_DEMO1['final_score'] = RFM_DEMO1.R_score + RFM_DEMO1.F_score + RFM_DEMO1.M_score
RFM_DEMO1
RFM_DEMO1['final_score'] .value_counts().sort_index()
RFM_DEMO1['final_score'] .value_counts().sort_index().values.tolist()
RFM_DEMO1['final_score'] .value_counts().sort_index().index.tolist()
# [3, 183, 346, 1536, 1946, 995, 1626, 163, 90, 1]
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 九个客户层级
import seaborn as sns
import matplotlib.pyplot as plt
plt.figure(figsize=(12,7))
sns.barplot(y = RFM_DEMO1['final_score'] .value_counts().sort_index().values.tolist(),
x = RFM_DEMO1['final_score'] .value_counts().sort_index().index.tolist())
sns.despine()
plt.title('customer level')
'''
当然这里的1~9可以修改为中文,比如['流失用户','优质用户'...]之类的
像这样,我们利用rmf评分体系就将用户划分为9个级别,可以利用这个模型做出一些针对性的运营。比如push信息差异,大客户vip客服对接等等,当然具体业务也要具体分析。
'''
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)