文章目录
1. 什么是关联规则
首先,数据挖掘是以 **某种方式 **分析源数据,从中发现一些潜在的有用的信息,即数据挖掘又可以称为知识发现。而机器学习算法则是这里的“某种方式”,关联规则作为十大经典机器学习算法之一,有着很重要的意义。
关联规则(association rule)用来描述两个或多个事物之间的关联性,其通过一件或多件事物来预测其他事物,可以从大量数据中获取有价值数据之间的联系。
举个简单的例子(尿布和啤酒太经典):通过调研超市顾客购买的东西,可以发现30%的顾客会同时购买床单和枕套,而在购买床单的顾客中有 80% 的人购买了枕套,这就存在一种隐含的关系: 床单→枕套 ,也就是说购买床单的顾客会有很大可能购买枕套,因此商场可以将床单和枕套放在同一个购物区,方便顾客购买。
一般,关联规则可以应用的场景有:
-
优化货架商品摆放、在线电商的推荐系统
-
交叉销售或者捆绑销售
交叉销售,就是发现现有客户的多种需求,并通过满足其需求而实现 销售多种相关的服务或产品的营销方式。促成交叉销售的各种策略和方法即“交叉营销”。 捆绑销售是将两种产品捆绑起来销售的销售和定价方式。不是所有的产品和服务都能随意地“捆绑”在一起。捆绑销售要达到“1+1>2”的效果,这就取决于是否可以通过关联规则挖掘发现真正存在关联的商品,并将其“捆绑”。
-
搜索词推荐
-
基于兴趣的实时新闻推荐
2. 关联规则中的一些概念
2.1 名词
-
项目:交易数据库 中的一个字段,对超市的交易来说一般是指一次交易中的一个物品,如:牛奶
-
事务:某个客户在一次交易中,发生的所有项目的集合:如{牛奶,面包,啤酒}
-
项集:包含若干个项目的集合(一次事务中的),一般会大于0个
-
支持度(Support):项集{X,Y}在总项集中出现的概率(见下面的例子)
S u p p o r t ( X → Y ) = P ( X , Y ) / P ( I ) = P ( X ∪ Y ) / P ( I ) , I 表示总事务集 Support(X→Y) = P(X,Y) / P(I) = P(X∪Y) / P(I),I表示总事务集 Support(X→Y)=P(X,Y)/P(I)=P(X∪Y)/P(I),I表示总事务集
-
频繁项集:某个项集的支持度大于设定阈值(人为设定或者根据数据分布和经验来设定),即称这个项集为频繁项集
-
置信度(Confidence):在先决条件X发生的情况下,由关联规则{ X->Y }推出Y的概率。即在含有X的项集中,含有Y的可能性。(见下面的例子)
C o n f i d e n c e ( X → Y ) = P ( Y ∣ X ) Confidence(X→Y) = P(Y|X) Confidence(X→Y)=P(Y∣X)
- 提升度(Lift):表示含有X的条件下含有Y的概率,与无论含不含X含有Y的概率之比。
L i f t ( X → Y ) = P ( Y ∣ X ) / P ( Y ) Lift(X→Y) = P(Y|X) / P(Y) Lift(X→Y)=P(Y∣X)/P(Y)
支持度和提升度示例:
假如有一条规则:牛肉—>鸡肉。假设同时购买牛肉和鸡肉的顾客比例是3/7,而购买牛肉的顾客当中也购买了鸡肉的顾客比例是3/4,则它们在关联规则中称作支持度(support)和置信度(confidence)。
对于规则:牛肉—>鸡肉,它的支持度为3/7,表示在所有顾客当中有3/7同时购买牛肉和鸡肉,其反应了同时购买牛肉和鸡肉的顾客在所有顾客当中的覆盖范围;它的置信度为3/4,表示在买了牛肉的顾客当中有3/4的人买了鸡肉,其反应了可预测的程度,即顾客买了牛肉的话有多大可能性买鸡肉。
从集合的角度去看,可以看下面这幅图:S表示所有的顾客,而A表示买了牛肉的顾客,B表示买了鸡肉的顾客,C表示既买了牛肉又买了鸡肉的顾客。那么 C . c o u n t / S . c o u n t = 3 / 7 , C . c o u n t / A . c o u n t = 3 / 4 {C._{count}/S._{count}=3/7,C._{count}/A._{count}=3/4} C.count/S.count=3/7,C.count/A.count=3/4。
提升度示例:
有1000名顾客购买年货,A组有500人购买茶叶,有450人购买咖啡;B组有0人购买茶叶,有450人购买咖啡。
购买茶叶 | 购买咖啡 | |
---|---|---|
A组(500人) | 500 | 450 |
B组(500人) | 0 | 450 |
试求解
1)”茶叶→咖啡“ 的支持度
2)“茶叶→咖啡” 的置信度
3)”茶叶→咖啡“ 的提升度
分析:
设X= {买茶叶},Y={买咖啡}
1)规则 ”茶叶→咖啡“ 表示 ”既购买了茶叶,又购买了咖啡的概率“ ,于是,”茶叶→咖啡“的支持度为
S
u
p
p
o
r
t
(
X
→
Y
)
=
450
/
1000
=
0.45
Support(X→Y) = 450 / 1000 = 0.45
Support(X→Y)=450/1000=0.45
2)规则 “茶叶→咖啡” 表示 “购买茶叶的顾客中也购买了咖啡的概率”,于是,”茶叶→咖啡“的置信度为
C
o
n
f
i
d
e
n
c
e
(
X
→
Y
)
=
450
/
500
=
0.90
Confidence(X→Y) = 450 / 500 = 0.90
Confidence(X→Y)=450/500=0.90
3)规则 “茶叶→咖啡” 表示 “购买茶叶的顾客中也购买了咖啡的概率,与无论买不买茶叶但买了咖啡的概率之比”,于是,”茶叶→咖啡“的提升度为
L
i
f
t
(
X
→
Y
)
=
C
o
n
f
i
d
e
n
c
e
(
X
→
Y
)
/
P
(
Y
)
=
0.90
/
(
(
450
+
450
)
/
1000
)
=
0.90
/
0.90
=
1
Lift(X→Y) = Confidence(X→Y) / P(Y) = 0.90 / ((450+450) / 1000) = 0.90 / 0.90 = 1
Lift(X→Y)=Confidence(X→Y)/P(Y)=0.90/((450+450)/1000)=0.90/0.90=1
结论:由于提升度
L
i
f
t
(
X
→
Y
)
=
1
{Lift(X→Y) =1}
Lift(X→Y)=1,表示 X 与 Y 相互独立,即是否有X,对于Y的出现无影响。也就是说,是否购买茶叶,与有没有购买咖啡无关联。即规则”茶叶→咖啡“不成立,或者说关联性很小,几乎没有,虽然它的支持度和置信度都很高,但它不是一条有效的关联规则。
2.2 强关联规则
如果规则 R : X → Y {R: X→Y} R:X→Y 满足 ${Support(X→Y)} >= MinSup $ 且 C o n f i d e n c e ( X → Y ) > = M i n C o n f {Confidence(X→Y)} >= MinConf Confidence(X→Y)>=MinConf ,称关联规则 R : X → Y {R: X→Y} R:X→Y 为强关联规则,否则称为弱关联规则。其中 M i n S u p 、 M i n C o n f {MinSup 、MinConf} MinSup、MinConf 分别是 最小支持度和最小置信度,二者是由用户根据数据分布和经验指定的。
在强关联规则里,也分 有效的强关联规则 和 无效的强关联规则 。
-
如果 L i f t ( X → Y ) > 1 {Lift(X→Y)>1} Lift(X→Y)>1,则规则“X→Y”是有效的强关联规则。
-
如果 L i f t ( X → Y ) < = 1 {Lift(X→Y) <=1} Lift(X→Y)<=1,则规则“X→Y”是无效的强关联规则。
-
特别地,如果 L i f t ( X → Y ) = 1 {Lift(X→Y) =1} Lift(X→Y)=1,则表示X与Y相互独立。
3. 关联分析过程
从以上的分析可以得知,关联规则挖掘是从事务集合中挖掘出这样的关联规则{X->Y}:
- 它的支持度和置信度要大于最小阈值( M i n S u p 、 M i n C o n f {MinSup 、MinConf} MinSup、MinConf ),当然这个最小阈值是由用户指定的,可以根据数据分布和经验;
- 同时他的提升度最好是大于1的(具体值根据实际情况设定,例如:3、5均可),即是有效强关联规则。
关联分析的主要过程:
(1)数据预处理,首先对数据进行清洗,清洗掉那些公共的项目。(此步依据具体项目而定)
(2)根据 支持度(support),从事务集合中 找出频繁项集(使用算法:Apriori算法,FP-Growth算法)
(3)根据 置信度(confidence),从频繁项集中 找出强关联规则(置信度阈值需要根据实验或者经验而定)
(4)根据 提升度(lift),从强关联规则中筛 选出有效的强关联规则(提升度的设定需要经过多次试验确定)
关联分析的两个主要过程:
- 从数据集中 寻找频繁项集
- 从频繁项集中 生成关联规则
3.1 寻找频繁项集
3.1.1 不使用 Apriori 算法生成频繁项集
算法步骤:
(1)遍历项目之间的所有可能的组合(包括单个项目的组合),每种组合构成一个项集。
(2)针对每一个项集 A {A} A,计算 A {A} A 的支持度 = A 出现的次数 事务总数 {A出现的次数 \over 事务总数} 事务总数A出现的次数。
(3)返回所有支持度大于指定阈值的项集,即频繁项集。
以上的理论是没有问题的。但是,却很难在实际应用中使用。因为,对象之间任意组合构成的项集,数量可能非常大。例如,4个不同的项目,就可以构成15种组合。而对于含有N个对象的数据集,总共可构成 2 N − 1 {2^N -1} 2N−1 种组合,这是一个非常大的数字。为了降低计算量,我们使用 Apriori 算法进行优化。
3.1.2 使用 Apriori 算法生成频繁项集
3.1.2.1 Apriori 算法原理解释
(1)如果一个项集是频繁项集,则其所有子集(非空)也是频繁项集。原理最好给出证明
(2)如果一个项集(非空)是非频繁项集,则其所有父集也是非频繁项集。
3.1.2.2 Apriori 算法步骤
- 扫描数据集,从数据集中生成候选 k {k} k 项集 C k {C_k} Ck ( k {k} k 从 1 开始)
- 计算 C k {C_k} Ck 中每个项集的支持度,删除低于阈值的项集,构成频繁项集 L k {L_k} Lk
- 将频繁项集 L k {L_k} Lk 中的元素进行组合,生成候选 k + 1 {k + 1} k+1 项集 C k + 1 {C_{k+1}} Ck+1
- 重复步骤2、3,直到满足以下两个条件之一时,算法结束
- 频繁 k {k} k 项集无法组合生成候选 k + 1 {k + 1} k+1 项集
- 所有候选 k {k} k 项集支持度都低于指定的阈值(最小支持度),无法生成频繁 k {k} k 项集
说明:
- C k {C_k} Ck :所有的候选 k {k} k 项集(包含 k {k} k 个项目的项集)
- L k {L_k} Lk :所有的频繁 k {k} k 项集(包含 k {k} k 个项目的项集,且每个项目均不低于指定的阈值)
3.2 生成关联规则
当产生频繁项集后,将每个频繁项集拆分成 两个非空子集 ,然后使用这两个非空子集,就可以 构成关联规则 。当然,一个频繁项集拆分成两个非空子集可能有很多种方式,我们需要考虑到每一种情况。
例如:频繁项集 {1, 2, 3} 可以拆分为:
{1 -> 2, 3}、{2 -> 1, 3}、{3 -> 1, 2}
{1, 2 -> 3}、{1, 3 -> 2}、{2, 3 -> 1}
然后,我们针对每一个关联规则,分别计算其置信度,仅保留置信度 C o n f i d e n c e ( X → Y ) > = M i n C o n f {Confidence(X→Y)} >= MinConf Confidence(X→Y)>=MinConf 的关联规则,即强关联规则。
4. 总结和展望
关联规则挖掘经过长期的研究与发展,已在 频繁模式挖掘算法 的设计及优化方面日趋成熟,广泛应用于互联网、金融、生物信息等领域。但该领域在未来研究的方向仍是具有挑战性的工作:
- 设计更高效的挖掘算法;
- 实现用户与挖掘系统的交互,开发易于理解的可视化界面;
- 结合特殊领域完善 扩展型挖掘算法,如周期模式挖掘等;
- 拓展关联规则的应用领域;
5. 参考链接
[1] 机器学习笔记——关联规则
[2] 数据发掘之关联规则学习(一) - 2122的文章 - 知乎
[4] 关联规则与强关联规则计算
[5] 崔妍,包志强.关联规则挖掘综述[J].计算机应用研究,2016,33(02):330-334.
6. 授课时注意
讲解思路从提出一个问题出发,然后引出名词定义、算法步骤。这样才是人们学习新知识的思维方式。
不要上来就讲解名词、算法,这样同学们不容易被带入,完全是强塞式教学。