5. 关联规则挖掘

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(XY)=P(X,Y)/P(I)=P(XY)/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(XY)=P(YX)

  • 提升度(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(XY)=P(YX)/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/7C.count/A.count=3/4

在这里插入图片描述

提升度示例:

有1000名顾客购买年货,A组有500人购买茶叶,有450人购买咖啡;B组有0人购买茶叶,有450人购买咖啡。

购买茶叶购买咖啡
A组(500人)500450
B组(500人)0450

试求解

​ 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(XY)=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(XY)=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(XY)=Confidence(XY)/P(Y)=0.90/((450+450)/1000)=0.90/0.90=1
结论:由于提升度 L i f t ( X → Y ) = 1 {Lift(X→Y) =1} Lift(XY)=1,表示 X 与 Y 相互独立,即是否有X,对于Y的出现无影响。也就是说,是否购买茶叶,与有没有购买咖啡无关联。即规则”茶叶→咖啡“不成立,或者说关联性很小,几乎没有,虽然它的支持度和置信度都很高,但它不是一条有效的关联规则。

2.2 强关联规则

如果规则 R : X → Y {R: X→Y} R:XY 满足 ${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(XY)>=MinConf ,称关联规则 R : X → Y {R: X→Y} R:XY强关联规则,否则称为弱关联规则。其中 M i n S u p 、 M i n C o n f {MinSup 、MinConf} MinSupMinConf 分别是 最小支持度和最小置信度,二者是由用户根据数据分布和经验指定的。

在强关联规则里,也分 有效的强关联规则无效的强关联规则

  • 如果 L i f t ( X → Y ) > 1 {Lift(X→Y)>1} Lift(XY)>1,则规则“X→Y”是有效的强关联规则

  • 如果 L i f t ( X → Y ) < = 1 {Lift(X→Y) <=1} Lift(XY)<=1,则规则“X→Y”是无效的强关联规则

  • 特别地,如果 L i f t ( X → Y ) = 1 {Lift(X→Y) =1} Lift(XY)=1,则表示X与Y相互独立

3. 关联分析过程

从以上的分析可以得知,关联规则挖掘是从事务集合中挖掘出这样的关联规则{X->Y}:

  • 它的支持度和置信度要大于最小阈值( M i n S u p 、 M i n C o n f {MinSup 、MinConf} MinSupMinConf ),当然这个最小阈值是由用户指定的,可以根据数据分布和经验;
  • 同时他的提升度最好是大于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} 2N1 种组合,这是一个非常大的数字。为了降低计算量,我们使用 Apriori 算法进行优化。

在这里插入图片描述

3.1.2 使用 Apriori 算法生成频繁项集
3.1.2.1 Apriori 算法原理解释

(1)如果一个项集是频繁项集,则其所有子集(非空)也是频繁项集。原理最好给出证明

(2)如果一个项集(非空)是非频繁项集,则其所有父集也是非频繁项集。

3.1.2.2 Apriori 算法步骤
  1. 扫描数据集,从数据集中生成候选 k {k} k 项集 C k {C_k} Ck k {k} k 从 1 开始)
  2. 计算 C k {C_k} Ck 中每个项集的支持度,删除低于阈值的项集,构成频繁项集 L k {L_k} Lk
  3. 将频繁项集 L k {L_k} Lk 中的元素进行组合,生成候选 k + 1 {k + 1} k+1 项集 C k + 1 {C_{k+1}} Ck+1
  4. 重复步骤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(XY)>=MinConf 的关联规则,即强关联规则。

4. 总结和展望

关联规则挖掘经过长期的研究与发展,已在 频繁模式挖掘算法 的设计及优化方面日趋成熟,广泛应用于互联网、金融、生物信息等领域。但该领域在未来研究的方向仍是具有挑战性的工作:

  • 设计更高效的挖掘算法;
  • 实现用户与挖掘系统的交互,开发易于理解的可视化界面;
  • 结合特殊领域完善 扩展型挖掘算法,如周期模式挖掘等;
  • 拓展关联规则的应用领域;

5. 参考链接

[1] 机器学习笔记——关联规则

[2] 数据发掘之关联规则学习(一) - 2122的文章 - 知乎

[3] 关联分析中的支持度、置信度和提升度

[4] 关联规则与强关联规则计算

[5] 崔妍,包志强.关联规则挖掘综述[J].计算机应用研究,2016,33(02):330-334.

6. 授课时注意

讲解思路从提出一个问题出发,然后引出名词定义、算法步骤。这样才是人们学习新知识的思维方式。

不要上来就讲解名词、算法,这样同学们不容易被带入,完全是强塞式教学。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
数据挖掘关联规则挖掘是一种常见的数据挖掘技术,用于发现数据集中的频繁项集和关联规则。频繁项集是指在数据集中经常出现在一起的一组项,而关联规则是指两个或多个项之间的关系。关联规则通常采用“如果...那么...”的形式表示,例如“如果顾客购买了牛奶和面包,那么他们也可能购买黄油”。 常见的关联规则挖掘算法包括Apriori、FP-growth、Eclat和ORAR等。Apriori算法是一种基于频繁项集的挖掘算法,它通过迭代的方式生成候选项集,并使用剪枝技术来减少候选项集的数量。FP-growth算法是一种基于树结构的挖掘算法,它通过构建一棵FP树来发现频繁项集。Eclat算法是一种基于垂直数据格式的挖掘算法,它通过交换和合并项集来发现频繁项集。ORAR算法是一种基于关联规则的挖掘算法,它通过对关联规则进行排序和过滤来发现有用的规则。 对于给定的数据集,关联规则挖掘算法通常包括以下步骤: 1. 数据预处理:包括数据清洗、数据变换和数据规约等步骤。 2. 频繁项集挖掘:使用Apriori、FP-growth、Eclat等算法来发现频繁项集。 3. 关联规则生成:对于每个频繁项集,生成所有可能的关联规则。 4. 关联规则评估:使用支持度、置信度、提升度等指标来评估关联规则的质量。 5. 关联规则筛选:根据指定的阈值来筛选出有用的关联规则。 <<请问关联规则挖掘有哪些应用场景?>> <<关联规则挖掘算法有哪些优缺点?>> <<如何评估关联规则的质量?>>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

helloooi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值