RMF模型说明

RMF模型是客户管理中,常被用来衡量客户价值和客户创利能力的重要方法。它主要考量三个指标:

最近一次消费-Recency:近期购买的客户倾向于再度购买

消费频率-Frequency:经常购买的客户再次购买概率高

消费金额-Monetary:消费金额较多的客户再次消费可能性更大

根据上述三个维度,对客户做细分,假定每个维度划分成五个等级,得到客户的R值(1-5),F值(1-5),M值(1-5)。那么客户就被分作5*5*5 <- 125个细分群,我们可以根据客户交易行为的差异针对不同群体做不同的推荐。

或者进一步针对不同的业务场景,对R、F、M赋予不同权重Wr、Wf、Wm,得到每个用户的得分:W=Wr*R+Wf*F+Wm*M。根据最终得分W排序,再划分等级,采用不用的营销策略。

RFM模型其实很简单,其重点应该是在:一,如何做划分,不管是针对三个维度的划分还是三个维度取不同权重的和W的划分,都要依据实际业务场景情况确定。二,针对不同的客户群如何选定合适的营销手段,这个则需要对每个客户群体有正确的解读,并且对实际业务场景理解比较深入。

参考:http://shenhaolaoshi.blog.sohu.com/143275752.html

http://shenhaolaoshi.blog.sohu.com/201923838.html

R语言实现RMF

用来做分析的数据应该是一段时间里累计的客户的消费记录,每笔记录至少需要客户名称、消费时间、消费金额三个要素。

用R生成模拟随机消费记录数据。客户编号为1000-1999共100人,消费记录10000条,消费记录产生时间在2014-01-01到2015-12-29之间。

sales <-data.frame(sample(1000:1999,replace=T,size=10000),abs(round(rnorm(10000,178,55)))+1)#随机第一列产生用户ID,第二列产生用户消费数据
sales.dates<- as.Date("2014/1/1") + 728*sort(stats::runif(10000)) # runif(n,min = 0, max = 1)产生随机数
sales<- cbind(sales,sales.dates)
names(sales)<- c("用户ID","消费金额","消费时间")
str(sales)#查看data.frame的格式

根据上述消费记录,得到Recency、Frequency、Monetary的值。

sales$距离时间 <- round(as.numeric(difftime(Sys.Date(),sales[,3],units="days")))
salesM<- aggregate(sales[,2],list(sales$用户ID),sum) #总消费金额
names(salesM)<- c("用户ID","Monetization")
salesF<- aggregate(sales[,2],list(sales$用户ID),length) #消费次数
names(salesF)<- c("用户ID","Frequency")
salesR<- aggregate(sales[,4],list(sales$用户ID),min) #最近一次消费时间
names(salesR)<- c("用户ID","Recency")
test1<- merge(salesF,salesR,"用户ID")
salesRFM<- merge(salesM,test1,"用户ID")

根据上述说明,对三个维度每个维度划分为5个层次,做均值划分。并给R、F、M分别赋权重0.5,0.3,0.2来求客户最终得分,客户最终得分在1-5之间。

#均值划分
salesRFM0<- salesRFM
salesRFM0$rankR<- cut(salesRFM0$Recency, 5,labels=F)
salesRFM0$rankR<- 6-salesRFM0$rankR #rankR,5是最近,1是最远
salesRFM0$rankF<- cut(salesRFM0$Frequency, 5,labels=F) #rankF,1是最少,5是最频繁
salesRFM0$rankM<- cut(salesRFM0$Monetization, 5,labels=F) #rankM,1是最少,5是最多
salesRFM0$rankRMF<- 0.5*rankR + 0.3*rankF + 0.2*rankM


对Receny、Frequency、Monetary标准化后,以权重权重0.5,0.3,0.2来求客户最终得分,客户最终得分在0-1之间。

#标准化后划分
salesRFM1<- salesRFM
salesRFM1$rankR<-(salesRFM1$Recency-min(salesRFM1$Recency))/(max(salesRFM1$Recency)-min(salesRFM1$Recency))
salesRFM1$rankR<- 1-salesRFM1$rankR #rankR,1是最近,0是最远
salesRFM1$rankF<-(salesRFM1$Frequency-min(salesRFM1$Frequency))/(max(salesRFM1$Frequency)-min(salesRFM1$Frequency))#rankF,0是最少,1是最频繁
salesRFM1$rankM<- (salesRFM1$Monetization-min(salesRFM1$Monetization))/(max(salesRFM1$Monetization)-min(salesRFM1$Monetization))#rankM,0是最少,1是最多
salesRFM1$rankRMF<- 0.5*salesRFM1$rankR + 0.3*salesRFM1$rankF + 0.2*salesRFM1$rankM


以上用到的权重需要根据实际情况考量选定。得到的客户评分rankRMF,是客户细分的一个参考依据,实际场景中,我们可能还有客户的其他数据,可以综合来看。

参考:

http://www.idatacamp.com/2015/10/09/r%E8%AF%AD%E8%A8%80%E5%AE%9E%E7%8E%B0rfm%E6%A8%A1%E5%9E%8B/

有任何问题或建议欢迎提出,转载请注明来源!

R语言实现RMF模型相关推荐

  1. R语言构建xgboost模型:控制训练信息输出级别verbose参数

    R语言构建xgboost模型:控制训练信息输出级别verbose参数 目录 R语言构建xgboost模型:控制训练信息输出级别verbose参数

  2. R语言构建回归模型并进行模型诊断(线性关系不满足时)、进行变量变换(Transforming variables)、使用car包中的boxTidwell函数对预测变量进行Box–Tidwell变换

    R语言构建回归模型并进行模型诊断(线性关系不满足时).进行变量变换(Transforming variables).使用car包中的boxTidwell函数对预测变量进行Box–Tidwell变换 目 ...

  3. R语言构建xgboost模型:基于稀疏数据(dgCMatrix which is a sparse matrix)、稠密数据(dense matrix)、xgb.DMatrix数据聚合

    R语言构建xgboost模型:基于稀疏数据(dgCMatrix which is a sparse matrix).稠密数据(dense matrix) 目录

  4. R语言构建xgboost模型:使用xgb.DMatrix保存、加载数据集、使用getinfo函数抽取xgb.DMatrix结构中的数据

    R语言构建xgboost模型:使用xgb.DMatrix保存.加载数据集.使用getinfo函数抽取xgb.DMatrix结构中的数据 目录

  5. R语言使用线性回归模型来预测(predict)单个样本的目标值(响应值、response)实战

    R语言使用线性回归模型来预测(predict)单个样本的目标值(响应值.response)实战 目录

  6. R语言随机森林模型:计算随机森林模型的特征重要度(feature importance)并可视化特征重要度、使用少数重要特征拟合随机森林模型(比较所有特征模型和重要特征模型在测试集上的表现差异)

    R语言随机森林模型:计算随机森林模型的特征重要度(feature importance)并可视化特征重要度.使用少数重要特征拟合随机森林模型(比较所有特征模型和重要特征模型在测试集上的表现差异) 目录

  7. R语言构建xgboost模型:xgb.cv函数交叉验证确定模型的最优子树个数(可视化交叉验证对数损失函数与xgboost模型子树个数的关系)、交叉验证获取最优子树之后构建最优xgboost模型

    R语言构建xgboost模型:xgb.cv函数交叉验证确定模型的最优子树个数(可视化交叉验证对数损失函数与xgboost模型子树个数的关系).交叉验证获取最优子树之后构建最优xgboost模型 目录

  8. R语言构建xgboost模型并评估模型(测试集、训练集每一轮):误分类率指标(misclassification rate)、logloss

    R语言构建xgboost模型并评估模型(测试集.训练集每一轮):误分类率指标(misclassification rate).logloss 目录

  9. R语言构建xgboost模型:模型的特性重要度计算及可视化、模型对应的结构树(文本文件)

    R语言构建xgboost模型:模型的特性重要度计算及可视化.模型对应的结构树(文本文件) 目录

最新文章

  1. DARPA新局长维多利亚·科尔曼展望未来发展
  2. 基础学习总结(五)---baseAdapter、ContentProvider
  3. mongo创建用户和创建数据库
  4. NS2安装笔记 - Ubuntu9.10
  5. tkinter 菜单添加事件_Tasker的最新测试劫持了Android 11的电源菜单
  6. 3个月亏17亿,贝壳释放了什么信号?
  7. Java统计文件行数
  8. 编程计算三角形的面积和周长。要求如下: (1)、设计一个接口InterfaceShape,其中有计算三角形的面积和周长的抽象方法; (2)、设计一个点类Point,其中有必要的构造方法和一般的访问器方
  9. 计算机计算涨跌的公式,计算股票涨跌的神器—四段五点模型计算器
  10. @TableLogic注解
  11. 计算机管理 灰色,详解电脑任务管理器变成灰色不可用的解决方法
  12. 2022-2028全球可观察性解决方案套件软件行业调研及趋势分析报告
  13. 知乎问题:北京,2017,多少k的java web程序员应该懂多线程和jvm优化?
  14. 微信自动回复小程序(有手就行)
  15. 【C语言程序设计】实验 7
  16. 代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和
  17. 蓝桥杯javaB组穿越雷区
  18. Rocky和ChatGPT谈笑风生的日子 |【AI行研商业价值分析】
  19. ArcGIS将太平洋调至地图中间(改变地图中心经度)
  20. 一个计算机高手的成长

热门文章

  1. linux系统解压缩rar文件夹,linux下解压缩rar文件的办法
  2. Linux个人机器使用465发送邮件
  3. migo获取header sap_SAP中migo什么意思
  4. caffe与Python接口的配置(VC2013 Windows CUDA7.5 Python2.7.12)
  5. 《区块链技术驱动金融》读书笔记
  6. 【Hyperledger Fabric】学习笔记1—— 区块链介绍
  7. SDL是什么,能干什么,为什么我们要学习它?
  8. 计算机系统1 实验 LC-3 Nim游戏 子程序
  9. 带大家读python数据分析一书(三)
  10. 超级计算机app不能解方程,有了这款被 App Store 官方推荐的超级计算器,该把手头的计算器扔了...