购物篮模型 Python 实战:Apriori 算法 3 步挖掘商品关联规则

购物篮模型 Python 实战:Apriori 算法 3 步挖掘商品关联规则
购物篮模型 Python 实战Apriori 算法 3 步挖掘商品关联规则在零售和电商领域理解顾客的购买行为模式至关重要。你是否好奇为什么超市总把啤酒和尿布放在一起这背后正是购物篮分析的魔力。本文将带你用 Python 的mlxtend库通过 Apriori 算法三步实现商品关联规则挖掘从原始交易数据中提取有价值的商业洞察。1. 理解购物篮分析的核心指标购物篮分析的核心是发现商品之间的关联规则即如果购买了 A那么很可能也会购买 B。这种关系通过三个关键指标量化支持度Support衡量商品组合出现的频率计算公式为支持度 同时包含A和B的订单数 / 总订单数例如在1000笔订单中有150笔同时购买了牛奶和面包则该组合的支持度为15%。置信度Confidence表示购买A后也购买B的条件概率置信度 同时包含A和B的订单数 / 包含A的订单数如果购买牛奶的订单有200笔其中150笔也买了面包则牛奶→面包的置信度为75%。提升度Lift评估规则的实际价值判断组合是否随机发生提升度 支持度 / (P(A) * P(B))提升度1表示正相关1表示独立1则负相关。当提升度达到3以上通常意味着强关联。提示实际应用中建议初始阈值设置为支持度≥5%置信度≥30%提升度≥1.52. 数据准备与预处理实战开始前我们需要构造适合算法处理的交易数据格式。以下是一个典型的预处理流程import pandas as pd from mlxtend.preprocessing import TransactionEncoder # 原始交易数据示例 transactions [ [牛奶, 面包, 尿布], [可乐, 面包, 尿布, 啤酒], [牛奶, 尿布, 啤酒, 鸡蛋], [面包, 牛奶, 尿布, 啤酒], [面包, 牛奶, 尿布, 可乐] ] # 转换为算法需要的布尔矩阵 te TransactionEncoder() te_ary te.fit(transactions).transform(transactions) df pd.DataFrame(te_ary, columnste.columns_) print(df.head())输出示例啤酒可乐尿布牛奶面包鸡蛋订单1FalseFalseTrueTrueTrueFalse订单2TrueTrueTrueFalseTrueFalse对于真实业务数据通常需要从数据库或CSV加载原始交易记录# 从CSV加载零售数据集 retail pd.read_csv(retail_transactions.csv) # 按订单ID分组生成交易列表 transactions retail.groupby(OrderID)[Product].apply(list).values.tolist()常见预处理步骤包括去除低频商品减少计算复杂度处理缺失值统一商品名称大小写过滤测试订单或异常数据3. Apriori 算法实现与规则提取mlxtend库提供了完整的关联规则挖掘工具链3.1 发现频繁项集from mlxtend.frequent_patterns import apriori # 挖掘频繁项集最小支持度20% frequent_itemsets apriori(df, min_support0.2, use_colnamesTrue) frequent_itemsets.sort_values(support, ascendingFalse, inplaceTrue) print(frequent_itemsets.head())输出示例itemsetssupport0(尿布)1.01(牛奶)0.82(面包)0.83(尿布, 牛奶)0.63.2 生成关联规则from mlxtend.frequent_patterns import association_rules # 从频繁项集提取规则最小置信度70% rules association_rules(frequent_itemsets, metricconfidence, min_threshold0.7) rules.sort_values(lift, ascendingFalse, inplaceTrue) # 添加商品名称列便于解读 rules[antecedents] rules[antecedents].apply(lambda x: , .join(list(x))) rules[consequents] rules[consequents].apply(lambda x: , .join(list(x))) print(rules[[antecedents, consequents, support, confidence, lift]])典型输出结果antecedentsconsequentssupportconfidencelift牛奶, 面包尿布0.61.01.25面包尿布0.81.01.253.3 结果可视化与分析用热力图直观展示高提升度规则import seaborn as sns import matplotlib.pyplot as plt # 创建规则矩阵 pivot rules.pivot(indexantecedents, columnsconsequents, valueslift) plt.figure(figsize(10,6)) sns.heatmap(pivot, annotTrue, cmapYlGnBu, linewidths.5) plt.title(商品关联提升度热力图) plt.tight_layout() plt.show()关键分析维度高支持度高提升度优先实施的组合策略高置信度低支持度小众但精准的推荐负提升度组合避免同时促销的商品4. 商业应用与优化策略4.1 实际业务应用场景货架优化案例某超市分析发现(宠物食品, 啤酒) 提升度2.3(薯片, 碳酸饮料) 提升度1.8 调整货架布局后相关品类销售额提升27%。捆绑销售策略电商平台针对以下规则设计套餐如果 {手机} → {保护壳} (置信度89%) 如果 {咖啡机} → {咖啡豆} (提升度3.2)套餐转化率比单独销售高40%。4.2 算法调优技巧参数调整经验值场景建议支持度建议置信度大型超市(1万SKU)0.01-0.050.3-0.6电商垂直品类0.05-0.10.4-0.7快餐组合分析0.1-0.20.5-0.8处理大规模数据的两种方法# 方法1降低支持度阈值 frequent_itemsets apriori(df, min_support0.01, use_colnamesTrue) # 方法2使用FP-growth算法更高效 from mlxtend.frequent_patterns import fpgrowth frequent_itemsets fpgrowth(df, min_support0.05, use_colnamesTrue)4.3 避免常见陷阱忽略时间因素夏季的啤酒-烧烤组合在冬季可能无效过度依赖算法需结合商品常识如禁止酒类与婴儿食品组合数据代表性不足节假日的购物模式与平日差异显著注意当商品组合的置信度很高但提升度≈1时可能是因单个商品本身购买频率高而非真实关联

最新新闻

日新闻

周新闻

月新闻