当前位置: 首页 > news >正文

别再只懂Apriori了!用Python手写一个超市购物篮分析,从牛奶面包数据里挖出隐藏的关联规则

从零实现购物篮分析:用Python揭示牛奶与面包的隐藏关联

超市货架上看似随机摆放的商品,其实暗藏玄机。当顾客把牛奶和面包同时放进购物车时,背后可能隐藏着值得挖掘的商业规律。本文将带你用Python从零实现经典的购物篮分析,不依赖现成库,彻底掌握关联规则挖掘的核心原理。

1. 购物篮分析基础与数据准备

购物篮分析(Market Basket Analysis)是零售行业最常用的数据分析技术之一,它通过挖掘顾客购买商品之间的关联关系,帮助商家优化商品陈列、制定促销策略。这种分析的核心在于发现"如果顾客购买了A商品,那么他们也倾向于购买B商品"这样的规律。

关键概念速览

  • 支持度(Support):规则A→B在所有交易中出现的频率
  • 置信度(Confidence):在包含A的交易中,同时包含B的比例
  • 提升度(Lift):规则A→B的提升程度,衡量相关性

让我们从一个简单的数据集开始。假设我们收集了一家小型超市一周的购物数据,包含五种商品:牛奶、面包、苹果、香蕉和火腿。数据格式如下,其中1表示购买,0表示未购买:

1,1,0,0,0 # 购买了牛奶和面包 0,1,1,0,0 # 购买了面包和苹果 1,0,0,1,0 # 购买了牛奶和香蕉 0,0,1,1,0 # 购买了苹果和香蕉 1,1,0,0,1 # 购买了牛奶、面包和火腿

使用NumPy加载这个数据集:

import numpy as np data = np.loadtxt('shopping_data.txt', delimiter=',') print(f"数据集形状:{data.shape}") # 输出(5,5)表示5笔交易,5种商品

2. 手动计算购买频率与共现次数

理解购物篮分析的第一步是统计单个商品的购买频率和商品对的共现次数。这为我们后续计算支持度和置信度奠定基础。

from collections import defaultdict # 初始化计数器 item_counts = defaultdict(int) # 单个商品购买次数 pair_counts = defaultdict(int) # 商品对共现次数 total_transactions = len(data) # 总交易笔数 # 商品名称映射 items = ["milk", "bread", "apple", "banana", "ham"] # 统计购买频率 for transaction in data: for item_idx, purchased in enumerate(transaction): if purchased: item_counts[item_idx] += 1 # 统计商品对共现 for transaction in data: purchased_items = [i for i, val in enumerate(transaction) if val] for i in range(len(purchased_items)): for j in range(i+1, len(purchased_items)): pair = (purchased_items[i], purchased_items[j]) pair_counts[pair] += 1 # 同时记录反向组合 reverse_pair = (purchased_items[j], purchased_items[i]) pair_counts[reverse_pair] += 1 # 输出统计结果 print("商品购买次数统计:") for item_idx, count in item_counts.items(): print(f"{items[item_idx]}: {count}次")

统计结果示例

商品组合共现次数
牛奶→面包2次
面包→苹果1次
牛奶→香蕉1次
苹果→香蕉1次

3. 实现支持度与置信度计算

有了基础统计数据后,我们可以计算关联规则的两个核心指标:支持度和置信度。

支持度计算公式

支持度(A→B) = 包含A和B的交易数 / 总交易数

置信度计算公式

置信度(A→B) = 包含A和B的交易数 / 包含A的交易数

Python实现代码:

# 计算所有可能的规则 rules = [] for (premise, conclusion), count in pair_counts.items(): support = count / total_transactions confidence = count / item_counts[premise] rules.append({ 'rule': (premise, conclusion), 'support': support, 'confidence': confidence }) # 打印前5条规则 print("\n关联规则示例:") for i, rule in enumerate(rules[:5]): prem, conc = rule['rule'] print(f"规则{i+1}: 如果购买{items[prem]},则也会购买{items[conc]}") print(f" 支持度: {rule['support']:.2f}, 置信度: {rule['confidence']:.2f}")

注意:支持度衡量规则的普遍性,而置信度衡量规则的可靠性。两者都很重要,但需要平衡考虑。

4. 引入提升度优化规则质量

单纯依赖支持度和置信度可能会产生误导。例如,如果面包本身就很畅销,那么"牛奶→面包"的置信度可能很高,但这并不一定意味着两者有真正的关联。这时就需要引入提升度(Lift)

提升度计算公式

提升度(A→B) = 置信度(A→B) / 支持度(B)

提升度解释:

  • 1:A和B正相关

  • =1:A和B独立
  • <1:A和B负相关

Python实现:

# 计算提升度 for rule in rules: premise, conclusion = rule['rule'] support_conclusion = item_counts[conclusion] / total_transactions rule['lift'] = rule['confidence'] / support_conclusion # 按提升度排序 sorted_rules = sorted(rules, key=lambda x: x['lift'], reverse=True) print("\n按提升度排序的Top5规则:") for i, rule in enumerate(sorted_rules[:5]): prem, conc = rule['rule'] print(f"{i+1}. {items[prem]} → {items[conc]}") print(f" 支持度: {rule['support']:.2f}, 置信度: {rule['confidence']:.2f}, 提升度: {rule['lift']:.2f}")

典型提升度解读

  • 提升度1.5:购买A的顾客购买B的可能性比普通顾客高50%
  • 提升度0.8:购买A的顾客反而更少购买B

5. 结果可视化与业务应用

计算得到的规则需要直观展示才能发挥价值。我们可以使用matplotlib简单可视化:

import matplotlib.pyplot as plt # 提取Top5规则数据 top_rules = sorted_rules[:5] premises = [items[r['rule'][0]] for r in top_rules] conclusions = [items[r['rule'][1]] for r in top_rules] lift_values = [r['lift'] for r in top_rules] # 创建条形图 plt.figure(figsize=(10, 6)) bars = plt.barh([f"{p}→{c}" for p,c in zip(premises, conclusions)], lift_values) plt.xlabel('提升度') plt.title('关联规则提升度Top5') plt.xlim(0, max(lift_values)*1.1) # 在条形上添加数值 for bar in bars: width = bar.get_width() plt.text(width, bar.get_y() + bar.get_height()/2, f'{width:.2f}', ha='left', va='center') plt.tight_layout() plt.show()

业务应用场景

  1. 商品陈列优化:将高提升度的商品组合摆放在相邻位置
  2. 捆绑促销:对关联性强的商品设计组合优惠
  3. 个性化推荐:根据顾客已选商品推荐相关商品
  4. 库存管理:关联商品保持同步进货和促销节奏

6. 避免常见陷阱与误区

在实际应用中,购物篮分析有几个常见误区需要注意:

1. 忽视零交易的影响我们的示例数据很小,现实中可能有数千种商品组合从未一起出现过。这些"零"同样包含重要信息。

2. 过度依赖高置信度高置信度规则如果支持度很低,可能只是偶然现象。比如"鱼子酱→香槟"置信度可能很高,但实际交易数很少。

3. 忽略商品层级关系不同品类、品牌的商品需要分层分析。将"牛奶"作为一个整体分析可能掩盖不同品牌间的差异。

4. 不考虑时间因素季节性商品(如圣诞树与装饰灯)的关联可能只在特定时段成立。

改进建议代码

# 添加最小支持度阈值 min_support = 0.1 filtered_rules = [r for r in rules if r['support'] >= min_support] # 添加最小提升度阈值 min_lift = 1.2 filtered_rules = [r for r in filtered_rules if r['lift'] >= min_lift] print(f"经过过滤后剩余{len(filtered_rules)}条有意义规则")

7. 扩展思路与进阶技巧

掌握了基础实现后,可以考虑以下进阶方向:

1. 高效计算优化对于大规模数据,可以使用位图等数据结构优化存储和计算:

# 将交易数据转换为位图表示 bitmap_data = np.packbits(data.astype(bool), axis=1) # 位运算快速计算共现 def bitwise_and_count(a, b): return np.count_nonzero(np.bitwise_and(a, b))

2. 多层次关联分析除了商品间关联,还可以分析:

  • 商品类别关联
  • 购买时间关联(早上vs晚上)
  • 顾客属性关联(年龄、性别等)

3. 实时分析架构对于线上商城,可以设计实时关联规则推荐:

# 伪代码示例 def real_time_recommendation(cart_items, rules_db): recommendations = set() for item in cart_items: related_items = rules_db.get_related_items(item) recommendations.update(related_items) return recommendations - set(cart_items)

4. 结合其他算法

  • 与协同过滤结合提高推荐精度
  • 使用图算法发现商品社区
  • 应用深度学习挖掘非线性关系
http://www.jsqmd.com/news/906790/

相关文章:

  • 番茄小说下载器终极指南:如何轻松下载并离线阅读番茄小说
  • 注塑车间的透明化革命:盘古信息如何重塑注塑成型行业的数字未来?
  • AI营销新纪元:多智能体协作破局
  • 2026年5月口碑好的武汉地下管线漏水检测公司排行榜厂家推荐榜,家庭/厂房/市政管道漏水检测厂家选择指南 - 海棠依旧大
  • Nexknit Gateway v0.2.0:全新采集器与告警系统上线
  • 回民街的坑很多,但洒金桥那条巷子藏着真正的老味道
  • 2026年5月衡水档案柜之选:深度剖析河北精纳金属制品有限公司 - 2026年企业资讯
  • Arduino与Visuino实现电机定时启停:可视化编程与L298N驱动详解
  • Windows系统的用户管理操作
  • 限时解密|金融/医疗/教育三大垂直领域AI语音合成真实落地瓶颈:92%项目因“微表情语音失真”遭客户拒用
  • 知识IP卡在变现第一步:创客匠人用一套陪跑系统回答“谁来陪你落地”
  • 据说刷一个百度热搜的成本在1万以上
  • 制作儿童英文教学视频的AI工具选型指南
  • 面向美区市场直播拍卖,跨境网络链路选型全指南
  • 最全整理|Claude Code 180+ 运行状态词
  • codex下载与配置
  • VEP注释结果怎么看?从输出VCF里快速筛选致病SNP的实战技巧
  • Mapillary Vistas数据集实战:用Python快速加载并可视化66类街景语义分割标签
  • 别再只算欧氏距离了!用Python+NumPy实战Grassmann流形,搞定人脸识别中的子空间比对
  • 北京研华医疗工控机
  • [智能体-137]:从硬件到智能体:全层级系统记忆体系与空间开销演进
  • CentOS 7最小化安装后,5分钟搞定网络连接(含nmtui图文详解与常见坑点)
  • 口碑好的卡盒哪个创新强
  • 2026年5月市面上四川美式箱变外壳生产厂家口碑推荐厂家推荐榜:YB□、ZGS、欧式、美式箱变外壳厂家选择指南 - 海棠依旧大
  • 【ChatGPT汇报材料优化黄金法则】:20年高管秘书亲授——3类高频废稿+5步AI精修法,今日不学明天被退回
  • 2026年当下,温州别墅门窗选购指南与实力生产商深度解析 - 2026年企业资讯
  • 保姆级教程:在Ubuntu 20.04上从零跑通《视觉SLAM十四讲》所有代码(附避坑指南)
  • 强强联合!比昂芯携手麒麟软件,打造新一代全栈国产化电路仿真解决方案
  • Magisk系统级修改框架:Android权限管理与系统定制终极指南
  • 100个安全运维知识,懂一半绝对高手!