如何用python计算营业额_如何用Python进行RFM分析

本文节选自

《谁说菜鸟不会数据分析(Python篇)》

RFM分析,是根据客户活跃程度和交易金额贡献,进行客户价值细分的一种客户细分方法。RFM分析,主要由三个指标组成,分别为R(Recency)近度、F(Frequency)频度、M(Monetary)额度组成。

R表示近度(Recency):也就是客户最近一次交易时间到现在的间隔,注意,R是最近一次交易时间到现在的间隔,而不是最近一次的交易时间,R越大,表示客户越久未发生交易,R越小,表示客户越近有交易发生。

F表示频度(Frequency):也就是客户在最近一段时间内交易的次数,F越大,表示客户交易越频繁,F越小,表示客户不够活跃。

M表示额度(Monetary):也就是客户在最近一段时间内交易的金额,M越大,表示客户价值越高,M越小,表示客户价值越低。

下面是一张经典RFM客户细分模型图,如下图所示。

R分值、F分值和M分值三个指标构成了一个三维立方图,在各自维度上,根据得分值又可以分为高和低两个分类,最终三个指标,每个指标分为高低两类,两两组合,就细分为八大客户群体。

例如R分值高,F分值高,M分值高的客户为重要价值客户,R、F、M三个分值都低的客户为潜在客户,其他类型客户以此类推进行解读即可。

RFM分析步骤如下图所示。

STEP01 数据准备

下面通过一个案例学习RFM分析的使用,首先将数据导入到data变量,代码如下:

import pandas

data = pandas.read_csv(

'D:/RFM分析.csv',

engine='python')

-----------------

长按识别下方二维码,关注公众号

回复“RFM”获取案例数据

执行代码,即可得到data数据框,如下图所示。

可以看到,第一列为订单ID,第二列为客户ID,第三列为交易日期,第四列为交易金额。

这个数据格式,也是RFM分析要求的基本数据格式。

根据交易日期,计算出交易日期距离指定日期的间隔天数,代码如下:

# 将交易日期处理为日期数据类型

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

执行代码,即可得到交易日期距离指定日期的天数,如下图所示。

STEP02 计算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,并且CustomerID就是连接条件,在这种情况下,on参数可以省略不写,代码如下:

# 将R、F、M三个数据框关联,merge默认内连接,可省略,两表on条件的关联列名均为CustomerID,同样可省略

RFMData = R.merge(F).merge(M)

# 修改列名

RFMData.columns = ['CustomerID', 'R', 'F', 'M']

执行代码,得到的结果如下图所示。

STEP03 将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

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。

在Python中,可以使用数据框的loc属性将符合条件的数据行进行打分赋值,代码如下:

# 判断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'] 

#同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'] = 1

RFMData.loc[RFMData['M'] > RFMData.M.mean(), 'M_S'] = 2

执行代码,R_S、F_S、M_S的分组分值就计算出来了,如下图所示。

STEP04 计算RFM综合分值

得到R_S、F_S、M_S的分组分值后,接下来就可以计算RFM综合分值。RFM综合分值计算公式如下所示。

RFM = 100╳R_S + 10╳F_S + 1╳M_S

为什么设置R_S的权重为100,F_S的权重为10,M_S的权重为1呢?

这样设置相当分别为百位、十位、个位的组合,以确保RFM综合分值顺序与RFM客户细分模型的分类顺序一致。

RFM综合分值计算的代码如下:

# 计算RFM综合分值

RFMData['RFM'] = 100*RFMData.R_S+10*RFMData.F_S+1*RFMData.M_S

执行代码,得到的RFM综合分值如下图所示。

STEP05 客户分类

接下来根据RFM客户细分模型,将客户细分为八种不同的类型。本例采用与RFM综合分值客户类型的对应关系表匹配合并的方式实现客户分类。

首先将各个RFM综合分值与客户类型的对应关系定义为一个数据框。

然后再使用merge中的内连接inner方法,将RFMData数据框与刚定义的RFM综合分值客户类型的对应关系表,根据关联列名RFM匹配合并为一个数据框,这样就完成了客户分类的操作,代码如下:

# 定义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')

执行代码,就可以得到各个客户类型的客户数了。

后续就可以对不同的客户群体,有针对性地采取相应运营策略进行推广、管理,进而提升客户价值和营收水平。

-----------------

长按识别下方二维码,并关注公众号

长按识别下方二维码,关注公众号

回复“RFM”获取案例数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值