前言:
现在同学们对“rfm模型算法”大体比较看重,兄弟们都需要剖析一些“rfm模型算法”的相关内容。那么小编在网络上汇集了一些有关“rfm模型算法””的相关内容,希望咱们能喜欢,同学们一起来学习一下吧!1.模型介绍
RFM模型是衡量客户价值和客户创利能力的重要工具和手段。在众多的客户关系管理(CRM)的分析模式中,RFM模型是被广泛提到的。该机械模型通过一个客户的近期购买行为、购买的总体频率以及花了多少钱3项指标来描述该客户的价值状况。
RFM是Rencency(最近一次消费),Frequency(消费频率)、Monetary(消费金额),三个指标首字母组合。
R值:最近一次消费(Recency)
消费指的是客户在店铺消费最近一次和上一次的时间间隔,理论上R值越小的客户是价值越高的客户,即对店铺的回购几次最有可能产生回应。
F值:消费频率(Frequency)
消费频率是客户在固定时间内的购买次数(一般是1年)。但是如果实操中实际店铺由于受品类宽度的原因,比如卖3C产品,耐用品等即使是忠实粉丝用户也很难在1年内购买多次。
M值:消费金额(Monetary)
M值是RFM模型中相对于R值和F值最难使用,但最具有价值的指标。
也可以将R、F、M的值进行系数确定,融合得到一个新的指标,类似下面:
RFM总分值:RFM = RS ∗ 100 + FS ∗ 10 + MS ∗ 1
其中RS、FS、MS根据实际需求,进行定义或优化确定。
2.算法体验
1)faker生成模拟数据
import faker,randomimport pandas as pdf = faker.Faker('zh-cn')df = pd.DataFrame({ 'cuid':[f.pystr() for i in range(2000)], 'date':[f.date() for i in range(2000)], 'amount':[f.random_int(10,100) for i in range(2000)]})df['orderId'] = np.arange(1, len(df) + 1)
2)生成R、F、M标签
data['R'] = (datetime.datetime.now() - data['date']).astype('timedelta64[D]').astype('int')#时间列计算处理R_Agg = data.groupby(by=['cuid'])['R'].agg([('Recent', 'min')])#获取最近时间F_Agg = data.groupby(by=['cuid'])['orderId'].agg([('Frenquency', 'count')])#获取周期内订单数量M_Agg = data.groupby(by=['cuid'])['mount'].agg([('Cost', 'sum')])#获取周期内总金额dataRFM = R_Agg.join(F_Agg).join(M_Agg)dataRFM.reset_index(inplace = True)print(dataRFM)
输出结果
cuid Recent Frenquency Cost0 61255 189 1 2021 61321 262 1 4892 64413 84 1 5483 64887 14 1 4034 65462 172 1 654.. ... ... ... ...117 172447 16 58 28288118 172467 231 1 203119 173770 64 1 728120 174494 2 1 650121 174837 319 1 614
3)每个客户打Label
cutR = pd.cut(dataRFM['Recent'], bins=4, right=False, labels=range(1, 5)).astype('int')cutF = pd.cut(dataRFM['Frenquency'], bins=3, right=False, labels=range(1, 4)).astype('int')cutM = pd.cut(dataRFM['Cost'], bins=3, right=False, labels=range(1, 4)).astype('int')dataRFM['R_label'] = cutRdataRFM['F_label'] = cutFdataRFM['M_label'] = cutMprint(dataRFM)
输出
cuid Recent Frenquency Cost R_label F_label M_label0 61255 189 1 202 3 1 11 61321 262 1 489 3 1 12 64413 84 1 548 1 1 13 64887 14 1 403 1 1 14 65462 172 1 654 2 1 1.. ... ... ... ... ... ... ...117 172447 16 58 28288 1 2 2118 172467 231 1 203 3 1 1119 173770 64 1 728 1 1 1120 174494 2 1 650 1 1 1121 174837 319 1 614 4 1 1
4)设置系数RFM = R_label∗ 3+ F_label∗ 2 + M_label∗ 1,得到
R_label F_label M_label RFM0 3 1 1 121 3 1 1 122 1 1 1 63 1 1 1 64 2 1 1 9.. ... ... ... ...117 1 2 2 9118 3 1 1 12119 1 1 1 6120 1 1 1 6121 4 1 1 15
5)根据RFM分布,定义三类客户labels = ['潜力客户', '重要挽留客户', '重要价值客户']
labels = ['潜力客户', '重要挽留客户', '重要价值客户']rfm_model['Label of Customer'] = pd.cut(rfm_model.RFM, bins=bins, labels=labels, include_lowest=True)print(rfm_model)
输出:
R_label F_label M_label RFM Label of Customer0 3 1 1 12 重要挽留客户1 3 1 1 12 重要挽留客户2 1 1 1 6 潜力客户3 1 1 1 6 潜力客户4 2 1 1 9 潜力客户.. ... ... ... ... ...117 1 2 2 9 潜力客户118 3 1 1 12 重要挽留客户119 1 1 1 6 潜力客户120 1 1 1 6 潜力客户121 4 1 1 15 重要价值客户
get it.
标签: #rfm模型算法