用户分层-RFM

基本简介

根据美国数据库营销研究所Arthur Hughes的研究,客户数据库中有3个神奇的要素,这3个要素构成了数据分析最好的指标:

最近一次消费 (Recency)

消费频率 (Frequency)

消费金额 (Monetary)

–来源百度百科

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GMA4uPQV-1593755610376)(evernotecid://DD492144-9AFF-43C1-9BC0-5A625709FC62/appyinxiangcom/28357599/ENResource/p157)]

定义

Recency:最近一次消费,意指上一次购买距离现在的时间,一般按照天进行计算

Frequency:消费频率是顾客在限定的期间内所购买的次数,时间范围需要自己设定

Monetary:指的是一段时间(通常是1年)内的消费金额

实例

#定义相关函数
#三个指标的分值函数
def Recency(x):
    if x>=0 and x<5:
        return 5
    elif x>=5 and x<15:
        return 4
    elif x>=15 and x<30:
        return 3
    elif x>=30 and x<90:
        return 2
    elif x>=90:
        return 1
    
def Frequency(x):
    if x>=0 and x<10:
        return 1
    elif x>=10 and x<30:
        return 2
    elif x>=30 and x<50:
        return 3
    elif x>=50 and x<100:
        return 4
    elif x>=100:
        return 5
    
def Monetory(x):
    if x>=0 and x<300:
        return 1
    elif x>=300 and x<1000:
        return 2
    elif x>=1000 and x<3000:
        return 3
    elif x>=3000 and x<10000:
        return 4
    elif x>=1000:
        return 5
   

#判断函数
def judge(x):
    if x>avg:
        return 1
    else:
        return 0


#定义RFM函数
def RFM(x):
    if x.iloc[0]==1 and x.iloc[1]==1 and x.iloc[2]==1:
        return "重要价值客户"
    elif x.iloc[0]==1 and x.iloc[1]==1 and x.iloc[2]==0:
        return "重要潜力客户"
    elif x.iloc[0]==1 and x.iloc[1]==0 and x.iloc[2]==1:
        return "重要发展客户"
    elif x.iloc[0]==1 and x.iloc[1]==0 and x.iloc[2]==0:
        return "新客户"
    elif x.iloc[0]==0 and x.iloc[1]==1 and x.iloc[2]==1:
        return "重要保持客户"
    elif x.iloc[0]==0 and x.iloc[1]==1 and x.iloc[2]==0:
        return "一般客户"
    elif x.iloc[0]==0 and x.iloc[1]==0 and x.iloc[2]==1:
        return "重要挽回客户"
    elif x.iloc[0]==0 and x.iloc[1]==0 and x.iloc[2]==0:
        return "流失客户"
        
#分值转化
data["R-SCORE"] = data["R"].apply(Recency)
data["F-SCORE"] = data["F"].apply(Frequency)
data["M-SCORE"] = data["M"].apply(Monetory)

#查看分组情况,用来查看分组的分布是否合理
grouped_r=data["R-SCORE"].groupby(data["R-SCORE"]).count()
grouped_f=data["F-SCORE"].groupby(data["F-SCORE"]).count()
grouped_m=data["M-SCORE"].groupby(data["M-SCORE"]).count()

#计算查看平均值
avg_r = data["R-SCORE"].mean()
avg_f = data["F-SCORE"].mean()
avg_m = data["M-SCORE"].mean()
display(avg_r,avg_f,avg_m)

#也可以用pandas_profiling进行数据预览
import pandas_profiling
pandas_profiling.ProfileReport(data)


#0-1分类
for avg in [avg_r,avg_f,avg_m]:
    if avg==avg_r:
        data["R-SCORE是否大于均值"] = data["R-SCORE"].apply(judge)
    elif avg==avg_f:
        data["F-SCORE是否大于均值"] = data["F-SCORE"].apply(judge)
    elif avg==avg_m:
        data["M-SCORE是否大于均值"] = data["M-SCORE"].apply(judge)

#打标签
data["RFM"] = data[["R-SCORE是否大于均值","F-SCORE是否大于均值","M-SCORE是否大于均值"]].apply(RFM,axis=1)
data.head()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2shORgwD-1593755610378)(evernotecid://DD492144-9AFF-43C1-9BC0-5A625709FC62/appyinxiangcom/28357599/ENResource/p158)]

#数据汇总
result = data.groupby("RFM").agg({"RFM":"count"})

#数据展示
from pyecharts import options as opts
from pyecharts.charts import TreeMap

data = [
    {"value": int(result['RFM'][0]), "name": result['RFM'].index[0]},
    {"value": int(result['RFM'][1]), "name": result['RFM'].index[1]},
    {"value": int(result['RFM'][2]), "name": result['RFM'].index[2]},
    {"value": int(result['RFM'][3]), "name": result['RFM'].index[3]},
    {"value": int(result['RFM'][4]), "name": result['RFM'].index[4]},
    {"value": int(result['RFM'][5]), "name": result['RFM'].index[5]},
    {"value": int(result['RFM'][6]), "name": result['RFM'].index[6]},
    {"value": int(result['RFM'][7]), "name": result['RFM'].index[7]},
]

c = (
    TreeMap()
    .add("RFM模型", data
    ,label_opts= opts.LabelOpts(font_size= 12,position = "inside"))
    .set_global_opts(title_opts=opts.TitleOpts(title=""))
)   
c.render_notebook()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E5Drbbqo-1593755610380)(evernotecid://DD492144-9AFF-43C1-9BC0-5A625709FC62/appyinxiangcom/28357599/ENResource/p159)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Andy_shenzl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值