第16讲
在交易数据库中发现关联规则
什么是关联规则?
顾客交易的细节信息的利用使得在数据库中自动地寻找数据之间关联的技术得到了发
展。超市中使用条码扫描器收集数据就是一个典型的例子。那些“购物篮”数据库中就存储
了大量的交易记录。每条记录都详细的列出了顾客在一次购物交易中的所有信息。管理者们
感兴趣的是哪些商品总是被一起买走。 他们可能用这些信息使卖场布局更合理,也可以利
用这些信息进行促销,合理编排商品分类以及通过购买类型确定顾客的类型。关联规则的给
出信息是以“if-then”的形式出现。这些规则不同于逻辑上的“if-then”,都是从这些数据中
计算出来的,在本质上具有概率性。除了前提(“if”)和结论(“then”),每个关联规则还须用
两个数值来表示这条规则的不确定度。在关联分析中这个前提和结论是不相交的(不含有任
何公共项)项的集合(称作项集)。
第一个数值称作规则的支持度。这个支持度仅是包含规则的前提和其随后部分的所有交
易的项的数目。(支持度有时也表示数据库中所有记录的一个百分比。)
另外一个数值是规则的置信度。置信度是交易数据集中包含前提和结论的所有交易数
(也就是支持度)与包含前提的所有交易数的比值。例如一个超市数据库中有100,000笔交
易,其中有2,000笔包含A和B,并在这2,000笔中还包含800个C,那么关联规则就是“如
果A和B被买,那么C也可能被买”的支持度是0.8%=800/100,000,而且置信度是
40%=800/2,000。
一个思考支持度的方法是,它是一个随机地从交易数据库中抽取出来的包含前提和结论
的所有项的概率,而置信度是一个条件概率,是从包含前提的所有条目中随机抽取只包含结
论部分的概率。
例一:Han 和 Kamber书中的例子
AllElectronics零售商想了解哪些商品会一起卖出。交易数据库中的数据如下:
上表一共有9笔交易,每笔交易都记录了一起买的商品。交易1买的商品是1,2,5。
交易2买的是2和4,以此类推。假设我们需要找到这些商品中支持度至少为2的关联规则
1
(换算成百分比就是2/9=22%)。通过列举发现只有下列条目满足支持度要求:
{1}的支持度为6
{2}的支持度为7
{3}的支持度为6
{4}的支持度为2
{5}的支持度为2
{1,2}的支持度为4
{1,3}的支持度为4
{1,5}的支持度为2
{2,3}的支持度为4
{2,4}的支持度为2
{2,5}的支持度为2
{1,2,3}的支持度为2
{1,2,5}的支持度为2
不难看出,我们用支持度列出了新的条目,通过检查所有列出的数据集的子集可以减少
规则的条数从而符合相应的置信度比率。因为数据集中的子集出现的频率至少应该和数据集
一样,所以每个子集都会出现在这个列表中。然后直接就可以计算出置信度,就是数据集的
支持度与每个子集的支持度的比值。我们仅保留那些超过置信度阈值的关联规则。例如,从
{1,2,5}这条中我们可以得到如下的关联规则:
{1,2}=〉{5} 置信度={1,2,5}的支持度/{1,2}的支持度=2/4=50%;
{1,5}=〉{2} 置信度={1,2,5}的支持度/{1,5}的支持度=2/2=100%;
{2,5}=〉{1} 置信度={1,2,5}的支持度/{2,5}的支持度=2/2=100%;
{1} =〉{2,5} 置信度={1,2,5}的支持度/{1}的支持度=2/6=33%;
{2} =〉{1,5} 置信度={1,2,5}的支持度/{2}的支持度=2/7=29%;
{5} =〉{1,2} 置信度={1,2,5}的支持度/{5}的支持度=2/2=100%.
如果置信度需要70%,那么只有第二条,第三条和最后一条规则是符合的。
从上面的步骤可以看出,满足相应的支持度和置信度的规则产生过程可以分为两个阶
段。首先,根据支持度找到所有满足条件的项(也称为频繁的或“大规模的”数据集);然
后就可以从那些确定的项目集中产生符合置信度的关联规则。对于大多数关联分析数据,第
一个阶段的计算量极富挑战性。
Apriori算法 虽然已经有很多为产生关联规则而研究出来的算法,但经典的算法是Agrawal
和Srikant提出的Apriori算法。这个算法的关键思想是先找出含有一个项目的频繁项集(1-
项集),然后通过递归产生含有两个项目的频繁项集,然后是三个,一直到产生出各种大小
的频繁项集。不失一般性,我们可以用唯一、连续(正)的整数来表示项,而且每个项集中
的这些项目都按该项增加的顺序排列。上面的例子就阐述了这个符号。当我们在计算中关注
某一个项时,实际上就是指这个项的序号。
频繁1-项集很容易产生,我们所要做的是对每个项,明确数据库中有多少次交易包括
这个项。这些交易数就是1-项集的支持度。我们去掉低于支持度阈值的1-项集,构造一
个频繁1-项集。
从(k-1)-项集得到k-项集的一般过程如下,其中k=2,3,…:通过在(k-1)-项集中两
2
两进行连接操作找出可供k-项集选择的候选集。而这个连接是基于前(k-2)项,例如,若这
两个组的前(k-2)项是相同的,那么就将其结合为一组。如果这个条件得到满足,就产生了k
-项集,不仅包含前面的(k-2)项,这个新的两项也包含进来。因为频繁k项集中的每个含(k-1)
项的子集都是一个频繁(k-1)-项集,所以所有的频繁k-项集都必须在这个候选集中。但是
在这个候选集中也有些k-项集不是频繁项集。所以我们要删除这些,才能找出频繁k-项
集。要明确哪些k-项集是非频繁的,我们首先要检查每个候选k-项集中的(k-1)项的子集。
应该注意到,我们所要检查的仅仅是那些含有从候选集中新增加的两个项目的(k-1)项集(为
什么?)。如果大小为(k-1)项的任何一个子集都不在频繁(k-1)项集中,那么这个候选k项集
就可能不是频繁项集。我们把这样的k项集从候选集中删除。通过这种方式我们就可以保证
所有的项集检查完之后,就可以找出频繁k项集。一直重复这个过程以增加到k项使候选集
为空。
影响算法效率的一个重要方面是候选集和频繁项集的数据结构。最初使用的Hash树方
法,现在已经有很多改进的方法可供使用。
实际上还有很多比Apriori算法更快的算法。
下面我们来看一个这个算法的实际应用的例子,如例2所示。数据是一个小的、包含随
机抽取的50个记录。
例2:
3
4
置信度越高,关联规则就越强,即强关联规则。但是有时这条也不可靠的,因为如果前
提和结论都具有高支持度,那么即使它们是无关的,其关联的置信度也会很高。判断关联规
则强度的一个更好的度量方法是将这个规则的置信度与标准值比较,此时我们假设每条规则
5
中随之产生的关联项集的发生概率与前项集的发生概率是独立的。我们可以利用频繁项集的
频率数来计算这个标准值。标准置信度是随之发生的关联的支持度除以数据库中的交易数。
这可以帮助我们计算该规则的“提升比率”。“提升比率”是该规则的置信度除以假设与先例
独立的发生关联的置信度。若这个比率大于1,说明该规则是有用的。“提升比率”越大,
关联规则的强度就越高。(若该比率低于1,这个规则又意味着什么?)
在所举的例子中由“提升比率”发现规则6 是最令人感兴趣的,因为它表明当项目3
和项目8被购买时,购买项目4的次数比不考虑项目4时几乎多5倍。
缺点
关联规则在实际应用中并不是像想象中那么好用。其最大的不足是在支持度和置信度的
计算工作中产生太多的规则。另外一个不足是这些规则常常很明显。而内在的像“周五时啤
酒和尿布总是被一起购买”这样的故事也不可能如所希望的那样:规则通常都能够被发现。
所以关联分析是需要技巧的,同时就像一些学者争论的那样,用更严格的统计学来处理规则
激增问题是有益处的。
展望
这种采用支持度和置信度进行关联分析的常用方法已经被扩展到发现时间序列模式这
个应用方向。虽然计算过程更加复杂和艰难,但是已经存在很多成功的应用。
6