转自:https://www.jianshu.com/p/dc053deb94f2
购物篮分析
利用关联分析的方法可以发现关联规则或频繁项集。
二元表示
每一行对应一个事务,每列对应一个项,项用二元变量表示
项在事务中出现比不出现更重要,因此项是非对称的的二元变量。
项集(Itemset):包含0个或多个项的集合,如果包含k个项,则称为k-项集。
事务的宽度:事务中出现的项的个数
一般我们使用三个指标来度量一个关联规则,这三个指标分别是:支持度、置信度和提升度。
Support(支持度):表示同时包含A和B的事务占所有事务的比例。如果用P(A)表示使用A事务的比例,那么Support=P(A&B)
Confidence(可信度):表示使用包含A的事务中同时包含B事务的比例,即同时包含A和B的事务占包含A事务的比例。公式表达:Confidence=P(A&B)/P(A)
Lift(提升度):表示“包含A的事务中同时包含B事务的比例”与“包含B事务的比例”的比值。公式表达:Lift=( P(A&B)/P(A))/P(B)=P(A&B)/P(A)/P(B)。
提升度反映了关联规则中的A与B的相关性,提升度>1且越高表明正相关性越高,提升度<1且越低表明负相关性越高,提升度=1表明没有相关性。
举例子:
10000个超市订单(10000个事务),其中购买三元牛奶(A事务)的6000个,购买伊利牛奶(B事务)的7500个,4000个同时包含两者。
那么通过上面支持度的计算方法我们可以计算出:
三元牛奶(A事务)和伊利牛奶(B事务)的支持度为:P(A&B)=4000/10000=0.4.
三元牛奶(A事务)对伊利牛奶(B事务)的置信度为:包含A的事务中同时包含B的占包含A的事务比例。4000/6000=0.67,说明在购买三元牛奶后,有0.67的用户去购买伊利牛奶。
伊利牛奶(B事务)对三元牛奶(A事务)的置信度为:包含B的事务中同时包含A的占包含B的事务比例。4000/7500=0.53,说明在购买三元牛奶后,有0.53的用户去购买伊利牛奶。
上面我们可以看到A事务对B事务的置信度为0.67,看似相当高,但是其实这是一个误导,为什么这么说?
因为在没有任何条件下,B事务的出现的比例是0.75,而出现A事务,且同时出现B事务的比例是0.67,也就是说设置了A事务出现这个条件,B事务出现的比例反而降低了。这说明A事务和B事务是排斥的。
下面就有了提升度的概念。
我们把0.67/0.75的比值作为提升度,即P(B|A)/P(B),称之为A条件对B事务的提升度,即有A作为前提,对B出现的概率有什么样的影响,如果提升度=1说明A和B没有任何关联,如果<1,说明A事务和B事务是排斥的,>1,我们认为A和B是有关联的,但是在具体的应用之中,我们认为提升度>3才算作值得认可的关联。
提升度是一种很简单的判断关联关系的手段,但是在实际应用过程中受零事务的影响比较大,零事务在上面例子中可以理解为既没有购买三元牛奶也没有购买伊利牛奶的订单。数值为10000-4000-2000-3500=500,可见在本例中,零事务非常小,但是在现实情况中,零事务是很大的。在本例中如果保持其他数据不变,把10000个事务改成1000000个事务,那么计算出的提升度就会明显增大,此时的零事务很大(1000000-4000-2000-3500),可见提升度是与零事务有关的。
根据《数据挖掘概念与技术》一书的说法,常用的判断方法 还不是提升度,而是 KULC度量+不平衡比(IR) 。他们可以有效的降低零事务造成的影响。
下面补充一下KULC和IR的说明:
KULC=0.5*P(B|A)+0.5*P(A|B)
该公式表示 将两种事件作为条件的置信度的均值,避开了支持度的计算,因此不会受零和事务的影响。在上例中,KULC值= (4000/6000+4000/7500)/2=0.6
IR=P(B|A)/P(A|B) ,IR用来指示一种情况
假如在上例中6000个事务包含三元牛奶,75000个包含伊利牛奶,同时购买依旧为4000
则:
KULC=0.5*(4000/75000+4000/6000)=0.36
IR=4000/6000/(4000/75000)=12.5
这说明这两个事务的关联关系非常不平衡,购买三元牛奶的顾客很可能同时会买伊利牛奶,而购买了伊利牛奶的用户不太会再去买三元牛奶。很好理解,A对B的支持度远远高于B对A的支持度。