首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >关联推荐:啤酒怎么爱上尿布?

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

作者头像
herain
发布2022-04-27 17:30:04
发布2022-04-27 17:30:04
5760
举报
文章被收录于专栏:数据指象数据指象

关联发现更多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='关联规则的可视化'))

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据指象 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档