首页 / 资讯中心 / 文章详情

【模式识别与机器学习(18)】关联规则:支持度与置信度-Apriori算法-FP-Growth算法-购物篮分析

【模式识别与机器学习(18)】关联规则:支持度与置信度-Apriori算法-FP-Growth算法-购物篮分析 ★ FEATURED ARTICLE
文章目录本文内容一览快速理解总结口诀一、支持度与置信度关联规则的度量基础1.1 什么是支持度1.2 什么是置信度1.3 频繁项集与强关联规则二、Apriori算法基于先验原理的高效挖掘2.1 先验原理减少候选项集的核心机制2.2 逐层搜索系统发现频繁项集2.3 候选项集生成与剪枝2.4 支持度计数优化三、FP-Growth算法避免候选项集生成的直接挖掘3.1 FP树压缩数据库的频繁模式树相同内容只存储一次3.2 条件模式基与递归挖掘四、实战场景电商购物篮分析4.1 业务痛点识别4.2 方案拆解用核心知识点解决问题4.3 长期适配策略总结本文内容一览快速理解关联规则是什么发现数据中什么与什么相伴的模式通过支持度和置信度两个核心指标从海量交易数据中自动挖掘有价值的关联模式支持度vs置信度支持度衡量规则出现的频率是否常见置信度衡量规则的可靠性是否可信两者结合才能发现真正有价值的关联规则Apriori如何工作通过先验原理频繁项集的子集一定是频繁的减少候选项集使用逐层搜索系统地发现所有频繁项集适合频繁项集长度较短的场景FP-Growth的优势通过构建FP树压缩数据库避免候选项集生成直接产生频繁项集适合频繁项集长度较长的场景如何选择算法频繁项集长度较短≤3项→Apriori频繁项集长度较长3项→FP-Growth数据密集→FP-Growth数据稀疏→Apriori如何设置参数最小支持度过滤偶然出现的规则建议从20%开始最小置信度过滤不可靠的规则建议从60%开始根据业务效果调整购物篮分析实战数据准备事务数据库格式→发现频繁项集Apriori或FP-Growth→生成强关联规则满足最小置信度→业务应用推荐、搭配销售如何评估规则计算支持度和置信度计算提升度lift判断规则是否有趣使用卡方检验判断统计显著性过滤误导性规则总结口诀核心指标支持度→是否常见置信度→是否可信Apriori先验原理→减少候选逐层搜索→系统发现FP-GrowthFP树→压缩数据递归挖掘→直接产生算法选择短项集→Apriori长项集→FP-Growth参数设置支持度20%起置信度60%起根据效果调整一、支持度与置信度关联规则的度量基础[!NOTE] 关键点总结支持度衡量规则出现的频率是否常见置信度衡量规则的可靠性是否可信两者结合才能发现真正有价值的关联规则。核心指标支持度项集在事务数据库中出现频率 包含项集的事务数 / 总事务数判断规则是否常见置信度规则的可信程度 支持度(X∪Y) / 支持度(X)判断规则是否可靠最小支持度minsup用户定义的阈值过滤掉偶然出现的规则最小置信度minconf用户定义的阈值过滤掉不可靠的规则决策标准支持度低 → 规则可能只是偶然出现不值得关注置信度低 → 规则不可靠不能用于业务决策只有同时满足最小支持度和最小置信度的规则才是强关联规则。1.1 什么是支持度支持度的定义包含项集X的事务个数与总事务个数之比即Support ( X ) ∣ { d ∈ D ∣ X ⊆ d } ∣ ∣ D ∣ \text{Support}(X) \frac{|\{d \in D | X \subseteq d\}|}{|D|}Support(X)∣D∣∣{d∈D∣X⊆d}∣​其中D是事务数据库d是事务。如果支持度太低说明这个规则只是偶然出现没有统计意义不值得作为业务决策的依据。例如在购物篮分析中如果买面包的人也买牛奶只出现了1%这个规则对业务价值很小。实际应用示例在电商购物篮分析中如果买手机的人也买手机壳的支持度是60%说明60%的购物记录中同时包含手机和手机壳这个规则值得关注。如果支持度只有1%说明这种情况很少见可能只是偶然。决策标准支持度 minsup → 规则不值得关注支持度 ≥ minsup → 规则值得进一步分析支持度太低 → 可能是偶然出现不值得作为业务决策依据。适合判断规则是否常见但不能判断规则是否可靠。需要结合置信度才能发现强关联规则。1.2 什么是置信度置信度就像统计买面包的人中有多少比例也买了牛奶如果100个买面包的人中有80个也买了牛奶说明这个规则很可靠。就像统计下雨天带伞的人的比例如果100个下雨天中有90个带伞这个规则就很可靠。置信度定义为既包含X也包含Y的事务个数与包含X的事务个数之比即Confidence ( X → Y ) Support ( X ∪ Y ) Support ( X ) \text{Confidence}(X \rightarrow Y) \frac{\text{Support}(X \cup Y)}{\text{Support}(X)}Confidence(X→Y)Support(X)Support(X∪Y)​。置信度衡量规则的可信程度判断当条件X出现时结果Y出现的概率。支持度只能判断规则是否常见但不能判断规则是否可靠。例如买面包的人也买牛奶的支持度是60%但如果买面包的人中只有30%买了牛奶这个规则就不够可靠。置信度告诉我们当条件X出现时结果Y出现的概率如果置信度高说明这个规则可靠。决策标准置信度 minconf → 规则不可靠置信度 ≥ minconf → 规则可靠可以用于业务决策置信度太低 → 规则不可靠不能用于业务决策。1.3 频繁项集与强关联规则频繁项集就像经常一起出现的商品组合强关联规则就像如果买了A很可能也买B这样的可靠规则。通过最小支持度阈值发现频繁项集通过最小置信度阈值从频繁项集中提取强关联规则。故这里有两个发现强关联关系的步骤第一步发现满足最小支持度阈值的所有项集频繁项集第二步从频繁项集中提取满足最小置信度阈值的规则强关联规则如果直接计算所有可能的规则计算复杂度太高包含d个项的数据集可以产生3 d − 2 d 1 1 3^d - 2^{d1} 13d−2d11条规则。通过两步法先过滤掉不频繁的项集再从中提取可靠的规则可以大幅降低计算复杂度。商品推荐示例在电商购物篮分析中如果面包、牛奶是频繁项集支持度≥60%且面包→牛奶的置信度≥75%则生成强关联规则买面包的人也买牛奶。这个规则可以用于商品推荐当用户购买面包时推荐牛奶。应用边界适合发现布尔关联规则项之间是否存在关联但不适合发现定量关联规则项之间的数量关系。需要根据业务需求设置合适的阈值。二、Apriori算法基于先验原理的高效挖掘[!NOTE] 关键点总结Apriori算法通过先验原理频繁项集的子集一定是频繁的大幅减少候选项集数量使用逐层搜索方法系统地发现所有频繁项集。核心机制先验原理如果一个项集是频繁的则它的所有子集也一定是频繁的如果一个项集是非频繁的则它的所有超集也一定是非频繁的利用支持度的反单调性逐层搜索从频繁1项集开始逐层生成频繁k项集直到不能再找到频繁项集候选项集生成通过合并频繁(k-1)项集生成候选k项集仅当前(k-1)个项相同时才合并候选项集剪枝使用先验原理删除包含非频繁子集的候选项集决策标准数据量大 → Apriori算法通过先验原理减少候选项集需要发现所有频繁项集 → Apriori算法频繁项集长度较短≤3项 → Apriori算法效果好频繁项集长度较长3项 → 考虑FP-Growth算法。2.1 先验原理减少候选项集的核心机制先验原理就像如果一个人不买面包那他肯定也不会买面包牛奶的组合利用这个逻辑可以提前排除很多不必要的计算。就像如果一个人不会游泳那他肯定不会参加游泳比赛不需要考虑他参加游泳比赛的可能性。本质原理先验原理基于支持度的反单调性一个项集的支持度绝不会超过它的子集的支持度。因此如果一个项集是非频繁的支持度 minsup则它的所有超集也一定是非频繁的不需要计算支持度就可以直接删除。减低计算复杂度如果不使用先验原理需要计算所有可能的项集包含d个项的数据集可以产生2 d − 1 2^d - 12d−1个项集计算复杂度是指数级的。使用先验原理后只需要计算频繁项集可以大幅降低计算复杂度。例如枚举所有项集到3项集的蛮力策略将产生C ( 6 , 1 ) C ( 6 , 2 ) C ( 6 , 3 ) 41 C(6,1) C(6,2) C(6,3) 41C(6,1)C(6,2)C(6,3)41个候选使用先验原理后减少为C ( 6 , 1 ) C ( 4 , 2 ) 1 13 C(6,1) C(4,2) 1 13C(6,1)C(4,2)113个候选。实际应用示例在购物篮分析中如果面包不是频繁项集支持度 minsup则面包、牛奶、面包、鸡蛋等所有包含面包的项集都不可能是频繁项集不需要计算支持度就可以直接删除。应用边界适合布尔关联规则挖掘但需要多次扫描数据库每层一次扫描。对于频繁项集长度较长的场景计算复杂度仍然较高。2.2 逐层搜索系统发现频繁项集逐层搜索就像先找单个商品再找两个商品的组合再找三个商品的组合一层一层地发现频繁项集。就像建房子先打地基1项集再建第一层2项集再建第二层3项集。核心作用从频繁1项集开始逐层生成频繁k项集直到不能再找到频繁项集系统地发现所有频繁项集。本质原理Apriori算法使用逐层搜索宽度优先的迭代搜索方法首先扫描数据库累计每个项的计数找出频繁1项集L 1 L_1L1​然后L 1 L_1L1​用于找频繁2项集L 2 L_2L2​L 2 L_2L2​用于找频繁3项集L 3 L_3L3​如此下去直到不能再找到频繁k项集逐层搜索可以系统地控制候选项集的指数增长每层只需要扫描一次数据库计算复杂度可控。如果使用深度优先搜索虽然可以更快地检测到频繁项集边界但需要更多存储空间。实际应用示例在购物篮分析中首先找出频繁1项集如面包、“牛奶”、“鸡蛋”然后找出频繁2项集如面包、牛奶、 “面包、鸡蛋”再找出频繁3项集如面包、牛奶、鸡蛋直到不能再找到频繁项集。应用边界适合发现所有频繁项集但需要多次扫描数据库。对于大规模数据可以通过事务压缩、划分等方法提高效率。决策标准频繁项集长度较短≤3项 → 逐层搜索效果好频繁项集长度较长3项 → 考虑使用深度优先搜索或FP-Growth算法需要发现所有频繁项集 → 逐层搜索只需要发现最大频繁项集 → 考虑深度优先搜索。2.3 候选项集生成与剪枝候选项集生成就像把两个频繁项集合并成一个更大的候选项集候选项集剪枝就像如果合并后的候选项集包含非频繁子集就删除它。就像组合两个小组如果两个小组都合格就合并成一个大组如果合并后的大组包含不合格的小组就删除这个大组。核心作用通过合并频繁(k-1)项集生成候选k项集使用先验原理删除包含非频繁子集的候选项集。本质原理候选项集生成使用F k − 1 × F k − 1 F_{k-1} \times F_{k-1}Fk−1​×Fk−1​方法合并一对频繁(k-1)项集仅当它们的前(k-1)个项都相同时才合并。例如合并A { a 1 , a 2 , . . . , a k − 1 } A \{a_1, a_2, ..., a_{k-1}\}A{a1​,a2​,...,ak−1​}和B { b 1 , b 2 , . . . , b k − 1 } B \{b_1, b_2, ..., b_{k-1}\}B{b1​,b2​,...,bk−1​}如果a i b i a_i b_iai​bi​(i1,2,…,k-2) 且a k − 1 ≠ b k − 1 a_{k-1} \neq b_{k-1}ak−1​bk−1​则合并为{ a 1 , a 2 , . . . , a k − 1 , b k − 1 } \{a_1, a_2, ..., a_{k-1}, b_{k-1}\}{a1​,a2​,...,ak−1​,bk−1​}。候选项集剪枝使用先验原理删除包含非频繁(k-1)项集的候选项集。F k − 1 × F k − 1 F_{k-1} \times F_{k-1}Fk−1​×Fk−1​方法可以避免产生重复的候选项集使用字典序比蛮力方法产生所有k项集和F k − 1 × F 1 F_{k-1} \times F_1Fk−1​×F1​方法可能产生不必要的候选更高效。候选项集剪枝可以大幅减少需要计算支持度的候选项集数量。实际应用示例在购物篮分析中如果面包、牛奶和面包、鸡蛋是频繁2项集且它们的前1个项相同都是面包则合并为候选3项集面包、牛奶、鸡蛋。如果牛奶、鸡蛋不是频繁2项集则删除候选3项集面包、牛奶、鸡蛋因为它包含非频繁子集牛奶、鸡蛋。应用边界适合布尔关联规则挖掘但候选项集生成和剪枝的计算复杂度仍然较高。对于大规模数据可以使用Hash树等方法减少比较次数。2.4 支持度计数优化实际应用示例在购物篮分析中如果候选项集数量很多如1000个使用Hash树可以将候选项集分成多个桶如10个桶每个桶只有100个候选项集事务只需要与同一桶内的候选项集比较比较次数减少10倍。Hash树方法将候选项集划分为不同的桶并存放在Hash树中。在支持度计数期间包含在事务中的项集也散列到相应的桶中只与同一桶内的候选项集进行匹配。例如使用Hash函数h ( p ) p m o d 3 h(p) p \bmod 3h(p)pmod3将候选项集散列到不同的桶中事务中的项集也散列到相应的桶中只与同一桶内的候选项集比较。事务与事务中的项集概念单个 “事务”对应一次完整的购物行为比如一位顾客结账时的购物篮事务中的 “项集”就是这个购物篮里的所有商品组合可以是单个商品、多个商品。事务 1顾客 A 的购物篮{牛奶、面包、鸡蛋} → 这个集合就是事务 1 的项集事务 2顾客 B 的购物篮{可乐、薯片} → 这是事务 2 的项集甚至单个商品 {牛奶}也可以叫事务 1 中的 “1 项集”{牛奶、面包} 是 “2 项集”。适合候选项集数量较多的场景但Hash树的构建和维护需要额外开销。对于候选项集数量很少的场景蛮力方法可能更简单。三、FP-Growth算法避免候选项集生成的直接挖掘[!NOTE] 关键点总结FP-Growth算法通过构建FP树频繁模式树压缩数据库避免候选项集生成直接产生频繁项集适合频繁项集长度较长的场景。核心机制FP树构建将数据库压缩到一棵频繁模式树保留项集关联信息只存储频繁项按支持度降序排列条件模式基为每个频繁项构建条件模式基包含该项的所有路径的前缀条件FP树基于条件模式基构建条件FP树递归挖掘频繁项集决策标准频繁项集长度较长3项 → FP-Growth算法避免候选项集生成数据密集事务包含很多项 → FP-Growth算法效果好数据稀疏事务包含很少项 → Apriori算法可能更简单需要多次挖掘 → FP-Growth算法FP树可以复用。3.1 FP树压缩数据库的频繁模式树相同内容只存储一次FP树就像把购物记录压缩成一棵树相同的前缀共享同一个节点这样就不需要生成候选项集直接从树中挖掘频繁项集。就像把多本书的内容压缩成一本书相同的内容只存储一次。FP树Frequent-Pattern Tree是一种压缩的数据结构只存储频繁项按支持度降序排列。相同前缀的路径共享同一个节点每个节点存储项名和支持度计数。FP树通过共享前缀大幅压缩数据库避免重复存储。Apriori算法需要生成候选项集计算复杂度较高。FP-Growth算法通过构建FP树将数据库压缩避免候选项集生成直接产生频繁项集计算复杂度更低。对于频繁项集长度较长的场景FP-Growth算法的优势更明显。实际应用示例在购物篮分析中如果多个事务都包含面包、牛奶、鸡蛋FP树会将它们压缩到同一条路径上共享前缀面包、牛奶只存储一次大幅减少存储空间。应用边界适合频繁项集长度较长的场景但FP树的构建需要扫描数据库两次第一次统计支持度第二次构建FP树。对于数据稀疏的场景Apriori算法可能更简单。决策标准频繁项集长度较长3项 → FP-Growth算法数据密集 → FP-Growth算法效果好数据稀疏 → Apriori算法可能更简单需要多次挖掘 → FP-Growth算法FP树可以复用。3.2 条件模式基与递归挖掘条件模式基就像找出所有包含某个频繁项的路径的前缀然后基于这些前缀递归挖掘频繁项集。就像找所有包含某个关键词的句子然后找出这些句子的共同前缀。FP-Growth算法从FP树的底部支持度最低的频繁项开始为每个频繁项构建条件模式基包含该项的所有路径的前缀基于条件模式基构建条件FP树递归挖掘频繁项集。例如对于频繁项e找出所有包含e的路径的前缀构建条件FP树递归挖掘以e为后缀的频繁项集。通过递归挖掘可以系统地发现所有频繁项集而不需要生成候选项集。条件模式基只包含频繁项可以大幅减少搜索空间。实际应用示例在购物篮分析中如果频繁项鸡蛋的条件模式基是面包、牛奶则构建条件FP树递归挖掘以鸡蛋为后缀的频繁项集如面包、牛奶、鸡蛋。应用边界适合频繁项集长度较长的场景但递归挖掘需要构建多个条件FP树内存开销较大。对于数据稀疏的场景Apriori算法可能更简单。决策标准频繁项集长度较长 → 递归挖掘效果好数据密集 → 递归挖掘效率高需要发现所有频繁项集 → 递归挖掘只需要发现最大频繁项集 → 可以考虑其他方法。四、实战场景电商购物篮分析4.1 业务痛点识别电商平台积累了海量交易数据但不知道哪些商品经常一起被购买无法制定有效的商品推荐和搭配销售策略。传统的人工分析方式效率低、成本高且容易遗漏有价值的关联模式。核心挑战数据量大百万级交易记录人工分析效率低不知道哪些商品经常一起被购买无法制定有效的商品推荐和搭配销售策略需要自动发现关联模式支持业务决策4.2 方案拆解用核心知识点解决问题第一步数据准备与参数设置将交易数据转换为事务数据库格式每个事务代表一次购物记录包含购买的商品列表。根据业务需求设置最小支持度如60%和最小置信度如75%过滤掉偶然出现的规则和不可靠的规则。为什么这样准备事务数据库格式是关联规则挖掘的标准输入格式每个事务代表一次购物记录。最小支持度和最小置信度阈值需要根据业务需求设置支持度太低会导致规则太多包含偶然出现的规则支持度太高会导致规则太少遗漏有价值的规则置信度太低会导致规则不可靠置信度太高会导致规则太少。第二步发现频繁项集使用Apriori算法或FP-Growth算法发现频繁项集。如果频繁项集长度较短如2-3项使用Apriori算法如果频繁项集长度较长如5项以上使用FP-Growth算法。通过先验原理或FP树高效地发现所有频繁项集。为什么这样选择Apriori算法适合频繁项集长度较短的场景通过先验原理减少候选项集计算复杂度可控。FP-Growth算法适合频繁项集长度较长的场景通过FP树避免候选项集生成计算复杂度更低。根据数据特点选择合适的算法可以提高挖掘效率。第三步生成强关联规则从频繁项集中提取满足最小置信度阈值的规则。例如如果面包、牛奶是频繁项集且面包→牛奶的置信度≥75%则生成强关联规则买面包的人也买牛奶。为什么这样生成只有同时满足最小支持度和最小置信度的规则才是强关联规则值得用于业务决策。支持度保证规则不是偶然出现置信度保证规则可靠。例如面包→牛奶的支持度是60%常见置信度是80%可靠这个规则可以用于推荐。第四步业务应用将强关联规则应用于商品推荐、搭配销售、库存管理等业务场景。例如在用户购买面包时推荐牛奶将面包和牛奶放在相邻位置促进搭配销售。为什么这样应用关联规则的价值在于业务应用。商品推荐可以提高用户满意度搭配销售可以提高销售额库存管理可以优化库存配置。例如如果面包→牛奶是强关联规则在用户购买面包时推荐牛奶可以提高牛奶的销量。完整流程数据预处理将交易数据转换为事务数据库格式参数设置设置最小支持度60%和最小置信度75%频繁项集发现使用Apriori或FP-Growth算法发现频繁项集规则生成从频繁项集中提取满足最小置信度的规则规则评估计算提升度、卡方检验等指标过滤误导性规则业务应用将强关联规则应用于推荐、营销、库存管理等场景4.3 长期适配策略数据更新策略定期重新挖掘关联规则适应商品和用户行为的变化。对于新增商品可以增量更新关联规则。判断标准数据变化大如新增大量商品 → 重新挖掘关联规则数据变化小如小幅更新 → 增量更新关联规则需要实时更新 → 增量更新关联规则。参数调优策略根据业务效果调整最小支持度和最小置信度。如果规则太多提高阈值如果规则太少降低阈值。判断标准规则太多包含偶然出现的规则 → 提高最小支持度或最小置信度规则太少遗漏有价值的规则 → 降低最小支持度或最小置信度业务效果不好 → 调整阈值重新挖掘。算法选择策略根据数据特点选择合适的算法。数据密集且频繁项集长度较长 → FP-Growth算法数据稀疏且频繁项集长度较短 → Apriori算法。判断标准频繁项集长度较长3项 → FP-Growth算法频繁项集长度较短≤3项 → Apriori算法数据密集 → FP-Growth算法数据稀疏 → Apriori算法。规则评估策略使用提升度、卡方检验等指标评估规则的有趣程度过滤掉误导性规则。判断标准提升度 1 → 规则有趣值得关注提升度 ≤ 1 → 规则不有趣可能是误导性规则卡方检验显著 → 规则统计显著值得关注。总结关联规则挖掘通过支持度和置信度两个核心指标从海量数据中自动发现有价值的关联模式。通用应用逻辑公式1数据准备将业务数据转换为事务数据库格式设置最小支持度和最小置信度阈值2频繁项集发现使用Apriori算法或FP-Growth算法发现频繁项集3规则生成从频繁项集中提取满足最小置信度的规则4规则评估使用提升度、卡方检验等指标评估规则的有趣程度5业务应用将强关联规则应用于推荐、营销、库存管理等场景。可直接套用的落地模板1数据准备将业务数据转换为事务数据库格式设置最小支持度阈值建议从20%开始设置最小置信度阈值建议从60%开始2算法选择频繁项集长度较短≤3项→Apriori算法频繁项集长度较长3项→FP-Growth算法数据密集→FP-Growth算法数据稀疏→Apriori算法3规则评估计算支持度和置信度计算提升度lift判断规则是否有趣使用卡方检验判断规则的统计显著性4业务应用商品推荐在用户购买A时推荐B搭配销售将A和B放在相邻位置库存管理根据关联规则优化库存配置5效果监控定期重新挖掘关联规则根据业务效果调整阈值监控规则的应用效果。
阅读完成 · 觉得有帮助?
咨询建站