假设你是夜市摊主小张,摊位上烤串和冰啤酒卖得最好。你总感觉“点了烤串的老客,很多也会顺手加一瓶冰啤酒”,但你拿不准这是错觉还是真规律。于是你翻出这个月 100 张小票,开始琢磨:到底有多少人真的同时点了这两样?点烤串的人里有多大比例又加了啤酒?这个比例比平时大家点啤酒的比例高还是低?这三个问题,恰好对应了关联规则分析中最核心的三个指标:支持度、置信度、提升度。支持度告诉你这个搭配出现得多不多,置信度告诉你前提出现时结论有多可靠,提升度告诉你这个搭配到底是不是比平时更“特别”。把它们弄明白,你就能从一堆购物小票里挖出真金白银般的规律——这也是机器学习里“购物篮分析”这门手艺的看家本领。
掌握三大指标,相当于获得一把“规律验真器”:在电商、零售、推荐系统中快速判断哪些商品搭配是真实信号、哪些只是噪音,是数据挖掘与推荐岗位的必备基本功。
可视化演示
通过集合图解、指标关系散点图和提升度判断标准三个维度,动态展示支持度、置信度、提升度的计算逻辑与联合判断策略,直观理解关联规则的强弱评估。
本节配有交互动效(进入视口后自动加载,约 3KB)。
三大指标计算图解 支持度=P(A∩B)/P(全集) 置信度=P(A∩B)/P(A) Lift=Conf(A→B)/Sup(B)
关联规则基础
小张决定认真做一次“复盘”:把 100 张小票摊在桌上,每张小票就是一个小小的“购物篮”。他先扫了一遍,发现最常结伴出现的是烤串和冰啤酒。这种“发现谁和谁总是一起出现”的过程,在机器学习里有个形象的名字——购物篮分析。它不关心顾客长什么样、为什么买,只关心商品之间那种说不清道不明的“默契”。
要把默契写成规矩,得先定义什么是“规则”。每个规律都长成“如果买了 A,就倾向于买 B”的样子,比如“烤串 → 冰啤酒”。前件 A(烤串)叫前提,后件 B(冰啤酒)叫结论。这里 A 和 B 都叫“项”,若干项组成的集合叫项集——“烤串 + 冰啤酒”就是一个包含两个项的二项集。经典案例“啤酒与尿布”讲的就是:超市发现周末买啤酒的年轻父亲常顺手拿尿布,于是把两者摆到相邻货架,销量双双上涨。
有了规则的形式,紧接着要回答三个问题:这条规则出现得够普遍吗?够可靠吗?够特别吗?三个问题分别由支持度、置信度、提升度来回答。它们就像质检员的三道关卡:先查“出镜率”,再查“命中率”,最后查“含金量”。只有三道关卡全过,一条规则才值得写进你的经营策略。
小张把这三道关卡记在心里:他要找的不是那种一百个客人里只有一两个的巧合,也不是大家都在买的废话规律,而是“点烤串时尤其想喝冰啤酒”这种藏在数据里的惊喜。接下来,他就挨个关卡去验证。
支持度详解
第一道关卡问的是出镜率。小张把 100 张小票数了一遍,发现其中 30 张小票同时出现了“烤串”和“冰啤酒”。也就是说,这对搭档每 100 个客人里能碰上 30 次。这个“出现的频率”,就是支持度。它回答的是最朴素的问题:这对组合到底是不是经常出现?
1. 同时项数 count(A∪B):统计“同时包含 A 与 B”的购物篮个数。这里的∪是集合的“并”,A∪B 表示两个商品一起出现这件事。
2. 总篮数 N:统计中涉及的所有购物篮总数。在小张的例子里就是 100 张小票。
3. 整体相除:用同时出现的次数除以总篮数,得到“同时出现的比例”,范围在 0 到 1 之间。
支持度衡量规则在全体数据中的覆盖程度,数值越接近 1,说明这对商品越“大众脸”。它是规则的入场券:太低说明样本太少,可能是偶然或冷门搭配,商业价值有限。实际挖掘中我们通常设一个最小支持度门槛,比如 0.05,低于它的一律不聊;后面讲 Apriori 算法时你会看到,这个门槛还能帮我们过滤无效组合、大幅减少计算量。注意一个细节:支持度对 A→B 和 B→A 是一样的,因为它看的是两个商品同时出现的次数,不分先后。
对小张来说,30% 的“烤串 + 冰啤酒”意味着每 3 波客人里就有 1 波点过这对组合,绝对不是小概率的巧合。他放心地记下:出镜率过关。
置信度详解
第二道关卡问可靠性。小张换了个角度:光看同时出现的 30 张小票还不够,他更想知道,那些点了烤串的 50 位客人里,到底有多少人又顺手加了冰啤酒?答案是 30 位,所以“在 A 前提下买 B 的比率”就是置信度 60%。它不再问“全场多普遍”,而是问“这批买 A 的人是否忠诚地往篮子里加 B”。
1. 分子 count(A∪B):与支持度的分子相同,还是同时包含 A 和 B 的购物篮个数。
2. 分母 count(A):只包含前提 A 的购物篮个数,也就是“买了 A 的人有多少”。
3. 条件概率 P(B|A):两者相除恰好是在 A 发生的前提下 B 发生的条件概率,数学上记作 $P(B \mid A)$。
置信度本质上是条件概率 $P(B|A)$,它衡量“前提出现后,结论跟着出现的把握”。数值越接近 1,说明“买了 A 就买 B”的链条越稳固,推荐的成功率越高。但注意:置信度只看“买了 A 的人”这个小圈子,不看全体顾客。这就带来一个陷阱——如果 B 本身满大街都是(比如人人都买牛奶),置信度容易被虚高撑起来,让你误以为 A 对 B 有奇效。
小张看到 60% 觉得挺高,可他转念一想:如果本来 10 个客人里就有 8 个会买冰啤酒,那 60% 反而不如平时。于是他把目光投向第三个问题:这个 60%,到底比“平时水平”高在哪?
提升度详解
第三道关卡问含金量。小张算出全场 100 位客人中有 40 位买了冰啤酒,也就是冰啤酒的全局概率是 40%。再回头看:点烤串的人里买冰啤酒的概率是 60%。60% 对 40%,是 1.5 倍。这个“倍数”就是提升度。它把“带条件的概率”和“平时水平”放在同一根标尺上比大小,最能揭示组合的独特性。
1. 分子置信度 P(B|A):买了 A 的人中买 B 的概率,代表“有条件时”的购买强度。
2. 分母支持度 P(B):全体顾客中买 B 的全局概率,代表“无条件时”的购买强度。
3. 两者之比:用条件概率除以全局概率,得到“加成倍数”,这就是提升度。
提升度以 1 为分水岭。大于 1:A 的出现让 B 更常见,正相关,是真正的“黄金搭档”;等于 1:A 和 B 彼此独立,买不买 A 跟 B 没关系;小于 1:A 的出现反而让 B 更少见,负相关,比如“烤串 → 低脂沙拉”,两个品类在顾客选择上互相“顶替”。所以提升度才是三个指标里最能辨别“真信号”的那个——它过滤掉了“本来就很热门”造成的虚假繁荣。
1.5 倍的加成让张老板眼前一亮:不是错觉,点烤串的确会带动冰啤酒!不过他还得冷静——这条规律够普遍(30%)、够可靠(60%)、也比平时更特别(1.5 倍),三重验证都通过,才算真正可以写进进货单。
指标综合判读
三个指标各管一摊:支持度管“眼见频率”,置信度管“条件命中”,提升度管“对比增量”。就像找合作伙伴要同时看“认识多久”“相处多好”“有没有比其他人更特别”——缺一个,判断都要打折扣。单独拿任何一个出来看,都可能被数据骗。
实际挖掘中,我们把三个指标组合成一个“门禁系统”:设定最小支持度、最小置信度,再要求提升度大于 1。候选规则必须同时通过三道门,才会被留下。这就像小张给每条规则发一张体检表:出镜率、命中率、含金量三个项目全部合格才盖章。
这种三重判读能有效过滤两类虚假关联。第一类是“高置信但没增量”——B 本来就很普及,置信度被撑高,提升度往 1 以下掉,说明这条规则没有操作价值;第二类是“高提升但太冷门”——提升度 5 的组合一百个人里只有一人买,规模上不去,适合做成小众精品而非大众推荐。三个指标权衡时没有绝对公式,通常结合业务目标:走量看支持度,走精准转化看置信度,走差异化机会看提升度。
小张最终在备选清单上划掉了不少组合:有的虽然 90% 的人点烤串都加啤酒、但全店 95% 的人本来就会买啤酒,提升度不到 1,属于“废话规律”;有的提升度高达 8.0,可一千张票里只出现两次,果断放弃。最后他留下的是“普遍 + 可靠 + 特别”三重达标的少数几个真朋友。
关联挖掘算法
张老板的小摊只有十几种商品,翻小票还能数过来。可超市有上万种商品,两两组合就是几千万对,人眼根本看不过来。这时候就需要机器算法自动去“淘金”,最经典的是 Apriori 算法——它的名字听起来像“先验”,确实,算法里藏着一个朴素的聪明前提。
聪明前提就是:如果一个商品组合本身都不频繁,那它的任何超集(再多加一些商品)也一定不频繁。比如“烤串 + 鱼子酱”只出现过 1 次,那“烤串 + 鱼子酱 + 香槟”当然也不可能频繁。这个性质让算法可以大刀阔斧地剪枝:砍掉明显没前途的分支,避免在所有组合上做无意义的计算。
Apriori 分两步走。第一步找频繁项集:设一个最小支持度(比如 10%),先从单项开始扫描,留下达标的项;然后两两组合成二项集,再扫描、再筛选;接着组合成三项集……逐层扩大,每层都用“不频繁的父集,其子集也不会频繁”这条先验性质剪枝。第二步在频繁项集的基础上生成候选规则,再用置信度和提升度筛出最终结论。这样整个流程的计算量被大幅压缩,支持度门槛提前过滤、三个指标层层设卡,构成了一个完整闭环。
对小张来说,算法就像雇了个不知疲倦的学徒,帮他从一万张小票里自动找出“烤串 + 冰啤酒”式的组合,再依次过支持度、置信度、提升度三道闸门。他只需要最后拍板:哪些规律值得上架、哪些只是噪音。
实战应用
规律找到了,怎么变成钱?小张把验证通过的规则贴在了操作间:烤串配冰啤酒。他在菜单上推出“烤串双人餐 + 两瓶冰啤”套餐,外卖平台把冰啤酒放在烤串页面的推荐位,还试着把啤酒冰柜移到烤串取餐口旁边——结果这些动作都让小票上的数字往上涨。一套组合拳打下来,他算是体会到了“数据指导决策”的甜头。
这套打法放到大公司,就是标准的购物篮分析落地流程:先做关联规则挖掘,再把强规则转化为业务动作。电商、超市、内容平台都是这么干的,本质都是从小票里找商机。
电商平台的购物篮分析会从海量订单中批量计算所有二项集的支持度、置信度、提升度。典型用法有四种:商品推荐——下单页展示“买了 A 的人也买了 B”;交叉销售——支付成功后关联推荐配件或耗材;促销组合设计——把提升度高的商品打包定价;货架陈列——把强关联的商品摆到相邻位置。注意业务约束:提升度高的组合不一定都适合捆绑售卖,还要考虑毛利、库存和用户体验,指标只负责告诉你“谁和谁有缘分”。
张老板的生意经就这样讲完了:一张小票里可能有规律,一群小票里可能有商机。支持度、置信度、提升度三把尺子,加上一个 Apriori 淘金筛,就能让数据开口说话——这正是购物篮分析从夜市小摊走到大型电商的底层密码。
AI 应用场景
电商平台购物篮分析
阶段:数据挖掘 / 特征工程
解决的问题:商品搭配推荐大多靠品类编辑凭经验手工配置,覆盖不全且容易拍脑袋。用关联规则三指标对全部订单做批量打分,能自动甄别“经常一起买”且“比平时更特别”的商品对。
具体案例:某宠物用品电商对近 90 天订单做关联分析,“宠物湿巾 → 宠物玩具”提升度 2.3、置信度 45%、支持度 4%,于是上架“养宠新手包”并设置加购推荐位,组合购买转化率提升约 18%。
超市促销组合与货架陈列
阶段:策略优化 / 商业分析
解决的问题:传统搭配依赖店长个人经验,常常忽略跨品类机会。通过三指标找出提升度稳定的组合,可指导套餐定价与货架引导。
具体案例:连锁便利店每周跑一次购物篮分析,根据季节数据把“雨伞 + 咖啡”这类临时组合做成雨天限定套餐,雨天当日相关商品销售额提升 12%。
推荐系统交叉销售
阶段:召回 / 排序补充特征
解决的问题:协同过滤常聚焦用户行为相似度,对新品和冷门商品覆盖不足;把“商品 A → 商品 B”的强关联作为补充信号注入推荐链路,能提高交叉销售的成功率。
具体案例:在线教育平台把“入门教程 A → 进阶课程 B”视为一条关联规则,保留提升度大于 1 且置信度达标的规则对,在“相关推荐”位展示,课程组合购买率提升 15%。
Python 演示
from itertools import combinations def calc_support(transactions, itemset): """计算支持度:同时包含 itemset 的篮子数 / 总篮子数""" count = 0 for txn in transactions: if itemset.issubset(txn): count += 1 return count / len(transactions) def calc_confidence(transactions, antecedent, consequent): """计算置信度:P(B|A) = sup(A∪B) / sup(A)""" sup_both = calc_support(transactions, antecedent | consequent) sup_a = calc_support(transactions, antecedent) if sup_a == 0: return 0.0 return sup_both / sup_a def calc_lift(transactions, antecedent, consequent): """计算提升度:置信度 / sup(B),大于 1 为正相关""" conf = calc_confidence(transactions, antecedent, consequent) sup_b = calc_support(transactions, consequent) if sup_b == 0: return 0.0 return conf / sup_b def find_frequent_itemsets(transactions, min_support): """枚举所有商品组合,找出支持度达标的频繁项集""" items = set() for txn in transactions: items.update(txn) return [ (itemset, sup) for size in range(1, len(items) + 1) for combo in combinations(items, size) for itemset in [frozenset(combo)] if (sup := calc_support(transactions, itemset)) >= min_support ] transactions = [ {'啤酒', '尿布', '牛奶'}, {'啤酒', '面包'}, {'尿布', '牛奶', '可乐'}, {'啤酒', '尿布'}, {'牛奶', '面包'}, {'啤酒', '牛奶', '薯片'}, {'尿布', '牛奶'}, {'啤酒', '尿布', '牛奶', '面包'},] def main(): print('=== 单项支持度 ===') for itemset, sup in find_frequent_itemsets(transactions, 0.0): if len(itemset) == 1: print(f'{itemset}: {sup:.2f}') print('=== 规则: 啤酒 → 尿布 ===') A = frozenset({'啤酒'}) B = frozenset({'尿布'}) print(f'支持度: {calc_support(transactions, A | B):.2f}') print(f'置信度: {calc_confidence(transactions, A, B):.2f}') print(f'提升度: {calc_lift(transactions, A, B):.2f}') if __name__ == '__main__': main()
if itemset.issubset(txn):判断该商品组合是否完整出现在当前购物篮中,这是支持度计数的核心。sup_both = calc_support(transactions, antecedent | consequent)用集合的并集获得“同时包含 A 和 B”的事务比例,作为置信度分子。return sup_both / sup_a除以仅包含 A 的比例,完成条件概率的计算。return conf / sup_b置信度再除以 B 的全局比例,得到提升度。items.update(txn)收集所有出现过的不重复商品,作为后续组合枚举的原料集。if (sup := calc_support(transactions, itemset)) >= min_support海象表达式在循环中复用支持度结果,只有达标的项集才保留。if len(itemset) == 1:只打印单项集,方便先看清每种商品的“基础人气”。
常见误区
误区我算出规则“啤酒 → 尿布”的置信度是 85%,这么高,肯定是个超棒的规则!直接拿去推荐准没错。
正解85% 只说明买啤酒的人里 85% 也买了尿布,但万一平时全店 90% 的人都会买尿布呢?那 85% 反而说明买啤酒会让尿布“变冷”。高置信度可能是被“尿布本身很普及”撑起来的,必须结合提升度看是否比平时更特别。
为何常见:初学者只盯着一个指标,就像只看一道菜好吃,却不说它是不是招牌菜——忽略了“平时水平”这个最重要的参照系。
误区这条规则的提升度虽然高达 5,但支持度只有 0.5%,这么少人买,肯定不值得关注,直接丢掉。
正解支持度低只说明受众规模小,但在小众场景里,一旦触达就是高转化。电商长尾推荐靠的正是这些低支持度、高提升度的组合,它们和“人人买牛奶面包”一样有商业价值,只是运营策略不同——前者做精品,后者做流量。
为何常见:拿“普适性”当唯一标尺,忽略了低频高价值的场景,就像夜市摊主看不到凌晨两点的夜宵客群。
误区提升度是 2.5,说明顾客先买了 A,被 A 带动才买了 B。以后只要跟顾客推荐 A,就能让他买 B。
正解三个指标都只是“共现统计”,描述的是相关关系。A 和 B 同时出现,可能只是因为它们都跟第三个因素有关(比如晚上 8 点这个时间),并不存在谁导致谁的因果。要做因果判断,需要 A/B 测试等更严格的方法。
为何常见:生活中习惯用“因为所以”解释一切,数据里看到规律就容易脑补出因果链条。
误区支持度 80% 的“面包 → 牛奶”,比支持度 5% 的“鱼子酱 → 香槟”强多了,肯定优先推荐前者。
正解支持度高只代表“普遍”,不代表“有洞察”。大家都会买面包和牛奶,这条规则不会带来增量价值;反而是低支持度的搭配可能揭示特定人群的偏好。规则强度要三个指标一起看,不存在单一指标能定义“强”。
为何常见:把“常见的”直接等同于“有用的”,忽略了商业上最看重的是增量与差异化,而不是人人皆知的常识。
面试题
Q1. 支持度 Support(A→B) 的准确含义是?
- A.同时购买 A 和 B 的次数占总次数比例← 正确答案
- B.购买 A 的人中购买 B 的人数占比
- C.购买 B 的人中购买 A 的人数占比
- D.A 与 B 的销量之比的平均数值大小
答案:A。支持度看的是“全场”。分子是同时包含 A 与 B 的购物篮数量,分母是全部购物篮数,两者相除得到占比。B 和 C 描述的都是条件概率,属于置信度范畴;D 与销量之比无关。
Q2. 某超市统计 1000 个购物篮,300 个含啤酒,120 个同时含啤酒和尿布,则置信度“啤酒 → 尿布”为?
- A.12%
- B.30%
- C.40%← 正确答案
- D.60%
答案:C。置信度 = 同时含啤酒和尿布的篮子数 ÷ 含啤酒的篮子数 = 120 ÷ 300 = 40%。12% 是把同时出现比例(120/1000)当作支持度;60% 是把分母误用了尿布总数,这些都不符合置信度的定义。
Q3. 提升度 Lift(A→B) 大于 1 说明什么?
- A.A 和 B 之间存在负相关
- B.买 A 时买 B 比平时更容易← 正确答案
- C.A 与 B 之间完全独立无关
- D.B 商品卖得比 A 商品更好
答案:B。提升度 = P(B|A) ÷ P(B)。大于 1 意味着“买 A 的人中买 B 的条件概率”高于“全场买 B 的概率”,即 A 对 B 有正向加成。A 是小于 1 的情形,C 是等于 1 的情形,D 与提升度无关。
Q4. 下列哪些指标可以衡量关联规则强度?
- A.支持度 Support← 正确答案
- B.置信度 Confidence← 正确答案
- C.相似度 Cosine
- D.提升度 Lift← 正确答案
答案:ABD。关联规则三大经典指标是支持度、置信度、提升度,分别衡量普遍性、可靠性和特殊性。余弦相似度是文本或向量空间里的概念,不属于关联规则标准指标体系,故不选 C。
Q5. 提升度 Lift(A→B) 等于 1 时,说明什么?
- A.A 与 B 相互独立无关← 正确答案
- B.A 与 B 完全正相关
- C.A 与 B 完全负相关
- D.A 和 B 是同一类商品
答案:A。提升度等于 1 时,条件概率 P(B|A) 等于全局概率 P(B),也就是说“买不买 A”对“买 B 的概率”没有任何影响,两者统计独立。正相关应大于 1,负相关应小于 1,D 与指标定义无关。
Q6. 关于支持度和置信度,说法正确的是?
- A.支持度关注规则是否普遍存在← 正确答案
- B.置信度关注规则的可靠性高低← 正确答案
- C.支持度高则置信度必然也高
- D.两者的分母和分子并不相同← 正确答案
答案:ABD。支持度分母是总篮数、分子是同时次数;置信度分母是含 A 的篮数、分子是同时次数,两者分子相同、分母不同,因此 D 正确。支持度只代表普遍性,与置信度没有必然推导关系,C 错误。
Q7. 某候选规则支持度 2%、置信度 95%,但提升度只有 0.8,最可能说明什么?
- A.规则可靠且值得重点推荐
- B.B 本身太常见撑高置信度← 正确答案
- C.A 与 B 呈现正相关关系
- D.支持度低更显规则价值高
答案:B。提升度 0.8 < 1 说明负相关——买 A 时买 B 的概率反而低于全场水平。95% 的高置信度是被 B 的高普及率“撑”出来的,属于典型的虚假繁荣,因此规则不值得重点推荐,A、C、D 均不对。
Q8. 已知 Support(B) = 40%,Confidence(A→B) = 60%,则 Lift(A→B) 等于?
- A.0.8
- B.1.0
- C.1.5← 正确答案
- D.2.4
答案:C。提升度 = 置信度 ÷ Support(B) = 0.6 ÷ 0.4 = 1.5。这说明买 A 时买 B 的概率是平时水平的 1.5 倍,属于正向关联。0.8、1.0、2.4 都是代入错误得到的数字。
Q9. Apriori 算法中剪枝操作的作用正确的是?
- A.提前删除不频繁的候选项集← 正确答案
- B.减少后续扫描数据库的次数← 正确答案
- C.保证挖掘结果一定全局最优
- D.利用先验性质缩小搜索空间← 正确答案
答案:ABD。Apriori 利用“频繁项集的子集必频繁”这一先验性质,将不频繁的候选直接剪掉,从而减少数据库扫描次数、缩小搜索空间,A、B、D 都正确。剪枝能保证不漏掉达标项集,但并不承诺业务意义上的“全局最优”,C 说法过于绝对。
Q10. 某咖啡店中,买咖啡的顾客 80% 也会买蛋糕,全店顾客中仅 10% 买了蛋糕,则提升度 Lift(咖啡→蛋糕) 为?
- A.0.8
- B.1.0
- C.8.0← 正确答案
- D.0.1
答案:C。Lift = P(蛋糕|咖啡) ÷ P(蛋糕) = 0.8 ÷ 0.1 = 8.0。这意味着买咖啡时买蛋糕的概率是平时水平的 8 倍,是非常强的正向关联。0.8 误把置信度当提升度,0.1 是蛋糕的全局概率,1.0 是独立情形。