突发!员工跳楼!只拿低保工资!央企设计院集体罢工!

突发!北京某院集体罢工!

淄博向东,惠泊向西:在人民与人民币之间,惠泊停车选择了人民币

【少儿禁】马建《亮出你的舌苔或空空荡荡》

10部适合女性看的唯美情色电影

生成图片,分享到微信朋友圈

自由微信安卓APP发布,立即下载! | 提交文章网址
查看原文

关联推荐:啤酒怎么爱上尿布?

herain 数据指象 2022-07-01

点击上方 “趣味数据周刊” 关注公众号

文章期号:20200129

关联发现更多CP


联系是普遍存在的,关联的存在本身是有价值的,在电商推荐中关联推荐是最简单最直接有效的。关联推荐的核心有三度:支持度,置信度,提升度.
  • 支持度是衡量某一关联的应用场景的多少

  • 置信度是衡量某一关联在应用场景的占比

  • 提升度是衡量某一关联推荐的应用的好坏


一个实践操作,能让我们在三度中,恍然大悟。

1,数据模拟

订单号<-c('OD001','OD002','OD003','OD004','OD005') 

尿布<-c(1, 0,1,1,1) 

啤酒<-c(0, 0,1,1,1) 

可乐<-c(1, 1,1,1,1)

面包<-c(0, 0,0,1,0) 

巧克力<-c(0,1,0,1,0) 

buy_goods <- data.frame(订单号, 尿布, 啤酒, 可乐, 面包, 巧克力)

有五个订单,0/1表示订单是包含商品。

为了更方便的利用SQL对数据进行统计,我们这里需要将数据融合,利用melt实现数据的列转行。
melt(buy_goods, id = (c('订单号')), variable_name =c('商品名称'))

统计描述一下数据
library(sqldf)
SQL = sqldf("SELECT 商品名称, COUNT(1) as Total FROM buy_goods_table WHERE 是否购买=1 group by 商品名称  ORDER BY Total DESC ;")
SQL$Total=as.numeric(SQL$Total)
pie(SQL$Total, labels =SQL$商品名称,explode=0.1,col=rainbow(4), main="购买商品的分布",cex.lab=0.5, cex.axis=0.5, cex.main=1,labelcex=1, family='SimSun')

2,什么是支持度?
即关联组合出现的频率,比如‘尿布’在五个订单出现的频率=4/5;‘尿布->啤酒’ 在五个订单出现的频率=3/5;
3,什么是置信度?
关联组合的条件概率,比如尿布->啤酒的置信度是:在尿布出现的条件下,啤酒出现的概率 = 3/4 ,也等于 ‘尿布->啤酒’的支持度 /  ‘尿布’的支持度。
4,什么是提升度?
组合推荐购买某产品概率 / 直接购买某产品的概率,就是很衡量组合推荐提高某产品的购买效果。
比如‘尿布->啤酒’的置信度 / ‘啤酒’ 的支持度 = 提升度。


一个有效的简单关联规则应具有较高的置信度和较高的支持度。如果规则的支持度较高,但置信度较低,则说明规则的可信度差;如果规则的置信度较高但支持度较低,则说明规则的应用机会很少。一个置信度较高但普遍性较低的规则并没有太多的实际的应用价值。

5,怎么找到效果好的频繁项集 — Apriori 算法
有兴趣同学,可以考虑一些对等类为核心的Eclat算法

5.1,需要将数据转成事务对象。
Bt <- sqldf('SELECT 订单号, 商品名称  FROM buy_goods_table WHERE 是否购买=1')
BuyList<-split(Bt[, '商品名称'], Bt[,'订单号'])
library(Matrix)
library(arules)
BuyTrans<-as(BuyList, 'transactions')  
summary(BuyTrans)
inspect(BuyTrans)

image(BuyTrans);

5.2,在事务对象中搜索频繁项集,生成有效规则
buyrules<-apriori(data=BuyTrans, parameter=list(support=0.5, confidence=0.6, target='frequent itemsets'))
inspect(buyrules)

找出最大的频繁项集:
buyrules<-apriori(data=BuyTrans, parameter=list(support=0.5, confidence=0.6, target='maximally frequent itemsets'))
inspect(buyrules)

5.3,计算组合的提升度
buyrules<-apriori(data=BuyTrans, parameter=list(support=0.5, confidence=0.6, target='rules'))

由此我们可以筛选出最有价值的关联组合「尿布,啤酒,可乐」,「啤酒,尿布」。两个天差地别的商品,就这样成为了传为佳话的一对CP。


6,让简单的规则可视化
buyrules<-apriori(data=BuyTrans, parameter=list(support=0.5, confidence=0.6, target='frequent itemsets'))
inspect(buyrules)
par(family='SimSun')
plot(x= buyrules, method='graph', control=list(main='购买组合可视化'))

buyrules<-apriori(data=BuyTrans, parameter=list(support=0.5, confidence=0.6, target='rules'))
inspect(buyrules)
plot(buyrules, method='grouped')


plot(buyrules, method='paracoord')

plot(buyrules, method='graph',control=list(arrowSize=3,main='关联规则的可视化'))

一起加油吧

推荐阅读:
小试牛刀:用SQL玩转R数据框
数据十问,问十道百
大数据开发,一定要关注小细节
文章底部点个「在看」,坚持为你创作

文章有问题?点此查看未经处理的缓存