原文链接:https://towardsdatascience.com/association-rules-2-aa9a77241654
在营销界,一直流传有一个著名的“纸尿裤”案例:沃尔玛对旗下一家超市销售数量进行设定跟踪,发现一个奇怪现象,啤酒与尿不湿的销量在周末会出现成比例增长。超市对这个现象进行分析和讨论,并派出专员在卖场进行全天候观察。最后,谜底终于水落石出,发现啤酒和尿不湿多为男人在周末采购,而且购买这两种产品的顾客一般都是年龄在25至35周岁的青年男子,由于孩子尚在哺乳期,多数男人都会在下班后带尿不湿回家,而周末正是美国体育比赛的高峰期,一杯啤酒就着比赛是多么惬意的事!这家超市从中受到启发,对物品摆放进行了调整,将卖场内原来相隔很远的妇婴用品区与酒类饮料区的空间距离拉近,减少顾客行走时间,将啤酒与尿不湿摆放在一起,同时将牛肉干等简便下酒食品也摆放在一起,这样下来,全年营业额增加了数百万美元。这个著名的“纸尿裤”案例,直到今天,都被营销界广为称颂,奉为营销界精准营销的经典案例。
那么,在大数据的今天,我们如何去挖掘更多的啤酒与纸尿裤的关系,创造更多的百万美元奇迹呢?当当当当当! 这时关联学习就派上了用场。
我们来看看这个能轻松挣百万的算法长啥样子。
1.先导(Antecedent)和后继(Consequent)
如下图示,它包含两个概念,先导(Antecedent)和后继(Consequent)。具体地,在购物情形中,表示购买了牛奶和鸡蛋的顾客也会购买牛奶,那么商场就可以把面包、鸡蛋和牛奶放在一起或者是打包销售。
2.如何建立如上的先导和后继的关系呢?-量化指标
这里我们需要又引进几个概念
(1)Support-支持度
具体到购物场景里,这个指标描述了一个商品(例如上图中的牛奶)或者一个商品集(例如上图中的面包和鸡蛋组成的集合)被购买的概率。
例如面包被购买的频率远远大于沐浴露的频率,因此可以预料到,面包的Support值将远大于沐浴露。
再比如,考虑itemset1 = {面包、牛奶},itemset2={面包、沐浴露},由于大部分人会同时买面包和牛奶,而同时买面包和沐浴露的人则很少。因此,itemset1的support值将远大于itemset2的support值。
(2)Confidence-置信度
这个指标描述了买了商品X前提下,顾客买商品Y的概率。其实就是条件概率。具体到购物场景里,这个指标描述了买麦片的人里面有多少人会买牛奶的问题。
(3)Lift
Support-支持度替我们筛去了数据量不足的一些数据,例如,10000词交易中,至少发生过50次的商品我们才认为这个商品的数据是可靠的,即对于交易次数小于0.005的商品,我们认为这批商品没有足够多的数据取挖掘关联关系,因此,这部分商品将被舍弃。
而Confidence-置信度给予我们商品X与Y的关系,例如买麦片的人大多数也会买牛奶,那么麦片->牛奶的置信度会很高。
那么凭着这两个指标,我们是否就能决定不同商品之间的关联关系呢?我们来看几个例子。
根据市场分析酸奶→牛奶的置信度很高。那么牙刷→牛奶的置信度怎样?
答案是也很高!
对于一个购买频次高的商品,无论关联规则中的先导(Antecedent)是什么,该关联规则的Confidence-置信度都会很高。
读者们可以就以上图片中的案例自己分析一下。如上图示,有100次交易,其中10次交易是同时购买了牛奶和牙刷,70次只买了牛奶,4次仅仅买了牙刷。
这个时候,最后一个指标Lift就发挥作用了。话不多说,咱直接上公式:
这时我们考虑前面说的牙刷→牛奶的例子,它的confidence=10/(10+4)=0.7, 而买牛奶的频次比为80/100=0.8.
从上面两个数字我们会发现,买了牙刷后,买牛奶的概率(0.7)比原来无任何先验知识的情况下买牛奶的概率(0.8)要低。
也就是说,尽管牙刷→牛奶的置信度很高,小于1的Lift值表示,购买牙刷对于提升购买牛奶概率没有一点点帮助!!!
3.Association Rule Mining - Apriori Algorithm
有了以上的一些度量指标后该如何在成万上亿的商品中去挖掘重要商品之间的关系呢? 穷举是不现实的,仅仅10个商品就可以构建57000条关系。关系的数量随着商品的数量呈指数级上升。这时候, Apriori就派上了用场。
总的来说,关系生成可以分解为三步。
第一步是生成商品集合。例如{面包,鸡蛋,牛奶}。
第二步是由第一步的候选集合生成候选关系集合。例如基于上述的集合,对集合进行二分生成关系,可以有{面包→鸡蛋,牛奶},{面包,鸡蛋 → 牛奶} 等。
最后在候选关系集合选取topk lift的关系集合。
(1)生成候选商品集合
在所有的商品集合中,我们希望筛选出高频次的商品集合作为关系挖掘的基础。
Apriori算法可以加速我们筛选商品集合的过程。它有个重要的"定理",叫Apriori principle,也叫anti-monotone property of support:
频繁项集的所有子集都是频繁的,即
非频繁项集的超集都是非频繁的,即
这一性质能大大减少搜索频繁项集时的搜索空间。
{面包,鸡蛋}的交易数量>={面包,鸡蛋,蔬菜}的交易数量
(2)由候选商品集合生成候选关系集合
对于商品集合 {Bread,Egg,Milk,Butter},可以生成以下的关系集合:
(Egg, Milk, Butter → Bread), (Bread, Milk, Butter → Egg), (Bread, Egg → Milk, Butter), (Egg, Milk → Bread, Butter), (Butter→ Bread, Egg, Milk)
confidence也遵从anti-monotone property,即
(A,B,C→ D) ≥ (B,C → A,D) ≥ (C → A,B,D)。
对于学过概率的同学来说,这点很容易理解,我们来回忆下Confidence的公式:
对于Confidence(A,B,C→ D) , Confidence(B,C → A,D) , Confidence(C → A,B,D),由于分子都一样,都是P(ABCD),对于分母
P(ABC) <=P(BC) <=P( C )
应用如上规则后,我们可以省去大量的计算。
(3)在候选关系集合选取topk lift的关系集合