R语言 RFM分析

目录

一、RFM分析的定义:

二、RFM分析的假设

三、RFM分析的步骤

四、RMF分析实例

4.1 数据准备

4.2 计算R/F/M

4.3 将R、F、M分组打分赋值

4.4 计算RFM综合分值

4.5 客户分类

4.6 完整代码


注:个人学习笔记--谁说菜鸟不会数据分析 R语言篇

一、RFM分析的定义:

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

指标解释意义
R(Recency,近度)客户最近一次交易时间到当前时间的间隔

R越大,表示客户越久为发生交易

R越小,表示客户越近有交易发生

F(Frequency,频度)客户在最近一段时间内交易的次数

F越大,表示客户交易越频繁

F越小,表示客户交易越少

M(Monetary,额度)客户在最近一段时间内交易的金额

M越大,表示客户价值越高

M越小,表示客户价值越低

依据如上三项指标,划分为6,8,11等几种模型。最常见的为8种:

 二、RFM分析的假设

1、假设最近有过交易行为的客户比最近没有交易行为的客户,更有可能再次发生交易行为。

2、假设交易频率较高的客户比交易频率较低的客户,更有可能中再次发生交易行为。

3、假设过去所有交易总金额更多的客户比交易总金额较少的客户,更有消费积极性。

三、RFM分析的步骤

RFM分析,我的理解就是根据用户的行为,从三个层次角度分被构建指标,分别打分,然后计算RFM综合分值,最后将客户进行分类,最后对不同的客户采用不同的营销手段,实现留存高价值客户、发展重点发展客户,挖掘潜在客户的目的。

因此,RFM分析可以分为如下五个步骤:

1.数据准备

2.计算R、F、M

3.将R、F、M分组打分赋值

4.计算RFM综合分值

5.客户分类

四、RMF分析实例

4.1 数据准备

data = read.csv('C:/Users/ABC/Desktop/书籍源代码和配套资源/谁说菜鸟不会数据分析(R语言篇)--数据/第五章/5.7 RFM分析/RFM分析.csv',
                fileEncoding="utf8",
                stringsAsFactors=FALSE)

 数据第一列为OrderID(订单ID)、第二列为CustomerID(客户ID)、第三列DealDataTime(交易日期)第四列为Sales(交易金额)

由于交易日期不利于数据之间的对比,这就需要我们根据交易日期计算出交易日期距当前日期的间隔天数,主要分为如下四个步骤:

1.将日期处理为时间型

2.将当前日期与交易日期相减得到交易日期距离当前日期的时间差

3.使用as.numeric函数将时间

差转换为以日为单位的数值

4.使用floor函数将数据向下取整得到天数。

#1.数据准备

#将时间处理为时间型
data$DealDateTime = strptime(data$DealDateTime, format ='%Y-%m-%d')
#求交易日期至当前日期的时间差
data$DateDiff = Sys.time() - data$DealDateTime
#根据时间差获取天数
data$DateDiff = floor(as.numeric(data$DateDiff, units = "days"))

4.2计算R/F/M

R:使用CustomerID作为分组列,最近一次交易日期距离当前日期的间隔天数Days作为统计列,统计函数使用最小值函数min

 F:使用CustomerID作为分组列,OrderID作为统计列,统计函数使用计数函数length

M:使用CustomerID作为分组列,Sales作为统计列,统计函数使用求和函数sum

如下:

#2.计算R、F、M
#统计每个客户的最近一次交易日期距离当前日期的间隔天数,即找出最近消费距离
R = tapply(data$DateDiff, data$CustomerID, min)
#统计每个客户交易的总次数,即对订单计数
F = tapply(data$OrderID, data$CustomerID, length)
#统计每个客户交易的总额,即对每次的交易金额求和
M = tapply(data$Sales, data$CustomerID, sum)
#查看变量
View(R)
View(F)
View(M)
#将R、F、M合并成一个数据框
#使用row.names函数获取R向量的索引以生成CustomerID列
RFMData = data.frame('CustomerID' = row.names(R), 'R' = R, 'F' = F, 'M' = M)

4.3 将R、F、M分组打分赋值

 如果没有特别的分组标准,通常按照平均值划分为两个组,并分别赋值1,2

定义

说明

取值

说明

R_score

近度得分,最近一次交易日期距离指定日期越近,R_score越大

2

R<=平均值

1

R>=平均值

F_score

频度得分,交易频率越高,F_score越大

2

F>=平均值

1

F<=平均值

M_score

额度得分,交易金额越高,M_score越大

2

M>=平均值

1

M<=平均值

#3.将R、F、M合并为一个数据框
#判断R列是否大于或等于自身的平均值,将符合条件的位置赋值为1,否则赋值为2
RFMData$R_score = ifelse(RFMData$R >= mean(RFMData$R), 1, 2)
#赋值方法同上,对F_score,M_score进行赋值,但与R相反
RFMData$F_score = ifelse(RFMData$F >= mean(RFMData$F), 2, 1)
RFMData$M_score = ifelse(RFMData$M >= mean(RFMData$M), 2, 1)

4.4计算RFM综合分值

在得到R_score、F_score、M_score的分组分值后,就可以计算RFM综合分值了,RFM综合分值计算公式为

RFM = 100×R_score + 10×F_score + 1×M_score

这样设置的原因是用百十个位的组合,构造一个RFM分值。

#4.计算RFM综合分值
RFMData$RFM = 100*RFMData$R_score + 10*RFMData$F_score + 1*RFMData$M_score

 

4.5客户分类

本例采用与RFM综合分值和客户类型的对应关系表进行匹配合并的方式实现客户分类。

首先将各个RFM综合分值和客户类型的对应关系定义为一个数据框。然后使用merge函数的内连接方法,将RFMData数据框与港定义的RFM综合分值和客户类型的对应关系表,根据管理案例额名RFM匹配合并为一个数据框,这样就完成了客户分类的操作。

#5.客户分类
#定义RFM综合分值和客户类型的对应关系表
CustomerType = data.frame(
  'RFM' = c(111, 112, 121, 122, 211, 212, 221, 222),
  'Type' = c('潜在客户', '重点挽留客户', '一般保持客户','重点保持客户', '一般发展客户', '重点发展客户', '一般价值客户', '高价值客户')
)
#将RFMData与RFM综合分值和客户类型的对应关系表合并为一个数据框
RFMData = merge(RFMData, CustomerType)

最后统计各个类型的客户数量

#按Type进行分组,统计各个类型的客户数量
count = tapply(RFMData$CustomerID, RFMData$Type, length)
View(count)
CustomerTypeSum = data.frame('数量' = count)
View(CustomerTypeSum)

4.6 完整代码

#R语言 - RFM分析
data = read.csv('C:/Users/ABC/Desktop/书籍源代码和配套资源/谁说菜鸟不会数据分析(R语言篇)--数据/第五章/5.7 RFM分析/RFM分析.csv',
                fileEncoding="utf8",
                stringsAsFactors=FALSE)
#1.数据准备
  #1.将时间处理为实践型
data$DealDateTime = strptime(data$DealDateTime, format ='%Y-%m-%d')
#求交易日期至当前日期的时间差
data$DateDiff = Sys.time() - data$DealDateTime
#根据时间差获取天数
data$DateDiff = floor(as.numeric(data$DateDiff, units = "days"))


#2.计算R、F、M
#统计每个客户的最近一次交易日期距离当前日期的间隔天数,即找出最近消费距离
R = tapply(data$DateDiff, data$CustomerID, min)
#统计每个客户交易的总次数,即对订单计数
F = tapply(data$OrderID, data$CustomerID, length)
#统计每个客户交易的总额,即对每次的交易金额求和
M = tapply(data$Sales, data$CustomerID, sum)
#查看变量
View(R)
View(F)
View(M)
#将R、F、M合并成一个数据框
#使用row.names函数获取R向量的索引以生成CustomerID列
RFMData = data.frame('CustomerID' = row.names(R), 'R' = R, 'F' = F, 'M' = M)

#3.将R、F、M合并为一个数据框
#判断R列是否大于或等于自身的平均值,将符合条件的位置赋值为1,否则赋值为2
RFMData$R_score = ifelse(RFMData$R >= mean(RFMData$R), 1, 2)
#赋值方法同上,对F_score,M_score进行赋值,但与R相反
RFMData$F_score = ifelse(RFMData$F >= mean(RFMData$F), 2, 1)
RFMData$M_score = ifelse(RFMData$M >= mean(RFMData$M), 2, 1)

#4.计算RFM综合分值
RFMData$RFM = 100*RFMData$R_score + 10*RFMData$F_score + 1*RFMData$M_score

#5.客户分类
#定义RFM综合分值和客户类型的对应关系表
CustomerType = data.frame(
  'RFM' = c(111, 112, 121, 122, 211, 212, 221, 222),
  'Type' = c('潜在客户', '重点挽留客户', '一般保持客户','重点保持客户', '一般发展客户', '重点发展客户', '一般价值客户', '高价值客户')
)
#将RFMData与RFM综合分值和客户类型的对应关系表合并为一个数据框
RFMData = merge(RFMData, CustomerType)
#按Type进行分组,统计各个类型的客户数量
count = tapply(RFMData$CustomerID, RFMData$Type, length)
View(count)
CustomerTypeSum = data.frame('数量' = count)
View(CustomerTypeSum)

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
RFM(Recency-Frequency-Monetary)模型是一种常用的客户价析模型。在R语言中,可以使用以下步骤实现RFM模型的计算和评分。 首先,根据实际数据计算每个客户的Recency(最近一次购买距离现在的时间间隔)、Frequency(购买频率)和Monetary(购买金额)指标。可以使用如下代码计算RFM指标: ``` rfm_data <- data.frame(时间间隔, 总次数, 总金额) # 假设数据存储在rfm_data中 # 计算R评分 caculate_r <- function(s) { if (s <= 100) { return(5) } else if (s <= 200) { return(4) } else if (s <= 300) { return(3) } else if (s <= 400) { return(2) } else { return(1) } } rfm_data$R评分 <- sapply(rfm_data$时间间隔, caculate_r) # 计算F评分 caculate_f <- function(s) { if (s <= 5) { return(1) } else if (s <= 10) { return(2) } else if (s <= 15) { return(3) } else if (s <= 20) { return(4) } else { return(5) } } rfm_data$F评分 <- sapply(rfm_data$总次数, caculate_f) # 计算M评分 caculate_m <- function(s) { if (s <= 2000) { return(1) } else if (s <= 4000) { return(2) } else if (s <= 6000) { return(3) } else if (s <= 8000) { return(4) } else { return(5) } } rfm_data$M评分 <- sapply(rfm_data$总金额, caculate_m) ``` 接下来,可以计算RFM得分。根据实际需求,可以选择不同的权重来计算RFM得分。以下是一个示例的加权计算方法: ``` rfm_data$RFM得分 <- rfm_data$R评分 * 100 + rfm_data$F评分 * 10 + rfm_data$M评分 ``` 这样就得到了每个客户的RFM得分。 请注意,以上是基于引用和引用的示例代码。实际情况可能需要根据数据和业务需求进行适当的调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [RFM 模型](https://blog.csdn.net/qq_41739364/article/details/127169085)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [RFM模型及R语言实现](https://blog.csdn.net/sinat_26917383/article/details/50662785)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Terry_trans

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值