关联规则分析也称为购物篮分析,最早是为了发现超市销售数据库中不同的商品之间的关联关系。
关联规则分析目的是在一个数据集中找出各项之间的关联关系,而这种关系并没有在数据中直接表示出来。
Apriori:关联规则最常用也是最经典的挖掘频繁项集的算法,其核心思想是通过连接产生候选项及其支持度然后通过剪枝生成频繁项集。
FP-Tree:针对Apriori算法的固有的多次扫描事物数据集的缺陷,提出的不产生候选频繁项集的方法。Apriori和FP-Tree都是寻找频繁项集的算法。
Eclat算法:Eclat算法是一种深度优先算法,采用垂直数据表示形式,在概念格理论的基础上利用基于前缀的等价关系将搜索空间划分为较小的子空间。
灰色关联法:分析和确定各因素之间的影响程度或是若干个子因素(子序列)对主因素(母序列)的贡献度而进行的一种分析方法。
事务和项集
关联规则的分析对象是事务。
事务可以理解为一种商业行为,含义极为广泛。
事务也即购物篮,在实际应用中有多种不同的理解。
关联规则:形如X->Y形式的蕴含表达式,其中X和Y是不相交的。
最小支持度是用户或专家定义的衡量支持度的一个阈值,表示项目集在统计意义上的最低重要性
最小置信度是用户或专家定义的衡量置信度的一个阈值,表示关联规则的最低可靠性。
同时满足最小支持度阈值和最小置信度阈值的规则称作强规则。
定义一:设I={i1,i2,…,im},是m个不同的项目的集合,每个ik称为一个项目。项目的集合I称为项集。其元素的个数称为项集的长度,长度为k的项集称为k-项集。引例中每个商品就是一个项目,项集为I={bread,beer,cake,cream,milk,tea},I的长度为6。
定义二:每笔交易T是项集I的一个子集。对应每一个交易有一个唯一标识交易号,记作TID。交易全体构成了交易数据库D,|D|等于D中交易的个数。引例中包含10笔交易,因此|D|=10。
定义三:对于项集X,设定count(X⊆T)为交易集D中包含X的交易的数量,则项集X的支持度为:
support(X)=count(X⊆T)/|D|
引例中X={bread,milk}出现在T1,T2,T5,T9和T10中,所以支持度为0.5。
定义四:最小支持度是项集的最小支持阀值,记为SUPmin,代表了用户关心的关联规则的最低重要性。支持度不小于SUPmin的项集称为频繁集,长度为k的频繁集称为k-频繁集。如果设定SUPmin为0.3,引例中{bread,milk}的支持度是0.5,所以是2-频繁集。
定义五:关联规则是一个蕴含式:
R:X⇒Y
其中X⊂I,Y⊂I,并且X∩Y=∅。表示项集X在某一交易中出现,则导致Y以某一概率也会出现。用户关心的关联规则,可以用两个标准来衡量:支持度和可信度。
定义六:关联规则R的支持度是交易集同时包含X和Y的交易数与|D|之比。即:
support(X⇒Y)=count(X∩Y)/|D|
支持度反映了X、Y同时出现的概率。关联规则的支持度等于频繁集的支持度。
定义七:对于关联规则R,可信度是指包含X和Y的交易数与包含X的交易数之比。即:
confidence(X⇒Y)=support(X⇒Y)support(X)
confidence(X⇒Y)=support(X⇒Y)support(X)
可信度反映了如果交易中包含X,则交易包含Y的概率。一般来说,只有支持度和可信度较高的关联规则才是用户感兴趣的。
定义八:设定关联规则的最小支持度和最小可信度为SUPminSUPmin和CONFminCONFmin。规则R的支持度和可信度均不小于SUPminSUPmin和CONFminCONFmin,则称为强关联规则。关联规则挖掘的目的就是找出强关联规则,从而指导商家的决策。
这八个定义包含了关联规则相关的几个重要基本概念,关联规则挖掘主要有两个问题:
其中,步骤1是关联规则挖掘算法的难点,下文介绍的Apriori算法和FP-growth算法,都是解决步骤1问题的算法。
Apriori算法的思路如下:
1.第一次扫描交易数据库D时,产生1-频繁集。在此基础上经过连接、修剪产生2-频繁集。以此类推,直到无法产生更高阶的频繁集为止。
2.在第k次循环中,也就是产生k-频繁集的时候,首先产生k-候选集,k-候选集中每一个项集都是对两个只有一个项不同的属于k-1频繁集的项集连接产生的。
3.k-候选集经过筛选后产生k-频繁集。
从频繁集的定义,我们可以很容易的推导出如下结论:
如果项集X是频繁集,那么它的非空子集都是频繁集。
如果k-候选集中的项集Y,包含有某个k-1阶子集不属于k-1频繁集,那么Y就不可能是频繁集,应该从候选集中裁剪掉。
Apriori算法就是利用了频繁集的这个性质。
Aprori算法利用频繁集的两个特性,过滤了很多无关的集合,效率提高不少,但是我们发现Apriori算法是一个候选消除算法,每一次消除都需要扫描一次所有数据记录,造成整个算法在面临大数据集时显得无能为力。
FP-Growth算法是韩家炜等人在2000年提出的关联分析算法。它通过构造一个树结构来压缩数据记录,使得挖掘频繁项集只需要扫描两次数据记录,而且该算法不需要生成候选集合,所以效率会比较高。
FP-Growth算法的平均效率远高于Apriori算法,但是它并不能保证高效率,它的效率依赖于数据集,当数据集中的频繁项集的没有公共项时,所有的项集都挂在根结点上,不能实现压缩存储,而且FP-tree还需要其他的开销,需要存储空间更大,使用FP-Growth算法前,对数据分析一下,看是否适合用FP-Growth算法。
参考资料:
1.https://blog.csdn.net/antkillerfarm/article/details/60880477
2.https://blog.csdn.net/qq_28562411/article/details/75092579