大数据关联性分析
关联性分析
提示:黄金直蹦1000元大关
核心思想: 发现大量数据中,项(物品、事件、特征)之间有趣的“同时出现”的关系。
数据挖掘前置处理
作用
提示:什么是关联性分析,用来干嘛呢?
最经典的例子
超市购物篮分析:想象你是一个超市的经理,你每天有成千上万的购物小票。你很好奇:“顾客在买尿布的时候,会不会也顺手买点啤酒?” 这个听起来有点无厘头的问题,就是关联性分析的起源——著名的 “尿布与啤酒” 案例。
通过分析,他们真的发现,很多年轻爸爸在周末晚上买尿布时,会顺便买几罐啤酒。于是,超市就把尿布和啤酒摆放在相邻的货架上,结果两者的销量都大幅提升!
这就是关联性分析的威力:发现隐藏的关联规则,用于:
- 商品摆放(交叉销售)
- 推荐系统(买了A的人通常也喜欢B)
- 医疗诊断(某些症状组合可能指向特定疾病)
- 网站流量分析(用户浏览了页面A后,常常会跳转到页面B)
提示:以下是本篇文章正文内容,下面案例可供参考
一、核心概念(必须掌握的知识点)
我们必须先理解衡量一个规则是否“有趣”的三大指标:
-
支持度
通俗理解: 一个组合(比如{尿布,啤酒})出现的“普遍程度”或“人气”。
计算方式: 包含{尿布,啤酒}的交易次数 / 总交易次数。
作用: 过滤掉那些偶然出现、不具代表性的组合。支持度太低的规则没有商业价值。 -
置信度
通俗理解: 当条件A发生时,结果B发生的“概率”或“可靠性”。
计算方式: 对于规则 如果…买尿布,那么…买啤酒,其置信度 = 支持度({尿布,啤酒}) / 支持度({尿布})。
作用: 衡量规则的准确度。置信度越高,规则越可信。 -
提升度
通俗理解: 规则的有效性。A的出现,对B的出现是起到了“促进”作用还是“抑制”作用?
计算方式: 提升度 = 置信度(如果A那么B) / 支持度(B)。- 提升度 > 1: 正相关,A的出现真的会促进B的购买。这是我们想要的。
- 提升度 = 1: 无关,A和B独立,规则无效。
- 提升度 < 1: 负相关,买了A反而更不可能买B。
举例说明:假设我们有1000张购物小票,有100张同时包含了{尿布,啤酒},有200张包含了{尿布},有150张包含了{啤酒},支持度({尿布,啤酒}) = 100 / 1000 = 10%(这个组合还挺常见的)
规则:如果买尿布,那么买啤酒置信度= 支持度({尿布,啤酒}) / 支持度({尿布}) = 100 / 200 = 50%
(每两个买尿布的顾客中,就有一个会买啤酒,这个比例很高!)提升度= 置信度 / 支持度(啤酒) = 50% / (150/1000) = 50% / 15% ≈ 3.33
(买尿布这个行为,让买啤酒的可能性提升了3.33倍!这是一个非常强的正相关规则。)
Apriori 算法的两步走策略
第 1 步:找出所有 “频繁项集
通过多轮数据库扫描,从低阶到高阶逐步筛选满足支持度要求(此处默认支持度阈值为 “出现次数≥2”)的项集,并结合剪枝策略减少无效计算。
扫描 1:生成频繁 1 项集(L1)
统计目标数据库中单个商品的出现次数;
统计结果(按出现次数排序):牛奶(4 次)、面包(4 次)、尿布(4 次)、啤酒(3 次)、可乐(2 次)、鸡蛋(1 次);
筛选规则:保留出现次数≥2 的商品,剔除不满足条件的商品;
最终结果:L1 = {牛奶,面包,尿布,啤酒,可乐}(鸡蛋因出现次数仅 1 次被淘汰)。
扫描 2:生成频繁 2 项集(L2)
生成候选 2 项集:基于 L1 中的商品进行两两组合,生成所有可能的 2 项组合,例如{牛奶,面包}、{牛奶,尿布}、{牛奶,啤酒}、{牛奶,可乐}等;
计算候选集支持度:再次扫描数据库,统计每个候选 2 项集的实际出现次数;
部分候选集统计结果:{牛奶,面包}(3 次)、{牛奶,尿布}(3 次)、{牛奶,啤酒}(2 次)、{牛奶,可乐}(1 次);
筛选生成 L2:保留出现次数≥2 的候选 2 项集,剔除不满足条件的项集;
最终结果:L2 = {牛奶,面包},{牛奶,尿布},{牛奶,啤酒},{面包,尿布},{面包,啤酒},{尿布,啤酒}…({牛奶,可乐}因支持度仅 1 次被淘汰)。
重点:剪枝策略的应用
核心逻辑:若一个项集是频繁项集,则其所有子集也必须是频繁项集;反之,若一个项集的子集不是频繁项集,则该项集一定不是频繁项集,可直接剔除(无需后续扫描计数)。
在候选 2 项集生成中的体现:
生成候选 2 项集时,算法会先检查候选集的所有子集是否都在 L1 中。例如{牛奶,可乐}的两个子集{牛奶}和{可乐}均在 L1 中,因此会被生成作为候选集,但后续因支持度不满足要求被淘汰;
注:剪枝策略的真正威力在高阶项集生成中更明显。
扫描 3:生成候选 3 项集(以示例说明)
候选 3 项集生成规则:将 L2 中 “仅相差一个商品” 的项集进行连接组合。例如{牛奶,面包}与{牛奶,尿布}(仅相差 “尿布” 和 “面包” 一个商品)连接,生成{牛奶,面包,尿布};
剪枝操作(关键步骤):在扫描数据库统计支持度之前,先检查候选 3 项集的所有 2 项子集是否都在 L2 中:
对{牛奶,面包,尿布}:其所有 2 项子集({牛奶,面包}、{牛奶,尿布}、{面包,尿布})均在 L2 中,因此该候选集合法,保留用于后续计数;
对假设生成的{牛奶,面包,可乐}:其 2 项子集{面包,可乐}不在 L2 中(此前已被淘汰),根据剪枝策略,可直接剔除该候选集,无需扫描数据库统计支持度,极大节省计算资源。
通过上述 “低阶筛选→高阶生成→剪枝优化” 的循环流程,Apriori 算法像 “筛子” 一样逐层筛选项集,提前抛弃大量无效组合,显著提升计算效率。
第 2 步:从 “频繁项集” 中生成 “关联规则”
在获取所有频繁项集(例如{牛奶,面包,尿布})后,基于频繁项集生成逻辑关联规则,并通过置信度阈值筛选有效规则。
关联规则生成逻辑
以频繁项集{牛奶,面包,尿布}为例,可拆解为 “前提项集” 和 “结论项集”,生成不同的关联规则,核心公式为:
置信度(A→B)= 支持度(A∪B)/ 支持度(A)
(其中 A 为前提项集,B 为结论项集,A 与 B 无交集,且 A∪B 为原频繁项集)
示例规则与置信度计算
规则 1:若{牛奶,面包}(前提项集 A),则{尿布}(结论项集 B)
置信度 = 支持度 (牛奶,面包,尿布) / 支持度 (牛奶,面包)
规则 2:若{牛奶}(前提项集 A),则{面包,尿布}(结论项集 B)
置信度 = 支持度 (牛奶,面包,尿布) / 支持度 (牛奶)
更多规则:可通过不同的 “前提 - 结论” 拆分方式,生成该频繁项集对应的所有可能关联规则。
有效规则筛选
- 设定置信度阈值(例如 60%);
- 仅保留置信度高于设定阈值的关联规则,剔除置信度不满足要求的规则,最终得到有实际意义的关联结论。
总结
- 目标: 发现“如果A,那么B”的强关联规则。
- 衡量标准: 用支持度看普遍性,用置信度看准确性,用提升度看有效性。
- Apriori算法核心逻辑:
- 迭代: 从单个商品开始,像搭积木一样,逐步构建更大的频繁物品组合。
- 剪枝: 利用 “任何频繁项集的子集必须也是频繁的” 这一先验知识,提前砍掉那些“父母”就不合格的候选组合,避免无效计算。这是它高效的关键。
简单比喻:
Apriori算法就像一个聪明的面试官,他要从1000个人里找出“会编程、会英语、有经验”的三项全能人才。
- 笨办法: 对1000个人逐一测试这三项技能。
- Apriori办法:
- 先快速测试所有人的“编程”能力,淘汰掉不会的(找频繁1项集)。
- 在会编程的人里,测试“编程+英语”组合,淘汰掉不合格的(找频繁2项集)。
- 最后,只在既会编程又会英语的人里,测试他们是否有“经验”(找频繁3项集)。这样就避免了对完全不会编程的人去测试英语和经验,大大节省了时间。
更多推荐


所有评论(0)