最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

[模型实践] 探索RFM模型:在B2B行业中做商品分析

[复制链接]
跳转到指定楼层
楼主
发表于 2019-12-18 21:58:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
RFM模型是衡量客户价值和客户创利能力的重要工具和手段。在众多的客户关系管理(CRM)的分析模式中,RFM模型是被广泛提到的。该机械模型通过一个客户的近期购买行为、购买的总体频率以及花了多少钱3项指标来描述该客户的价值状况。--百度百科;
R:Recency—— 客户最近一次交易时间的间隔。R值越大,表示客户交易距今越久,反之则越近;
F:Frequency—— 客户在最近一段时间内交易的次数。F值越大,表示客户交易越频繁,反之则不够活跃;
M:Monetary—— 客户在最近一段时间内交易的金额。M值越大,表示客户价值越高,反之则越低。
在传统的定义中RFM模型针对是把客户作为分析对象,同样可以灵活应用,可以延伸参考使用,例如:
航空行业:R-最近乘机时间,F-乘机次数,M-飞行总里程;
社交、游戏行业:R-最近一次登录,F-登录频率,M-在线时间;
或者:R-最近一次登录,F-点赞数 ,M-评论数;
通信行业:R-最近缴费时间,F-缴费次数,M-缴费总额,等;
本文是探索B2B平台中,把商品(SKU)作为分析对象,参考RFM模型进行商品分析:
注:因为考虑到此模型需要较高频率交易产品适用性强,所以较适用于:日化、快消、食品、饮料等,如果是传统期货制,半年或者一个季度才固定采买一次,可能此种方法意义不大,或者有其他方法可以应用;
主要使用工具:R语言进行数据清洗、整理、模型实现、可视化展示;
数据源简介:主要字段包含:下单日期、商品编码(SKU)、下单客户、下单金额等;
主要是用R语言做数据处理、模型探索等,不是工程代码,所以主要贴部分模型探索过程代码示例;
一、关于R(Recency)的计算方法:
因为存在多个客户不同时间下单SKU情况,如果仅以某SKU最近一次下单时间间隔统计,会存在统计规则影响分析判断,比如,仅一个客户昨天下单某SKU,其他客户最后下单均在1个月以前,那么R的值就显得非常低,就会影响统计误差情况;当客户较多的情况下,粗略计算总会存在每天最少有1个客户下单的可能性,这样R的值就比较固定,对模型的分析判断起不到作用;
考虑到以上因素,模型中对R的计算方法为:取统计周期内单SKU下每个客户的R值的“平均值”方法,结合实际计算后数据分布情况情况如下图:
倾斜度计算公式如下:3*(mean -median) / sd,Recency整体数据倾斜度为:0.77;数据呈现右偏(上图中蓝色线为中位数、红色线为平均值),这里Recency用中位数标准取数,提高数据的“平均值的合理性”,部分代码如下:

[AppleScript] 纯文本查看 复制代码
#每个SKU、客户最后下单日期值计算方法;
sales_mat_max <- aggregate(subset_sales$sales_date,by = list(subset_sales$MATERIAL,subset_sales$Customer) , max)
#计算每个SKU 、客户 距今销售周期R
sales_max$max_date <- as.numeric( Sys.Date() - sales_max$sales_maxdate)
#倾斜度
t <- (3*(mean(sales_max$max_date) - median(sales_max$max_date)))/sd(sales_max$max_date)
#总体SKU在每个客户下R值分布图
library(ggplot2)
ggplot(sales_max, aes(x=max_date)) +
geom_density(col ="blue",size =1) +
geom_vline(data=sales_max,aes(xintercept = mean(sales_max$max_date)), linetype="dashed",col = "red",size =1.2)+
geom_vline(data=sales_max,aes(xintercept = median(sales_max$max_date)), linetype ="dashed" ,col ="blue",size = 1.2)
#计算每个SKU在分客户下R值的中位数
recency <- aggregate(max_date ~ MATERIAL,data = sales_max , median)
二、关于F(Frequency)的计算方法:
关于F的计算主要是对下单客户进行去重计数,如果客户较多,可以对下单客户进行数据离散化处理,便于分析,至于离散的标准和规则,可以根据具体的数据量决定;部分代码示例如下:
[AppleScript] 纯文本查看 复制代码
#每个SKU下单客户数去重  计算F 
frenquency_d <- unique(subset_sales[,c("MATERIAL","customer")])#去重客户数据
frenquency <-  aggregate(frenquency_d$customer,by =list( frenquency_d$MATERIAL),length)
names(frenquency) <- c("MATERIAL","frenqu")
#对下单客户数量做离散处理  分箱 
breaks_f <- c(0,100,300,500,700,1000,1300,1600,2000)
labels_f <- c("(0-100]","(100-300]","(300-500]","(500-700]","(700-1000]","(1000-1300]","(1300-1600]","(1600-2000]")
frenquency[,'frenqu_cut'] <- cut(frenquency$frenqu, breaks =  breaks_f, labels = labels_f)
三、关于M(Monetary)的计算方法:
关于M的计算主要分为单SKU下单总金额和平均每个客户的下单金额2种方式,因为B端产品下单金额相对差别较大,也可以对数据进行离散处理,可以通过自定义方式对下单金额离散(参考F的离散方法)或者直接通过分位数进行分段,本文使用分位数方法分段,示例代码如下:
[AppleScript] 纯文本查看 复制代码
#计算统计统计内每个SKU下单总金额
monetary <- aggregate(amount ~ MATERIAL, data = subset_sales , sum)
breaks_m <- fivenum(monetary$amount)#分位数5个值 对应四个区间段数据
labels_m <- c(paste(0,round(breaks_m[2]/10000,2),sep = "-" ,collapse = ""),
              paste(round(breaks_m[2]/10000,2),round(breaks_m[3]/10000,2),sep = "-" ,collapse = ""),
              paste(round(breaks_m[3]/10000,2),round(breaks_m[4]/10000,2),sep = "-" ,collapse = ""),
              paste(round(breaks_m[4]/10000,2),round(breaks_m[5]/10000,2),sep = "-" ,collapse = ""))
monetary[,'amount_cut'] <- cut(monetary$amount,breaks = breaks_m,labels = labels_m
四、在完成RFM数据计算后,开始对数据分析应用和数据呈现:
1、RFM块状计数图:
[AppleScript] 纯文本查看 复制代码
ggplot(data,aes(frenqu_cut)) + geom_bar() + facet_grid( data$Monetary_avg_cut ~data$max_date_cut) +
  theme_gray()
2、RFM热力图:
[AppleScript] 纯文本查看 复制代码
library(dplyr)
heatmap_data <- data %>% group_by(frenqu_cut,max_date_cut) %>% dplyr::summarize(M_mean = mean(amount))
ggplot(heatmap_data,aes(max_date_cut,frenqu_cut,fill =M_mean)) + geom_tile() + 
  scale_fill_distiller(palette = 'RdYlGn',direction = 1)
3、RFM直方图:
[AppleScript] 纯文本查看 复制代码
par(mfrow=c(1,3))
hist(data$max_date,col = "blue2" ,xlab ="R",main ="Recency")
hist(data$frenqu,col = "green",xlab = "F",main ="Frenquency")
hist(data$Monetary_avg, col = "yellow2",xlab = "M", main ="Monetary")
4、RFM散点图:
[AppleScript] 纯文本查看 复制代码
par(mfrow=c(3,1))
plot(x= data$Monetary_avg, y = data$max_date , type = "p",col ="blue" ,cex =2,xlab = "M" ,ylab = "R")
plot(x= data$Monetary_avg, y = data$frenqu , type = "p",col ="green",cex =2,xlab = "M" ,ylab = "F")
plot(x= data$frenqu, y = data$max_date , type = "p",col ="red",cex =2,xlab = "F" ,ylab = "R")
5、RFM交叉明细表:
[AppleScript] 纯文本查看 复制代码
library(reshape2)
dcast(data, max_date_cut + frenqu_cut  ~ Monetary_avg_cut)
总结:
RFM分析模型的结果输出,用于分析每个SKU最近购买周期、下单频率、下单金额分布情况等,针对不同的SKU制定不同的相关营销策略;
同时对SKU按照价值排序,可以参考量化SKU价值,做到定期对SKU进行分析,通过SKU价值模型的变动,执行相应的营销策略,提高SKU的整体下单情况;
结合不同的SKU性质,对平台做推荐,比如SKU下单客户较少,但下单频次和金额得分较高,可以推荐给未下单客户等方法综合应用;
全文主要做简单思路呈现、和RFM的探索应用;
来源:数据D江湖

楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-4-26 10:53

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表