聊聊零售业客群分类机制
你了解客群分类吗?怎样选择最优的客群分类方法?文章作者对比了企业A和企业B的分类机制,希望能给大家带来一些启发。
在市场调研和用户研究中,企业通常会根据自己的定位和目标,选择适合于自己的客群分类模型,不同类型企业分类依据各有不同。
过去半年,腾讯CDC有幸与客群分类方法非常不同的零售企业A和企业B分别进行了合作研究,发现企业A的客群分类简单明了,企业B全面细致。
一、企业A分类关键变量:客单价客单价是衡量购买力的重要指标。企业A根据用户过去一年的行为,计算出用户过去一年的平均客单价,以400元客单价为界,划分出客群,此后在高价值用户中根据过去一年的购买频次和注册时间又细分出三种客群类型。
△企业A客群分类,来自腾讯智慧零售数据
这种以客单价为分界的分类机制简单明了,清楚的界定了高价值用户。但在调研中,CDC的研究员发现,低价值用户中存在消费频次高,客单价低的用户(由于消费频次高,客单价相对较低),他们的消费总额与高价值用户相似,甚至高于某些高价值的用户。
如果使用这种客单价一刀切的客群分类方式,这些低客单高频用户是否属于被遗漏的高价值用户?客单价高,但频率非常低的用户是否属于被高估的低价值用户?相比较,企业B的分类方式维度多,更为全面。
二、企业B分类关键变量:上一次购买时间,购买频次,订单贡献金额企业B根据用户首单时间先划分大类,然后根据购买频次和订单金额综合再细分有效、活跃、忠诚等维度客群。
△企业B客群分类,来自腾讯智慧零售数据
此后在忠客群体中根据人群特点,购买行为,订单金额等进一步细分为上班族女,上班族男,健身达人,宝妈,家庭主妇/夫和其他群体。
△企业B客群分类,来自腾讯智慧零售数据
我们看到企业B的分类较企业A的分类维度多。在进行忠客的识别中,考虑了上一次购买时间,购买频次和订单贡献金额,较为全面,与客群分类的RFM模型相符合。
在RFM模型中,R(Recency)表示客户最近一次购买的时间有多远,F(Frequency)表示客户在最近一段时间内购买的次数,M (Monetary)表示客户在最近一段时间内购买的金额。根据RFM,可以分析对企业价值高的用户分别是哪些,例如:
重要价值客户:最近消费时间近,消费频次和消费金额都很高重要保持客户:最近消费时间较远,但消费频次和金额都很高重要发展客户:最近消费时间较近,消费金额高,但频次不高,忠诚度不高重要挽留客户:最近消费时间较远,消费频次不高,但消费金额高的用户△RFM客群分类示意,原图片来自百度百科
基于RFM的用户分类,可以针对不同的用户群体制定相应的营销目标和营销方案,例如,对于重要的挽留客户(最近消费时间较远,消费频次不高,但消费金额高的用户),营销的重点可以是如何触发下一次购买,防止流失。
同时,对于每一类用户群体,可以进一步细分(例如企业B对忠客进一步分为5组人群),理解各类用户群体深层的需求,企业最核心价值的用户是哪一群人,企业为他们提供了什么价值,以此可以协助企业发展状态的判断,企业发展目标战略的制定等。
相对比企业A的客单价分类法,企业B的RFM分类法优势突出,既识别了不同价值的用户群体,亦无遗漏。那么如何才能实现RFM模型分类呢?
从数据来源来看, RFM分类需要更多的用户行为数据,也就是更多数据的触点;同时,RFM对用户的分类不是一成不变,静止不动的,高价值的忠实用户可能因为营销不当而流失,而流失用户也可能再度被召回变成忠实用户,需要对用户的动态进行实时监测和更新。
这对传统的,以线下业态为主的企业是一个巨大挑战:数据触点的不完善,难以对用户进行较好的分类和价值识别。为了帮助零售企业解决这个难题,腾讯智慧零售通过多元化的解决方案协助零售企业提升数字化的能力,帮助零售企业精准的服务客户。
除了RFM模型,还有其他许多帮助评估用户价值的方法,例如CLV模型(客户生命周期价值),因为客户生命周期的影响因素非常多,CLV模型的计算公式非常多,例如:
CLV(客户生命周期价值)=LTV(客户终身价值)-CAC(获客成本)-COC(客户运营成本)
CLV(客户生命周期价值)=P(客户年度贡献)/ r(年度流失率)
其中每个变量如何计算也有不同的方法。
还有根据会员最近一次访问时间R(Recency)、访问频率 F(Frequency)和页面互动度 E(Engagements)的RFE(用户活跃度)模型等。
客群分类方法多样,各有利弊,如何选择,腾讯CDC团队也在不断的积累研究和实践。
来源:腾讯CDC()
本文来源于人人都是产品经理合作媒体@腾讯CDC
题图来自Unsplash, 基于CC0协议
精细化运营神器:RFM用户分层
编辑导语:在互联网红利逐渐消失的当下,粗狂式的运营已经难以为继,如何把有限的费用投入到我们最精准的用户上,也就是所谓的精细化运营,是每个公司应该关注的问题。这其中最重要的是用户分层,本文介绍了用户分层的一种最常见、也最常见的方法:RFM用户分层。
一、写在前面随着互联网流量红利的逐渐消失,之前粗狂式的拓客和一刀切的用户运营已经难以为继,越来越多的公司开始意识到,只靠烧钱圈用户、养用户成本太高,因为不是所有的用户都需要你重点投入,金主爸爸一定要好好维护,潜力股一定要加大投入挖掘价值,而羊毛党永远都是你应该严防的对象,这就是所谓的精细化运营,钱要花在刀刃上,要花在业务和核心用户上。
精细化运营讲究的是千人千面,一千类用户一千种运营策略,所以第一步就是要把用户进行分类,然后才有针对性的运营策略,而用户分类中一种尤为重要和常用的方法就是RFM。
二、什么是RFM?什么是RFM?RFM最早产生于电商领域,根据客户的交易频次和交易额衡量客户的价值,对客户进行细分。
RFM是衡量客户价值的三个维度,分别为R(Recency)交易间隔、F(Frequency)交易频度、M(Monetary)交易金额组成。
R表示间隔(Recency):也就是客户最近一次交易距今的间隔,需要注意的是,R是最近一次交易时间到现在的间隔,而不是最近一次的交易时间,R越大,表示客户越久未发生交易,反之R越小,表示客户越近有交易发生。
F表示频次(Frequency):也就是客户在最近一段时间内交易的次数,一般来说选取一个特定的时间段,F越大,表示客户交易越频繁,反之F越小,表示客户不够活跃。
M表示额度(Monetary):也在同样的时间段内,客户交易的金额,M越大,表示客户价值越高,M越小,表示客户价值越低。
有了以上3个维度的数据,就可以对每个用户按照每个维度进行衡量,一般来说我们会选取一个合理的分值对R、F、M进行划分,将3个维度分别分为高、低两类,组合下来就是8类,也就形成了8个用户群体。
当然你说我每个维度分成3类行不行,最终分成27个用户群体不是更精细,当然没问题,但是我们能不能给出27种不同的运营方案,如果给不出,如此细分不就是自嗨么?
毕竟,分为多少个群体不重要,每个群体都要有个性化的运营策略才重要。
下面是一张经典RFM客户细分模型图,R分值、F分值和M分值三个指标构成了一个三维立方图,在各自维度上,根据得分值又可以分为高、低两个分类,分别用2、1表示,最终3个指标两两组合,就构成了8大客户群体。
对每个用户群体进行定性,例如R、F、M分值高的客户为重要价值客户,R、F、M三个分值都低的客户为潜在客户,其他类型客户可以此类推解读。
三、RFM实际案例RFM的原理到这里就讲完了,是不是很简单?确实很简单,但是也确实很实用,在实际的工作中是如何实施这个用户分层模型的呢?下面我们就用一个实际的案例手把手教你如何进行RFM用户分层。
整体来说,RFM模型实施需要以下几个关键的步骤。
1. 数据准备下面通过一个实际的案例学习RFM分析的使用,案例是用python做的,当然了Excel也能做,不必纠结于工具哈,首先将数据导入到data变量,代码如下:
import pandas data=pandas.read_csv(‘./RFM分析.csv’,engine=’python’)
可以大致看一眼data数据的样式,如下图所示。
可以看到,这里记录的是客户的每一个订单的信息,第一列为订单ID,第二列为客户ID,第三列为交易日期,第四列为交易金额。
对数据进行一下加工,根据交易日期,计算出每次交易距今的间隔天数,代码如下:
#将交易日期处理为日期数据类型
data[‘DealDateTime’]=pandas.to_datetime(data.DealDateTime,format=’%Y/%m/%d’)
#假设2015-10-1是计算当天,求交易日期至计算当天的距离天数
data[‘Days’]=pandas.to_datetime(‘2015-10-1’)-data[‘DealDateTime’]
#从时间距离中获取天数 data[‘Days’]=data[‘Days’].dt.days
执行以上代码,即可得到用户每一次交易日期距离指定日期的天数,如下图所示。
2. 计算R、F、M用户的明细数据准备好后,接下来就可以计算每个客户的最近交易间隔R、交易频率F以及交易总额M,计算方法如下:
最近交易间隔R:使用CustomerID作为分组列,距离指定日期间隔天数Days作为聚合列,统计函数使用最小值函数min,即可得到每个客户的最近交易间隔R。
交易频率F:使用CustomerID作为分组列,OrderID作为聚合列,统计函数使用计数函数count。
交易总额M:使用CustomerID作为分组列,订单金额Sales作为聚合列,统计函数使用求和函数sum。
对应的代码如下:
#统计每个客户距离指定日期有多久没有消费了,即找出最小的最近消费距离
R=data.groupby(by=[‘CustomerID’],as_index=False)[‘Days’].agg(‘min’)
#统计每个客户交易的总次数,即对订单ID计数
F=data.groupby(by=[‘CustomerID’],as_index=False)[‘OrderID’].agg(‘count’)
#统计每个客户交易的总额,即对每次的交易金额求和
M=data.groupby(by=[‘CustomerID’],as_index=False)[‘Sales’].agg(‘sum’)
执行以上代码,得到的结果如下图所示。
接下来使用merge方法,将R、F、M三个数据在客户CustomerID维度上关联起来,因为它们拥有共同的列名,在这种情况下,on参数可以省略不写,代码如下:
#将R、F、M三个数据框关联,merge默认内连接,可省略,两表on条件的关联列名均为CustomerID
Data=R.merge(F).merge(M)
#修改列名 RFMData.columns=[‘CustomerID’,’R’,’F’,’M’]
执行以上代码,得到的结果如下图所示。
3. 计算R、F、M综合分值每个客户的R、F、M数据计算好后,接下来就可以对R、F、M这三个维度进行分组打分赋值,得到对应的R分值、F分值、M分值。
打分标准可以按照业务经验、平均值等标准进行划分。最好是按照业务经验划分,因为这里分类的的用户是要到后面进行精细化运营的,可以通过已有的运营策略反推这里的划分阈值。
当然,如果还没有特别清晰的运营策略,也可以采用平均值进行划分。本例将R、F、M三列分别按照各自的平均值划分为高、低2个组,并分别赋值1分、2分。
R分值(R_S):距离指定日期越近,R_S越大,R>=平均值,R_S为1,R<平均值,R_S为2。
F分值(F_S):定义为交易频率越高,F_S越大,F<=平均值,F_S为1,F>平均值,F_S为2。
M分值(M_S):定义为交易金额越高,M_S越大,M<=平均值,M_S为1,M>平均值,M_S为2。对各个用户的RFM的数据行进行打分赋值,代码如下:
#判断R列是否大于等于R列的平均值,使用loc将符合条件R_S列的值赋值为1
RFMData.loc[RFMData[‘R’]>=RFMData.R.mean,’R_S’]=1
#判断R列是否小于R列的平均值,使用loc将符合条件R_S列的值赋值为2
RFMData.loc[RFMData[‘R’]<RFMData.R.mean,’R_S’]=2
#同R_S赋值方法,对F_S、M_S进行赋值,但与R相反,F、M均为越大越好
RFMData.loc[RFMData[‘F’]<=RFMData.F.mean,’F_S’]=1
RFMData.loc[RFMData[‘F’]>RFMData.F.mean,’F_S’]=2
RFMData.loc[RFMData[‘M’]<=RFMData.M.mean,’M_S’]=1RFMData.loc[RFMData[‘M’]>RFMData.M.mean,’M_S’]=2
执行代码,R_S、F_S、M_S的分组分值就计算出来了,如下图所示。
基于以上得出用户最终的RFM分层,如下图所示。
#计算RFM综合分值
RFMData[‘RFM’]=100*RFMData.R_S+10*RFMData.F_S+1*RFMData.M_S
执行代码,得到的RFM综合分值如下图所示。CustomerID:14568的分层为221,对应的就是一般价值用户。
4. 用户分层接下来结合文章开头提到的用户分层定义,将用户细分为8种不同的类型。本例采用与RFM综合分值与用户类型的对应关系表映射的方式实现用户分层。
首先将各个RFM综合分值与用户类型的对应关系定义为一个映射匹配表。
然后再使用merge中的内连接inner方法,将RFMData与刚定义的RFM综合分值用户类型的映射匹配表,根据关联列名RFM匹配合并为一个dataframe,这样就完成了用户分层的操作,代码如下:
#定义RFM综合分值与客户类型的对应关系表
CustomerType=pandas.DataFrame(data={‘RFM’:[111,112,121,122,211,212,221,222]’Type’:[‘潜在客户’,’重点挽留客户’,’一般保持客户’,’重点保持客户’,’一般发展客户’,’重点发展客户’,’一般价值客户’,’高价值客户’]})
#将RFMData与RFM综合分值客户类型的对应关系表合并为一个数据框#merge默认内连接,可省略,两表on条件的关联列名均为RFM,同样可省略 RFMData=RFMData.merge(CustomerType)
执行代码,得到的数据如下图所示。
可以看到,最后一列数据,就是对每个用户细分的用户分层。最后,我们来看看,每个类别的用户数是多少,代码如下:
#按RFM、Type进行分组统计客户数
RFMData.groupby(by=[‘RFM’,’Type’])[‘CustomerID’].agg(‘count’)
执行代码,就可以得到各个客户类型的客户数了。
后续就可以对不同的客户群体,有针对性地采取相应运营策略进行推广、管理,进而提升客户价值和营收水平,限于篇幅,这里就不再展开,我们会在后续的用户运营专题上和大家继续讨论。
本文由 @数据分析星球 原创发布于人人都是产品经理,未经许可,禁止转载。
题图来自 Unsplash,基于CC0协议