用python实现RFM模型

先上代码

倒库

import pandas as pd
import numpy as np
import faker
import datetime

造数据

f = faker.Faker('zh-cn')
df = pd.DataFrame({
    '客户':[f.name() for i in range(20000)],
    '购买日期':[f.date_between(start_date='-1y', end_date='today') for i in range(20000)],
    '金额':[f.random_int(10,100) for i in range(20000)]
})

处理数据

df = df.groupby('客户').agg({'购买日期':'max','客户':'count','金额':'sum',})
df.rename(columns={'客户':'F', '购买日期':'R', '金额':'M'}, inplace = True)
df.R = df.R.apply(lambda x:(datetime.datetime.now().date()-x).days)
df = df.reset_index()

查看各维度客户的占比情况

df.groupby('R')['客户'].count().plot()
df.R.mean()
149.7355593729869
用python实现RFM模型
df.groupby('F')['客户'].count().plot()
df.F.mean()
2.1473051320592655
用python实现RFM模型
df.groupby('M')['客户'].count().plot()
df.M.mean()
117.36021043590294
用python实现RFM模型  

按规律给客户分价值比

F_bins = [0,2,5,float('inf')]
F_labels = [1,3,12]
M_bins = [0,117,200,float('inf')]
M_labels = [1,3,13]

给用户打标

df = (
    df
    .assign(R_t= pd.qcut(df.R, q=3, labels=[3,2,1]))
    .assign(F_t= pd.cut(df.F, bins=F_bins, labels=F_labels))
    .assign(M_t= pd.cut(df.M, bins=M_bins, labels=M_labels))
)
R_mean = df.R_t.astype("float32").mean()
F_mean = df.F_t.astype("float32").mean()
M_mean = df.M_t.astype("float32").mean()
(R_mean,F_mean,M_mean)

继续打标

df = (
    df
    .assign(R_l= df.R_t.apply(lambda x: 1 if x< R_mean else 0))
    .assign(F_l= df.F_t.apply(lambda x: 1 if x>= F_mean else 0))
    .assign(M_l= df.M_t.apply(lambda x: 1 if x>= M_mean else 0))
)

可视化呈现

df.groupby(['R_l','F_l','M_l'])['客户'].count().plot.bar()

用python实现RFM模型

RFM模型详解

市场和运营往往绞尽脑汁做活动、上新品、蹭热点、做营销,拓渠道,不断开发客户、做回访维系客户感情,除了少数运气好的之外,大部分效果寥寥,这是为何?这年头做营销这么难吗?

聪明的营销人员知道“了解客户”和“客户细分”的重要性。营销人员不仅要着眼于创造更多的访问量和点击量(无论是邮件还是站点)以提高客户获取,还必须遵循从提高点击率(CTR)转变为提高保留,忠诚度并建立客户关系的新范式。与其将整个客户群作为一个整体进行分析,不如将其划分为同类群体,了解每个群体的特征,并使他们参与相关的活动,而不是仅根据客户年龄或地理位置进行客户细分。而RFM分析是分析客户行为的最流行、最简单、最有效的客户细分方法之一。

1、什么是RFM?

用python实现RFM模型RFM定义

R(Recency)最近一次消费时间:表示用户最近一次消费距离现在的时间(或截止到统计周期)。消费时间越近的客户价值越大。1年前消费过的用户肯定没有1周前消费过的用户价值大。

F(Frequency)消费频率:消费频率是指用户在统计周期内购买商品的次数,经常购买的用户也就是熟客,价值肯定比偶尔来一次的客户价值大。

M(Monetary)消费金额:消费金额是指用户在统计周期内消费的总金额,体现了消费者为企业创利的多少,自然是消费越多的用户价值越大。

简言之,RFM代表近度,频率和额度,每个值都与某些关键客户特征相对应。这些RFM指标是客户行为的重要指标,因为频率和额度会影响客户的生命周期价值,新近度会影响保留率,而保留率是忠诚度的衡量标准。

如果是缺乏金钱交易方面的业务,例如收视率,读者人数等,可以使用"Engagement"(参与度)代替Monetary。如官网的访问频次,微信的交互情况,邮件打开率等。这将导致使用RFE 而不是 RFM。此外,可以根据指标例如跳出率,访问时长,访问的页面数,每页所花费的时间等来将Engagement参数定义为一个综合值。

2、RFM因素阐明了以下事实:

购买的时间越近,顾客对促销的反应越积极顾客购买的频率越高,他们就越投入和越满意消费金额区分了大笔支出的消费者和低价值的购买者想要提高回购率和留存率,需要时刻警惕R值RFM分析可帮助营销人员找到以下问题的答案:

谁是您最有价值的客户?导致客户流失率增多的是哪些客户?谁有潜力成为有价值的客户?你的哪些客户可以保留?您哪些客户最有可能对参与度活动做出响应?谁是你不需要关注的无价值客户?针对哪些客户制定哪种发展、保留、挽回策略?通过RFM分析,可以帮助营销人员实现客户细分;衡量客户价值和客户利润创收能力;识别优质客户;指定个性化的沟通和营销服务;为更多的营销决策提供有力支持。

那RFM分析应如何开始呢?

3、RFM评分示例

由于R值、F值、M值存在量级之间的差距,无法直观的通过加减或平均来衡量用户价值,这里我们介绍一种评分方式,根据三组数据各个值的特性,采用5分制为各个数据赋予一个评分值。

让我们通过一个客户交易的样本数据集来演示一个简单的RFM分析是如何工作的:

用python实现RFM模型

△表1:客户交易数据集示例(包含15个客户交易数据的近度,频率和额度。)

为了对此示例进行RFM分析,让我们看看如何根据每个RFM属性分别对客户进行排名,然后对这些客户进行评分。假设我们使用RFM值从1到5对这些客户进行排序,R值的评分机制是R值越大,评分越小。

用python实现RFM模型

△表2:根据“Recency”对客户进行排名

如上表所示,我们按“Recency”对客户进行了排序,最新的购买者排在首位。由于为客户分配的分数是1-5,因此前20%的客户(客户ID为12、11、1)的“Recency”分数为5,接下来的20%(客户ID为15、2、7)的分数为4 , 以此类推。

同样,我们可以根据客户购买从高到低的“Frequency”对其进行排序,将前20%的“Frequency”得分分配为5,依此类推。对于“Monetary”因素,对前20%的客户(消费最多的)分配5分,最低的20%得分为1。这些F和M得分总结如下:

用python实现RFM模型

△表3:根据“Frequency”和“Monetary”对客户进行排名

RFM得分

最后,我们可以将这些客户的R、F和M排名结合起来得到一个汇总的RFM得分。下表中显示的该RFM得分是各个R,F和M得分的平均值,是通过对每个RFM属性赋予相等的权重来获得的。

用python实现RFM模型

△表4:每位客户RFM得分

这种简单的将客户从1-5排序的方法最多会产生125个不同的RFM单元(5x5x5),范围从111(最低)到555(最高)。每个RFM单元的大小不同,依据客户的关键习惯,被捕获为RFM得分以得出客户细分,营销人员依据不同得分的客户制定相应的策略。

显然,针对不同行业的企业如果仅根据他们的购买或参与行为将每个客户的R,F和M得分平均以获得RFM细分市场并不公平。这类平均值只适合于均类数据,对于一些不规则数据,平均值会造成很大的误差,因此,根据您的业务性质,您可以科学增加或减少每个RFM变量的相对重要性,以得出最终分数。例如:

1.耐用消费品行业

每笔交易的Monetary通常较高,但Frequency和Recency较低。例如,你不能指望客户每月购买一台冰箱或空调。在这种情况下,市场营销人员应该更重视Monetary和Recency方面,而不是Frequency方面。

2.时装/化妆品等零售业务

每月搜索和购买产品的客户将有更高的Recency和Frequency得分而不是Monetary得分。因此,可以通过给R和F得分赋予比M更大的权重来计算RFM得分。

3.视频平台等内容apps

追剧狂人相比一般消费者拥有更长的观看时长。对于这些*者,“参与度”和Frequency可以比Recency给予更多的重视,而对于一般人群,可以对Recency和Frequency给予比Engagement更高的权重,以得出RFE得分。

此外,企业需要针对自己的行业特点灵活变通指标的采用。比如在金融行业,最近一次购买时间可能并不适用,此时可以考虑采用金融产品持有时间来代替R,这样更能体现用户与金融企业建立联系时间的长短。

还有一个问题是:如果每个RFM单元都被视为一个细分,那么营销人员将无法单独分析所有这125个客户细分市场。因此,通常采用的RFM模型是将这三个维度指标划分到三维正方体中。

4、RFM模型

在以上的RFM评分示例中,我们已经分别计算R、F、M评分;现在我们进一步分别获得R、F、M的平均值;然后将各个变量高于平均分的定义为“高”,低于平均分的定义为“低”;根据三个变量“高”“低”的组合来定义客户类型;如“高”“高”“高”为高价值客户。

通常,我们通过三维正方体来展示RFM分析结果,数据分析师通常借助CRM或BI工具。这使用户可以更轻松地理解得分,以提供更易于管理和直观的细分。

用python实现RFM模型

可视化RFM分析

如上面的RFM模型所示,因为有三个变量,所以要使用三维坐标系进行展示,X轴表示Recency,Y 轴表示Frequency,Z轴表示Monetary,坐标系的8个象限分别表示8类用户。

用python实现RFM模型

现在,让我们讨论如何解释RFM细分,以了解这些用户的行为,并提出一些有效的营销策略。

分析RFM细分

重要价值客户是您的最佳客户,他们是那些最新购买,最常购买,并且花费最多的消费者。提供VIP服务和个性化服务,奖励这些客户,他们可以成为新产品的早期采用者,并有助于提升您的品牌。重要发展客户是您的近期客户,消费金额高,但平均频率不太高,忠诚度不高。提供会员或忠诚度计划或推荐相关产品以实现向上销售并帮助他们成为您的忠实拥护者和高价值客户。重要保持客户是指那些经常购买、花费巨大,但最近没有购买的客户。向他们发送个性化的重新激活活动以重新连接,并提供续订和有用的产品以鼓励再次购买。重要挽回客户是那些曾经光顾,消费金额大,购买频率低,但最近没有光顾的顾客。设计召回策略,通过相关的促销活动或续订带回他们,并进行调查以找出问题所在,避免将其输给竞争对手。一般价值客户是那些最近购买,消费频次高但消费金额低的客户,需要努力提高其客单价,提*品优惠以吸引他们。一般发展客户是那些最近购买,但消费金额和频次都不高的客户。可提供免费试用以提高客户兴趣,提高其对品牌的满意度。一般保持客户是指很久未购买,消费频次虽高但金额不高的客户。可以提供积分制,各种优惠和打折服务,改变宣传方向和策略与他们重新联系,而采用公平对待方式是最佳。一般挽留客户是指RFM值都很低的客户。针对这类客户可以对其减少营销和服务预算或直接放弃。此外:

目前的RFM分析中,一般给与M值更高的权重;如果您的公司中一般挽留客户与一般发展客户占据多数,说明公司的用户结构不是很合理,需要尽快采取措施进行优化。5、将RFM细分应用于电子邮件列表

现在我们已经了解了什么是RFM,以及如何构建RFM模型以制定营销策略,下面我们将以电子邮件营销为例,说明RFM细分是如何起作用的。

结合客户生命周期价值分析,RFM分析通过向更有可能购买的特定子集发送报价,使电子商务公司能够显着提高响应率。在 (做广告推销产品、征求订户或会员等)直接邮件的世界里,每个名字都有固定的维护或运营成本,削减清单的期望很强烈。因此,传统的直销营销者已经使用RFM细分几十年了。在电子邮件营销中,通常有以下两个常见的误解:误解1:电子邮件很便宜,因此向所有人发送邮件没有任何影响。

实际上有一个很大的缺点:列出疲劳。随着时间的推移,接收者收到了很多他们认为不相关的信息,他们越来越不可能回复,越来越有可能报告你的信息是垃圾邮件。列表确实具有与存储和发送相关的成本,这纯粹取决于列表的大小,反过来,这会降低你的“发件人声誉”得分,而邮箱过滤规则会决定是否将你的邮件过滤到垃圾文件夹而不是收件箱时最重要的因素。最终结果呢?会面临品牌受损和发送成功性问题,这可能会阻止忙碌的收件人接收你的消息。

误解2:发送的列表越长,您的响应率就会更高。

这似乎符合逻辑,但事实并非如此。发送到更多数量的收件人不一定会产生更高的响应率。实际上,它会产生更多的垃圾邮件投诉。而只有当您向更小的列表子集发送相关的、有针对性、个性化的信息时,才更有可能增加回复率。

RFM类别: 适用于电子邮件,使用在线CRM系统或Web工具分析指标

电子邮件营销使您可以用比直接邮件更多的方式来衡量客户的互动和参与度。根据您的电子邮件数据库和营销策略,可以使用其他指标来代替传统的RFM分析参数,从而为您提供许多不同的方式来执行RFM分析:

Recency

上次购买日期上次电子邮件点击的日期上次生成的线索转换的日期Frequency

每个收件人在设定时间内购买的次数每个收件人在设定的时间内点击的次数在设定的时间内生成的线索转化的次数Monetary

在一定时间内花费的总金额根据一段时间内的线索生成成本和线索生成收益等因素得出的总估算值在设定的时间段内根据不同指标得出的累计参与度得分确定了最适合您的业务的指标后,您需要将电子邮件数据库绑定到包含购买或转化历史记录的系统,例如在线CRM系统或Web分析工具。然后,我们可以按照以上所述的RFM评分示例方式以及数据挖掘和统计分析工具生成现成的RFM细分报告。

向不同的RFM细分发送不同类型的电子邮件活动将数据库中的所有记录分配为特定的RFM分类之后,您通常会选择邮件列表的10%左右运行测试活动,以确定要向哪个RFM组发送邮件。在传统的直接邮件中,你需要进行盈亏平衡分析,以确定哪些邮件收件人是有利可图的。您查看每个RFM单元的测试组响应率,然后停止向响应率低于在邮件成本上实现收支平衡所需的响应率的单元发送邮件。然而,在电子邮件营销中,目标不是简单地向您最有价值的客户发送定制化邮件或停止向你没有价值的客户发送邮件,而是找到正确的策略,与各种类型的收件人产生共鸣,以保留、发展或挽回他们。因此,您可以测试不同类型的消息,以查看哪些RFM细分对哪种类型的活动做出最佳反应,并且停止发送那些特定的广告类型到那些不能通过盈亏平衡测试的细分市场。或者,您可以只比较不同RFM细分受众群的转化率,而不必使用盈亏平衡指标,并把未来的活动发送给那些转化最好的群体。以下是针对不同RFM细分市场可能最有效的活动类型的一些建议:

高Recency, 高Frequency和高Monetary:通过独特的电子邮件特权奖励您最忠实的客户和潜在客户。例如,一些零售商自动为他们最好的在线客户提供免费送货和其他优惠。高Recency,低Frequency和低Monetary:此细分受众群包括您的最新客户或订阅者。通过欢迎信息,产品使用技巧或其他对新手有用的信息,给他们留下良好的第一印象。低Recency,低Frequency和低Monetary:在直接营销中,这些最没有参与度的收件人可能根本不值得发送邮件。但是在电子邮件营销中,他们可能是重新参与活动系列的理想人选。仔细检查他们是否仍然希望收到您的邮件,如果他们不想,就把他们从你的名单中删除。基于收件人过去的行为细分电子邮件列表的方法相对较简单。使用RFM分析策略性方法进行细分,以提高回复率,并将更多的潜在客户转化为满意的客户。

6、最后

RFM是一种数据驱动的客户细分技术,可帮助营销人员做出更明智的战略性决策。使营销人员能够快速识别用户并将其细分为同类群体,并针对他们制定差异化和个性化的营销策略。这反过来又提高了用户的参与度和留存率。

上一篇:一元线性回归算法和sigmoid函数


下一篇:python机器学习 | 朴素贝叶斯算法介绍及实现