Python数据分析与可视化案例教程-第7章 关联规则分析与可视化详解版_第1页
Python数据分析与可视化案例教程-第7章 关联规则分析与可视化详解版_第2页
Python数据分析与可视化案例教程-第7章 关联规则分析与可视化详解版_第3页
Python数据分析与可视化案例教程-第7章 关联规则分析与可视化详解版_第4页
Python数据分析与可视化案例教程-第7章 关联规则分析与可视化详解版_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2026.6.5第7章关联规则分析与可视化《Python数据分析与可视化》目录01关联规则挖掘概述02Apriori算法03FP增长算法关联规则挖掘(AssociationRuleMining)是数据挖掘领域里最重要、最经典的分支之一,简单说就是‌从海量交易数据中,自动发现“如果买了A,那么很可能也会买B”这种隐含规律‌的技术。它告诉你哪些东西天生就该在一起,帮商家做捆绑销售、帮程序员做智能推荐。

最经典的案例

沃尔玛的啤酒与尿布的故事。沃尔玛超市通过分析线下门店一年多的销售交易数据,发现购买婴儿尿布的顾客多是年轻父亲,他们在买尿布时往往会顺便购买啤酒,于是超市将尿布和啤酒摆放在相邻区域销售,最终两种商品的销量同时大幅提升。1关联规则挖掘概述假设你是一家超市的数据分析师,你想要了解顾客的购物习惯。你有一个包含所有交易数据的数据库,每一笔交易都记录了顾客购买的商品。关联规则是你在分析中发现的规律或者模式。比如,你可能会发现“如果顾客购买了牛奶,那么他们也很可能购买面包”这样一个规则。这个规则说明了牛奶和面包之间存在一种关联性。关联分析则是你用来发现这些规则的过程。从上表所示的数据中可以得到如下关联规则:{牛奶}→{面包}该规则表明牛奶和面包的销售之间存在着很强的联系,因为许多顾客在购买牛奶的同时也购买面包。1关联规则挖掘概述1关联规则挖掘概述关于关联规则的几个概念:项集:项(比如订单中的每一个商品)的集合,包含k个项的项集称为k-项集。支持度(support):指某个项集在所有事务中出现的频率。支持度是个百分比,它指的是某个商品组合出现的次数与总次数之间的比例。在这个例子中,可以看到“牛奶”出现了4次,那么这5笔订单中“牛奶”的支持度就是4/5=0.8。同样“牛奶+面包”出现了3次,那么这5笔订单中“牛奶+面包”的支持度就是3/5=0.6。支持度越高,说明这两个物品一起购买的概率越大。频繁项集:如果项集的支持度满足预定义的最小支持度阈值,则称项集是频繁项集。1关联规则挖掘概述关于关联规则的几个概念:置信度:当前提(前件)发生时,结论(后件)发生的概率。Confidence(牛奶→啤酒)=(牛奶+啤酒)的次数/(牛奶)的次数=2/4=0.5,代表如果你购买了牛奶,有多大的概率会购买啤酒。关联规则:是指在一个数据集中发现的频繁项集之间的关系。在超市的例子中,我们可以得到一条关联规则:“如果顾客购买了尿布,那么顾客很可能也会购买啤酒。”关联规则挖掘:在给定事务的集合T中,找出支持度大于等于支持度阈值minsup并且置信度大于等于置信度阈值minconf的所有关联规则。1关联规则挖掘概述关联规则挖掘可以分为两步:频繁项集产生,其目标是发现满足最小支持度阈值的所有项集,即频繁项集。规则产生,其目标是从上一步发现的频繁项集中提取所有高置信度(大于等于最小置信度阈值)的关联规则,即强关联规则。

在上述两个步骤中,第一步骤是关键,它将影响整个关联规则挖掘算法的效率。因此,关联规则挖掘算法的核心是频繁项集产生。目录01关联规则挖掘概述02Apriori算法03FP增长算法‌Apriori算法‌是数据挖掘领域用于‌关联规则挖掘‌的经典算法,核心目标是从交易类数据(如零售小票、访问记录)中找出满足最小支持度的频繁项集,再基于频繁项集生成有价值的关联规则。它基于先验性质,采用迭代的方法挖掘频繁项集,先搜索出候选1项集及对应的支持度,剪枝去掉低于支持度的1项集,得到频繁1项集。然后对剩下的频繁1项集进行连接,得到候选的2项集,剪枝去掉低于支持度的候选2项集,得到真正的频繁二项集,以此类推,迭代下去,直到无法找到频繁k+1项集为止,对应的频繁k项集的集合即为算法的输出结果。,算法原理简单易实现,最早应用于零售购物篮分析,如今广泛用在商业分析、网络安全、生物信息挖掘等领域,2Apriori算法-AP先验算法2Apriori算法使用支持度对候选集进行剪枝基于如下先验性质:先验原理性质1:频繁项集的子集必为频繁项集。如果{B,C}是频繁的,那么{B},{C}也一定是频繁的。性质2:非频繁项集的超集一定是非频繁的。如果{A,B}是非频繁的,那么{A,B,C},{A,B,C,D}也一定是非频繁的。2Apriori算法先验原理Apriori算法通过先验性质‌的核心思想,显著减少了候选频繁项集的规模,从而有效提升了计算效率。通过图7-1可以看出,如果D不是频繁项集,包含D的项(D的超集)也不是频繁项集。这样筛选掉很多不频繁的项集。这条性质是Apriori剪枝的依据,也是算法名字“先验”的来源——我们提前用这条性质砍掉不可能成为频繁项集的候选,避免无效计算,解决暴力枚举的“组合爆炸”问题。2Apriori算法Apriori采用“逐层搜索、迭代生成”的思路:步骤1:初始化参数,生成频繁1项集。1.提前设置最小支持度、最小置信度;2.第一次扫描交易数据库,统计所有单个商品(长度为1的项集)的支持度;3.去掉支持度低于最小阈值的商品,剩余就是频繁1项集L_1。步骤2:迭代生成更长的频繁项集(核心循环)。从k=2开始,重复执行「连接→剪枝→筛选」三步,直到无法生成新的频繁项集为止:1.连接:生成候选k项集,用上一轮得到的频繁(k-1)项集,两两连接生成候选k项集C_k。为避免重复,要求两个频繁(k-1)项集的前(k-2)个元素相同,仅最后一个元素不同,连接后得到长度为k的候选项集。2.剪枝:淘汰无效候选,根据先验性质:如果候选k项集的任意一个(k-1)子集不在L_(k-1)中,说明这个子集本身是非频繁的,因此整个候选k项集一定是非频繁的,直接从C_k中删除,无需后续统计。3.筛选:得到频繁k项集。扫描数据库,统计剩余候选k项集的支持度,去掉低于最小支持度的候选,剩余就是频繁k项集L_k,进入下一轮迭代。步骤3:生成强关联规则。迭代结束后,得到所有频繁项集,对每个频繁项集:1.生成所有非空真子集A,剩余部分记为B,得到候选规则;2.计算规则的置信度,保留置信度大于等于最小置信度的规则,即为最终的强关联规则。2Apriori算法-频繁项集产生我们用某社区便利店的5笔交易数据,按照上述流程完整走一遍,最小支持度设为0.6(即至少出现在5*0.6=3笔交易中,最小次数),最小置信度设为0.7。第一步:生成频繁1项集L_1。扫描整个数据集,统计每个单品的支持度。去掉可乐和鸡蛋,得到L_1={{尿布},{牛奶},{面包},{啤酒}},完成第一次筛选。2Apriori算法-频繁项集产生第二步:生成频繁2项集L_2。1.连接:L_1两两连接,得到6个候选2项集C_2;2.剪枝:所有候选2项集的1项子集都在L_1中,无剪枝;3.筛选:遍历所有交易记录,统计C_2中各项支持度后得到L_2,最终包含上面4个频繁2项集,6个候选淘汰2个。2Apriori算法-频繁项集产生第三步:生成频繁3项集L_3,K=31.连接:L_2中各项两两连接,根据连接规则,两个频繁2项集的前k-2=1个元素需相同,最后一个不同才能连接,最终C₃={{尿布,牛奶,面包},{尿布,牛奶,啤酒},{尿布,面包,啤酒}};2.剪枝(核心演示):检查每个候选3项集的所有2项子集是否都在L₂中:{尿布,牛奶,面包}:子集{尿布,牛奶}、{尿布,面包}、{牛奶,面包}均在L₂中,保留{尿布,牛奶,啤酒}:子集{尿布,牛奶}、{尿布,啤酒}在L₂中,但{牛奶,啤酒}不在L₂中,根据先验原理,直接剪枝淘汰.{尿布,面包,啤酒}:子集{尿布,面包}、{尿布,啤酒}在L₂中,但{面包,啤酒}不在L₂中,直接淘汰。3.筛选:统计保留的{尿布,牛奶,面包},出现次数为3,支持度0.6,满足要求,得到L_3={{尿布,面包,啤酒}}。继续迭代无法生成符合要求的频繁4项集,循环结束,我们得到了所有频繁项集。2Apriori算法-关联规则的产生关联规则产生的原理关联规则的产生就是在由频繁项集的子集组成的所有关联规则中,找出所有置信度大于等于最小置信度的强关联规则。

2Apriori算法-

关联规则的产生基于L₂和L₃,生成满足置信度阈值的强关联规则:从L₂生成的规则‌:尿布

牛奶:置信度=4/5=0.8尿布

面包:置信度=4/5=0.8尿布

啤酒:置信度=3/5=0.6(不满足阈值,淘汰)牛奶

面包:置信度=3/4=0.75从L₃生成的规则‌:{尿布,牛奶}→

面包:置信度=3/4=0.75{尿布,面包}→

牛奶:置信度=3/4=0.75{牛奶,面包}→

尿布:置信度=3/3=1.0业务含义:同时购买牛奶和面包的顾客,100%会购买尿布,对商家的陈列指导价值非常高。L_3:{尿布,牛奶,面包}|3|0.6|感谢观看Thankyou目录01关联规则挖掘概述02Apriori算法03FP增长算法3FP增长算法-频繁模式增长算法FP-Growth算法对传统先验算法进行优化,先验算法需要多次扫描数据库、生成大量候选集。FP算法采用分治策略,核心思路是通过构建‌频繁模式树(FP树)‌压缩存储事务数据,保留项集的关联信息,再通过递归挖掘的方式得到所有频繁项集,无需生成候选集。核心设计优势:FP算法只需要对原始数据库进行两次扫描:第一次统计项的支持度并筛选频繁项;第二次构建FP树,后续挖掘过程都在内存中基于FP树完成,大幅减少了I/O开销和候选集生成的冗余计算,大规模数据处理效率远高于先验算法。3FP增长算法FP-Tree(频繁模式树)‌:这是FP算法的核心数据结构,是一种压缩的前缀树,用来存储所有事务中的频繁项信息,通过共享相同前缀来压缩数据。‌条件模式基‌:以我们要挖掘的频繁项作为后缀,FP树中所有通向这个后缀的前缀路径集合,就是这个项的条件模式基。‌条件FP-Tree‌:基于条件模式基,按照FP-树的构建规则生成的新树,我们会在条件树上递归挖掘频繁项集。核心概念:步骤1:构建FP树步骤2:从FP树中递归挖掘频繁项集3FP增长算法-步骤1步骤1:构建FP-Tree构建树总共需要两次扫描数据集,具体流程如下:‌第一次扫描数据集‌:遍历所有事务,统计每个项的支持度计数,筛选掉支持度低于最小阈值的非频繁项,将剩余的频繁1-项集按照支持度从高到低排序,得到有序的项头表——这个表除了存项和支持度,还会用链表链接FP树中所有同名的节点,方便后续快速访问。‌如图7-5所示,现有10条数据,第一次扫描数据并对1项集计数,发现O、I、L、J、P、M、N都只出现一次,支持度低于20%的阈值(次数小于2),因此它们不会出现在项头表中。剩下的A、C、E、G、B、D、F按照支持度(次数)的大小降序排列,组成了项头表。3FP增长算法-步骤1‌第二次扫描数据集‌:逐个处理每个事务:第一步先过滤掉事务里的非频繁项。第二步按照项头表的降序顺序,对事务剩余的项重新排序。第三步把排序好的项依次插入到以NULL为根节点的FP树中:如果当前节父点已经存在和当前待插入项同名的子节点,就给这个子节点的计数加1;如果不存在,就新建一个节点,计数初始化为1,把它挂到当前父节点下,同时通过项头表的链表把这个新节点和同名称的节点链接起来;然后依次把剩余的项插入到当前节点的子树中。下面我们结合具体的实例说明3FP增长算法-步骤1‌第二次扫描数据集‌:处理第一个事务:首先对于待插入数据剔除非频繁1项集,并按照支持度降序排列。比如第一条数据,里面O是非频繁1项集,因此被剔除,只剩下了ABCEF。按照支持度降序排序,它变成了ACEBF。其他的数据项以此类推。为什么排序?这是为了后面的FP树的建立时,可以尽可能的共用祖先节点。有了项头表和排序后的数据集,就可以开始FP树的建立了。首先,插入第一条数据ACEBF,依次插入各项。从根节点NULL开始,根没有A子节点,新建A节点,计数1,挂到当前父节点下,同时通过项头表的链表把这个新节点和同名称的节点链接起来;然后A节点没有C子节点,新建C节点,计数1,挂到当前父节点下,同时通过项头表的链表把这个新节点和同名称的节点链接起来;以此类推,依次插入剩余的节点。3FP增长算法-步骤1‌第二次扫描数据集‌:处理第二个事务:同样处理第二条数据,剔除非频繁1项集,并按照支持度降序排列,得到ACG。插入第二条处理后的数据ACG,依次插入各项。同样,从根节点NULL开始,根有A节点,A计数加1变成2;A已有C节点,C计数加1变成2;C没有G子节点,新建G节点计数1,挂到当前父节点C下,同时通过项头表的链表把这个新节点和同名称的节点链接起来。3FP增长算法-步骤1‌第二次扫描数据集‌:处理其余事务:以此类推,可以使用同样的方法依次更新后面8条数据。最终建立完整的FP树,右图所示。我们可以发现,整个构建过程,就是通过共享前缀来压缩数据,大量事务如果开头的项相同,就只存一份前缀,大大节省了存储空间。3FP增长算法-步骤2‌步骤2:从FP树中递归挖掘频繁项集递归挖掘频繁项集是根据"条件模式基→条件FP树→递归挖掘"的思路,将挖掘全局频繁项集的原问题,逐层分解为多个更小的局部子问题。把原始FP树分解为各后缀节点对应的条件FP树。核心理论依据是:‌‌任何频繁项集一定以某个单项作为后缀,所有包含该后缀的频繁项集,都可以从该后缀对应的前缀路径中挖掘得到‌。从‌项头表的末尾‌开始,自底向上逐个处理每一项:步骤1:处理当前单个频繁项,获得初始频繁1项集‌步骤2:收集当前项的条件模式基,也就是所有前缀路径。步骤3:过滤非频繁项,构建当前项的条件FP树步骤4:根据生成的条件FP树状态分支处理,判断终止或继续递归挖掘下面我们结合具体的实例说明3FP增长算法-步骤2首先从支持度最小的F节点开始,寻找F节点的条件模式基。F在FP树中只有一个节点,沿着它的父节点一路向上回溯到根节点,得到一条前缀路径,祖先节点计数更新为叶子节点F的计数。因此F节点的条件模式基为{A:2,C:2,E:2,B:2},它是原始事务集的子集,作为新建FP树的事务集。参照原始FP树构建规则插入生成新树,得到F节点的条件FP树。如图7-9右侧所示。生成的F节点的条件FP树‌只有一条单路径‌,直接枚举这条路径上所有节点的所有非空组合,把每个组合和F拼在一起,得到新的更大的频繁项集(每个新组合的支持度取组合中节点的最小次数),通过它很容易得到F的频繁项集:{F:2},{A:2,F:2},{C:2,F:2},{E:2,F:2},{B:2,F:2},{A:2,C:2,F:2},{A:2,E:2,F:2}...此处不再一一列出。最大的频繁项集为频繁5项集:{A:2,C:2,E:2,B:2,F:2}。3FP增长算法-步骤2重新统计条件模式基里每个项的总出现次数,把次数低于最小支持度的项全部删掉,得到精简后的条件模式基{A:2,C:2},作为新建

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论