全球最具影响力的数据智能产业服务和职业发展平台

皇冠篮球比分网

 找回密码
 立即注册

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空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

欢迎随机打赏,买杯咖啡加点能量

×

打赏支付方式:

打赏

帖子永久地址: 

皇冠篮球比分网 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与皇冠篮球比分网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和皇冠篮球比分网的同意,并添加本文出处
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它网站,但并不代表本站赞同其观点和对其真实性负责
6、本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除
7、皇冠篮球比分网管理员和版主有权不事先通知发贴者而删除本文

皇冠篮球比分网(www.bi168.cn)是国内首家系统性关注大数据科学与人工智能的社区媒体!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

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

关于我们|小黑屋|Archiver|皇冠篮球比分网 ( 粤icp备14060679号-1|申请友情链接

GMT+8, 2020-1-29 00:08 , Processed in 0.104839 second(s), 19 queries , Xcache On.

Powered by 皇冠比分

© 2012-2014 皇冠比分网

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