gitbook/数据分析思维课/docs/414442.md
2022-09-03 22:05:03 +08:00

128 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 16 | 关联规则:为什么啤酒和尿布一起卖?
数据给你一双看透本质的眼睛,这里是《数据分析思维课》,我是郭炜。
世间万物都有一定的联系,你应该听说过这样一个说法:一只南美洲热带雨林的蝴蝶扇动了几下翅膀,两周后美国得克萨斯州就形成了一个龙卷风。
我们不停地搜索一些公司情况,最终很可能会影响这个公司的股价的波动;你打一个喷嚏,第二天发现中了一个彩票;你今天右眼皮起床时跳了跳,结果今天打麻将一直输。
每天都会发生各种各样的事情,我们怎么能发现在这么多的事物之间到底谁和谁有关联性,从而能去描述一些事物出现的规律和模式呢?这就是今天要给你讲的关联规则算法。
## 关联规则定义和使用场景
关联规则挖掘经常会应用在各种各样的数据场景里用于检测数据和数据之间的潜在关系。最早也是最著名的案例就是我当年所在的Teradata公司提出来的一个案例也就是啤酒和尿片的故事。
这个故事是这样的,当你去美国沃尔玛超市,你会看到一个非常有趣的现象:**货架上啤酒和尿布经常放在一起售卖。**这两个看上去是完全不相关的东西,为什么会放到一起卖呢?
Teradata公司针对人们每次去超市一次交易清单里的物品进行关联挖掘发现啤酒和尿布经常会在一次购买清单当中购买。这件事情上沃尔玛的管理者也非常不解后来经过调研发现妈妈们经常会嘱咐她们的老公下班后去给孩子买一点尿布回来你知道孩子用尿布的速度是非常快的。而丈夫买完尿布的时候大多会顺手给自己买一瓶喜欢的啤酒。
Teradata通过针对一年多原始交易的关联规则挖掘发现了这个神奇的组合于是就推荐沃尔玛将啤酒和尿布摆到一起销售。结果这两个产品放到一起后造成了啤酒和尿布销售量整体增长这个摆放的位置也就延续至今。你现在去超市经常能看到很多商品也不是按照类别摆放的例如卖方便面的地方经常有一些泡椒鸡爪、火腿肠、榨菜等等。这些其实背后都是关联规则数据挖掘在起作用。
当然,这个故事有很多人说是当时的人们杜撰出来的,因为那个时候数据分类无法那么精确,数据量也不够大。我觉得不用去讨论故事的真伪,它的意义在于在那个时代,让人们知道原来关联规则通过数据挖掘,我们能够发现一些我们自己完全想象不到的知识。
当然,刚刚我们讲的这个案例只是一个起点,现在关联规则挖掘已经被广泛应用在各行各业中。例如在金融行业当中,它可以预测银行客户的需求:某个高信用额度的客户更换了地址,可能表示他近期购买了一个更大的豪宅,因此可能需要更多的信用额度或者需要一个住房贷款,这些信息可以帮助银行做二次营销。
同样在股票分析当中美国高盛投行公司以及其他的量化交易公司会经常监测人们在Twitter和Facebook上发的一些新闻根据这些新闻来动态调整股票的售卖。
在互联网里使用的案例就更多了,在亚马逊书城里面你能看到“浏览此商品的顾客也同时浏览”的推荐,其实这背后就是关联数据挖掘出来这本书和其他书之间的关联关系,促进你购买更多类似的书籍。
![](https://static001.geekbang.org/resource/image/21/2a/2186d156c070c572f23712a7816bf52a.jpg?wh=1875x920)
## 关联规则算法初探
刚才看了很多案例,那么我们怎么能发现这些强关联之间的数据逻辑呢?先给你介绍三个比较简单的概念。
**支持度support**:某个商品组合出现的次数与总次数之间的比例,也就是这个商品组合整体发生的概率怎样。
5次购买4次买了啤酒啤酒的支持度为4/5=0.8
5次购买3次买了啤酒+尿布,啤酒+尿布的支持度为3/5=0.6。
**置信度confidence**购买了商品A后有多大概率购买商品B也就是在A发生的情况下B发生的概率是多少。
买了5次啤酒其中2次买了尿布(尿布→啤酒)的置信度为2/5=0.4
买了4次尿布其中2次买了啤酒(啤酒→尿布)的置信度为2/4=0.5。
还有一个叫做提升度的概念,你可以简单了解一下。
**提升度lift**衡量商品A的出现对商品B的出现概率提升的程度A和B
提升度(A→B)=置信度(A→B)/支持度(B)。
提升度>1证明A和B的相关性很高A会带动B的售卖
提升度=1无相关性相互没作用
提升度<1证明A对B有负相关也就是这两个商品有排斥作用买了A就不会买B
如果支持度很小证明大多数人不会将这种组合进行购买如果置信度低代表即使两个商品销量都不错但他俩的关系也不紧密。**我们想要做的是要找到置信度高且支持度高的场景。**
给你举个例子在下面这个表格里每个商品下面出现的1代表购买了0 代表没有购买
![](https://static001.geekbang.org/resource/image/5d/5a/5d4d9142d9fb5d19ae1b1b2edd038d5a.jpg?wh=1848x781)
根据前面的定义交易12346购买了啤酒交易126同时购买了啤酒和尿布我们可以计算出支持度为0.5置信度为0.6如果我们把支持度和置信度定义成50%的话就会认为啤酒尿布是一个有关联性的规则
根据这个关联的规则的定义有一个特别原始且粗暴的方法找到关联规则找出所有组合并加以计算然后根据每一种组合的支持度和置信度去提取整体符合关系的规则但这个方法的计算强度是几何级上升的几乎是一个阶乘的逻辑这个致命的问题让我们很难通过暴力计算来获取关联规则
有一个叫Apriori的算法可以解决我们的问题它的基本的逻辑其实也不复杂我把它称为“**连坐算法**”。我们的目标是去掉过多的组合如果按个去统计有价值的组合那么在所有组合中有关联性的组合会有如下逻辑
* 如果一个组合是频繁组合则它所有的非空子集也是频繁组合——连坐一家子都是明星组合任何跳出来两个人也都是明星组合
* 如果一个非空组合是非频繁组合则其所有的父集也是非频繁组合——连坐如果有一个人不是明星他和谁组合都不会是明星组合
例如如果123是频繁组合则121323也是频繁组合若12是非频繁组合则123也是非频繁组合即其他数据集里只要含12都可直接判定其为非频繁组合。**这种方法能够帮我们去掉很多没有必要测试的组合。**这样我们再去分析余下组合的支持度和置信度就可以得到我们的最终要的规则了
Apriori算法的优点是可以产生相对较小的候选集而它的缺点是要重复扫描数据库且扫描的次数由最大频繁项目集中项目数决定因此Apriori适用于最大频繁项目集相对较小的数据集中后续的FP-growth算法修正了这些问题当然用于关联规则挖掘算法还有很多例如setmEclat等等你要是感兴趣可以去进一步了解这些算法
目前关联规则的挖掘过程大致可以总结为两步
* 找出所有频繁组合
* 由频繁组合产生规则从中提取置信度高的规则
当然关联规则有它的一些局限性它需要有足够的数据才能发现这些规则而在现实世界中想获得这些足够的数据可不容易而且如果获取的数据出现偏差关联规则会容易得到错误的结果还可能生成太多无用的规则
所以在使用关联规则算法之前**一定要通过业务的梳理先规避掉有偏差的脏数据选择最终真正对业务有用的规则。**
当然我们也反复强调过关联规则挖掘出来的结果只是代表这两件事情有很强的相关性但不能代表有因果关系因果关系的确定要结合实际的业务经验
## 未来场景的展望
关联规则已经不仅仅使用在交易当中而是根据物联网和人工智能算法的发展出现在越来越多有意思的场景中
例如下面这个图就是我在万达的时候在某万达广场通过每一个会员客户在不同商店停留的的情况分析出的一个关联规则的图这个图里面两个商店之间线颜色越深的代表它们之间的关联性越强线颜色越浅的代表它们之间的关联的性越少
你能惊奇地发现原来喜欢去星巴克的人也经常会喜欢去必胜客而且在那个时候喜欢去星巴克的人经常会逛H&M同时你也会发现经常去麦当劳的人他不一定去必胜客也不怎么去喝星巴克这些都是一些有意思的发现如果要做促销我们就可以在星巴克客户里发一些必胜客的优惠券这样就可以相互去引流能够帮助门店创造更多收入
![](https://static001.geekbang.org/resource/image/1b/f4/1ba29c09585739b708d50404fb4bbff4.jpg?wh=1496x949)
同样现在在医学领域里也有很多用关联挖掘的案例我们知道中医针灸非常神秘比如在这些针灸的穴位之间到底有什么关系呢
现在就有很多人去通过针灸药方挖掘去寻找一些针灸的规律比如下面这个图就是一个老中医的针灸穴位之间的关联关系图如果将来这些数据积累到一定程度是不是未来我们就可以用一个人工智能的老中医来给我们开药和针灸呢我觉得随着科技的发展这件事情一定可以实现
![](https://static001.geekbang.org/resource/image/ac/9f/ac1fe8bdc150ccb25ab0f9ccbe8a0c9f.jpg?wh=1648x1053)
还有对于我这种理科直男来讲选衣服搭配简直比让我去做一个关联算法还要难现在简单了很多的门店里面会有类似下面这样的魔镜帮你去推荐衣服的穿搭你穿上某一件衣服一照镜子就会自动生成配套的搭配如果满意的话直接点击就可以在店里面一下能买好几件衣服这对于我这种没有审美的直男简直太方便了
这背后其实是通过百万级购买的记录去找到这些衣服之间的搭配的规则然后再推荐给你个人这样的话可以给你提供更加个性化的优质穿衣搭配方案能够提高整体商品的销量
![](https://static001.geekbang.org/resource/image/60/56/60ac20943a6362525c36ac02d97fdf56.jpg?wh=1732x1141)
## 小结
简单回顾一下今天给你讲了关联规则的一些定义也给你分享了怎样去发现事物之间关联规则的算法Apriori也展望了一下未来和你分享了一些最新的应用场景
利用关联规则挖掘我们可以找到复杂事物当中有强相关的一些组合根据这些组合的分析我们可以提高整体的销售的销量或者进行有效的关联促销利用关联规则挖掘也可以去做一些深度的科学计算发现事物之间背后隐藏的规律
关联规则的算法其实对我们自己也很有启发人的一生其实很短暂我们会经历很多事情感觉很多的事情有关联又不关联就像开头提到的眼皮跳真的和你今天的运气关联性很高吗
其实我们要和关联算法一样把和你关联关系最强的那些事情把握住把关联不强的这些事情舍弃掉我们的一生非常短暂学完这节课你可以试试**用关联算法的思想盘一盘你现在手里的资源看看能不能用连坐算法把整体无关的事务人脉做到断舍离留下精力把和你最强的关联关系的事情做好。**
如果你分不清什么事情对你关联关系最强什么事情对你无关紧要你的生活很有可能变成一团毛线球不知道从哪下功夫就算发力也有可能忙活一些不痛不痒的小事人的一生重要的事情和重要的人脉可能就这么几个你抓住了人生才能成功
数据给你一双看透本质的眼睛利用好关联规则思路找到和自己生命置信度支持度最高的频繁集规划好自己的人生
## 课后思考
在你工作和生活当中遇到像啤酒和尿布这样看似没有道理但是通过数据算法发现他们有很强相关性的故事么分享出来我们共同提高