龙空技术网

python算法体验-6.RFM模型及客户打标体验

洒脱的德才兼备青山 163

前言:

现在同学们对“rfm模型算法”大体比较看重,兄弟们都需要剖析一些“rfm模型算法”的相关内容。那么小编在网络上汇集了一些有关“rfm模型算法””的相关内容,希望咱们能喜欢,同学们一起来学习一下吧!

1.模型介绍

RFM模型是衡量客户价值和客户创利能力的重要工具和手段。在众多的客户关系管理(CRM)的分析模式中,RFM模型是被广泛提到的。该机械模型通过一个客户的近期购买行为、购买的总体频率以及花了多少钱3项指标来描述该客户的价值状况。

RFM是Rencency(最近一次消费),Frequency(消费频率)、Monetary(消费金额),三个指标首字母组合。

RFM模型

R值:最近一次消费(Recency)

消费指的是客户在店铺消费最近一次和上一次的时间间隔,理论上R值越小的客户是价值越高的客户,即对店铺的回购几次最有可能产生回应。

F值:消费频率(Frequency)

消费频率是客户在固定时间内的购买次数(一般是1年)。但是如果实操中实际店铺由于受品类宽度的原因,比如卖3C产品,耐用品等即使是忠实粉丝用户也很难在1年内购买多次。

M值:消费金额(Monetary)

M值是RFM模型中相对于R值和F值最难使用,但最具有价值的指标。

客户RFM值的分类

也可以将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模型算法