微信号:BigData321

介绍:专注大数据,数据分析,数据挖掘,机器学习相关领域,旨在提供大数据产业链的思维碰撞与资源对接平台.

初识关联分析&R语言实现栗子

2016-11-30 19:28 吕红福

我  相  信  这  么  优秀  的  你 

 已  经  置 顶  了  我

翻译|Herny  选文|挖掘机  

大数据分析挖掘作品




试想这样一个场景:你是Uncle Peter连锁超市的销售主管,有一天一位客人来到你这里买了一瓶啤酒,你是不是会想他可能还会买些什么?换句话说,你是不是很想推荐他买点其它商品?


再试想一个场景:你还是Uncle Peter连锁超市的销售主管,有一天你在清点商品的时候,你发现挺长一段时间以来啤酒的销量一直很差,你是不是会想该把啤酒跟什么放在一起会提高啤酒销量?


那么问题来了……你应该向客户推荐点什么,他才有可能购买呢?还有,到底应该把啤酒放在货架的哪个位置,才能提高销量呢?


这就是本文,想要为大家介绍的:关联(规则)分析。下面会为大家介绍一些关联分析的基本思想及指标,带大家了解什么是关联分析,以及一些简单应用。


关联分析是一种在大规模数据集中寻找某种关系的任务,这种关系有两种形式:频繁项集或者关联规则。频繁项集是经常出现在一块的物品的集合;关联规则暗示两种物品之间可能存在很强的关系。下面举个栗子来说明——下表1给出了Uncle Peter连锁超市的交易清单:


交易ID

商品

1

豆奶,莴苣

2

莴苣,尿布,葡萄酒,甜菜

3

豆奶,尿布,葡萄酒,橙汁

4

莴苣,豆奶,尿布,葡萄酒

5

莴苣,豆奶,尿布,橙汁

表1


表1中,组合{葡萄酒,尿布,豆奶}在交易3及4中均出现过,可以算是一个频繁项集。同时,会发现交易2、3及4中客户同时购买了尿布及葡萄酒,这意味着购买了尿布的客户很可能会买葡萄酒,即(尿布→葡萄酒)可以认为是一条关联规则。


关于关联规则,先看一下相关的评价指标:


  • 支持度support:数据集中包含该项集的记录所占的比例。


如:项集{豆奶}的支持度为4/5;项集{豆奶,尿布}的支持度为3/5


  • 置信度confidence:针对关联规则(尿布→葡萄酒),定义 置信度(葡萄酒|尿布)=支持度(葡萄酒&尿布)/支持度(尿布)。


如:(尿布→葡萄酒)的置信度=(3/5)/(4/5)=3/4

 

那么……是不是置信度(A→B)越高,越应该向购买了A产品的客户推荐B呢???


再举个栗子:假设某菜市场,共有1000人买东西,其中有980人购买了蔬菜,有80人购买了牛肉,有60人同时购买了蔬菜和牛肉,那么可以计算出:


支持度(蔬菜&牛肉)=60/1000=3/50

置信度(蔬菜|牛肉)=(3/50)/(80/1000)=3/4


置信度(蔬菜|牛肉)=3/4,也就是说购买了牛肉的客户客超七成会购买蔬菜,但蔬菜的高购买率是受益于牛肉吗?……其实并非如此,因为购买牛肉的原本就是小众,而购买蔬菜的本来就是大众,所以蔬菜的高购买率并不是因为客户购买了牛肉从而带来的提升。由此,我们引出下一个指标:


  • 提升度lift:针对此例,定义提升度(牛肉→蔬菜)=置信度(牛肉→蔬菜)/支持度(蔬菜)=(3/4)/(980/1000)=0.77,即:在购买了牛肉的前提下购买蔬菜的可能性与没有购买牛肉的前提下购买蔬菜的可能性之比。


回到表1中:先购买尿布对于葡萄酒购买率的提升度=(3/4)/(3/5)=1.25。


这里需要注意提升度的取值,提升度与1比较,当提升度大于1时说明推荐(关联)商品的购买概率比未推荐前有所提高。

 

讨论了关联规则的基本思想及指标后,我们可以比较好的回答文章开头的两个问题。但是实际应中,在给客户做推荐的时候,我们可能会面临更加复杂的情况,比如,一种情况客户购买了两种甚至两种以上产品(前项产品),我们该针对哪一种前项产品做推荐?另一种情况是对于同一种前项产品,又该推荐何种后项产品呢?


两种情况,其实是前项产品的推荐排序和相同前项产品下的后项产品排序。前项产品推荐排序,建议按前项产品的支持度从大到小,进行排序;当确定了前项产品后,推荐后项产品的顺序应该综合考虑提升度和置信度,具体是先筛选出

提升度大于1的规则,再根据置信度由大到小进行排序,最后综合选择最优的关联规则/推荐方式。


说了这么多……大家可能已经有了一个大致的轮廓,下面我们为大家提供一个基于R的使用apriori算法进行关联分析的小栗子(apriori算法是关联分析常用的算法之一,篇幅所限就不多说了,大家可以去查看一下相关书籍),本文使用R软件arules包自带的数据集"Groceries",该数据集包含了9835条购买记录,是做购物篮关联分析的不错选择,下面大致看一下该数据集:更清晰的代码及内容请见点击阅读原文)

   



需要注意的是:"Groceries"作为自带数据集不需要做转换处理,当用arules包处理实际数据的时候,要把数据转换为arules包识别的交易数据。


下面看一下完整的代码:




部分运行结果:




更清晰的代码及内容请见点击阅读原文)


参考资料:

Peter Harrington,《Machine Learning in Action》



作者介绍

Herny


某上市公司,职位数据分析师,关注数据分析及挖掘。关注数据分析挖掘在传统行业的应用。


往期精彩文章推荐,点击图片可阅读

高学历+努力工作+幸福的婚姻 = 美丽人生?


吴恩达:创新,你需要读这六本书


 
大数据分析挖掘 更多文章 LinkedIn败了之后,微软是怎样救市的 如何用Apache Kylin让Hive表查询提速千百倍 如何用Apache Kylin让Hive表查询提速千百倍 【翻译】Quora是怎样使用机器学习的 Yann LeCun:无监督学习是人工智能的下一站
猜您喜欢 iOS移动开发周报-第11期 5个没人能解决的“简单”数学问题 设计师的思维整理术:四个思维可视化模型 k歌自助安全系统 pt-osc改表导致数据不一致案例分析