
一、项目背景 业务问题1.业务问题 哪些商品经常被一起购买如何设计产品捆绑包或进行交叉销售推荐2.核心模型 Apriori 算法 或 FP-Growth 算法3.这是购物篮分析的经典算法用于发现项集之间的关联规则。二、数据准备1.数据表结构说明2.orders订单主表核心分析表字段名数据类型说明order_idvarchar(255)订单唯一 IDuser_idvarchar(255)用户 ID关联用户表product_idvarchar(255)商品 ID关联商品表quantityvarchar(255)购买数量order_datevarchar(255)下单时间order_statusvarchar(255)订单状态已完成 / 已付款 / 已收货等payment_methodvarchar(255)支付方式unit_pricevarchar(255)商品单价total_amountvarchar(255)订单总金额discountvarchar(255)优惠金额actual_paymentvarchar(255)实付金额RFM 模型 M 指标delivery_datevarchar(255)发货时间receive_datevarchar(255)收货时间review_scorevarchar(255)评价评分review_contentvarchar(255)评价内容3.users 用户基础信息表字段名数据类型说明user_idvarchar(255)用户唯一 IDagevarchar(255)用户年龄gendervarchar(255)用户性别provincevarchar(255)所在省份cityvarchar(255)所在城市registration_datevarchar(255)注册时间member_levelvarchar(255)会员等级account_balancevarchar(255)账户余额credit_scorevarchar(255)信用评分4.user_features 用户特征统计表字段名数据类型说明user_idvarchar(255)用户唯一 IDtotal_spentvarchar(255)累计消费总额order_countvarchar(255)累计订单数completed_ordersvarchar(255)已完成订单数avg_order_amountvarchar(255)平均订单金额browse_countvarchar(255)累计浏览次数click_countvarchar(255)累计点击次数favorite_countvarchar(255)累计收藏次数cart_countvarchar(255)累计加购次数days_since_last_ordervarchar(255)距离上次下单天数order_frequencyvarchar(255)下单频率repurchase_indicatorvarchar(255)复购标识purchase_intentvarchar(255)购买意向consumption_levelvarchar(255)消费等级member_level_scorevarchar(255)会员等级评分5.products 商品基础信息表字段名数据类型说明product_idvarchar(255)商品唯一 IDproduct_namevarchar(255)商品名称categoryvarchar(255)商品分类brandvarchar(255)商品品牌pricevarchar(255)商品单价sales_countvarchar(255)累计销量6.product_features 商品特征统计表字段名数据类型说明product_idvarchar(255)商品唯一 IDtotal_revenuevarchar(255)累计营收total_salesvarchar(255)累计销量completed_countvarchar(255)已完成订单数cancel_countvarchar(255)取消订单数加购_countvarchar(255)累计加购次数收藏_countvarchar(255)累计收藏次数浏览_countvarchar(255)累计浏览次数点击_countvarchar(255)累计点击次数conversion_ratevarchar(255)转化率avg_review_scorevarchar(255)平均评价评分popularity_scorevarchar(255)商品热度评分7.user_behaviors 用户行为日志表字段名数据类型说明behavior_idvarchar(255)行为记录 IDuser_idvarchar(255)用户 IDproduct_idvarchar(255)商品 IDbehavior_typevarchar(255)行为类型浏览 / 点击 / 收藏 / 加购等behavior_timevarchar(255)行为发生时间duration_secondsvarchar(255)行为持续时长秒orders订单表存储所有下单记录是购物篮分析唯一数据源products商品表存储商品 ID、商品名称、品类 category用于维度聚合 其余用户、用户行为、商品特征表用于拓展用户画像分析本次关联挖掘暂未启用。三、整体分析流程数据采集 → 数据清洗 → 探索分析 → RFM 指标计算 → 用户分层 → 用户画像 → 可视化 → 业务策四、代码实现1.环境与数据库配置from datetime import datetime import pymysql import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import warnings # 关联规则建模必备库原代码缺失已补充 from mlxtend.frequent_patterns import apriori, fpgrowth, association_rules import networkx as nx # 全局关闭所有警告字体、运行警告等保证界面整洁 warnings.filterwarnings(ignore) # -------------------------- # 2. Matplotlib 中文乱码 负号显示配置 # 解决Python绘图中文方框、负数不显示问题Windows系统通用配置 # -------------------------- plt.rcParams[font.sans-serif] [SimHei, Microsoft YaHei, PingFang SC, Arial Unicode MS] plt.rcParams[font.family] sans-serif plt.rcParams[axes.unicode_minus] False # -------------------------- # 3. 数据库连接配置MySQL # 适配本地Navicat MySQL数据库根据自己账号密码修改 # -------------------------- DB_CONFIG { host: localhost, # 数据库地址本地固定localhost user: root, # MySQL账号 password: yemengsi0301, # MySQL密码 database: taobao_analysis, # 数据库名 charset: utf8mb4 # 字符集支持表情、特殊字符 } # 创建数据库连接函数 def create_conn(): conn pymysql.connect(**DB_CONFIG) return conn2.数据采集def read_sql_data(sql): 执行SQL查询返回DataFrame数据表 conn create_conn() df pd.read_sql(sql, conn) conn.close() return df def clean_column_names(df): 清洗列名移除隐藏字符、去除首尾空格 df.columns [col.replace(\ufeff, ).strip() for col in df.columns] return df3.构建购物篮数据集建模维度优点缺点本次数据表现单品 product_name精准到具体商品运营可直接做单品捆绑维度爆炸1906 个商品组合共购概率极低挖掘不出任何关联规则品类 category维度大幅降维仅 15 个品类更容易挖掘搭配只能得到品类搭配无法细化单品本次采用此方案Apriori核心原理先找频繁 1 项集→频繁 2 项集… 逐层迭代满足先验性质频繁项集的子集一定频繁非频繁项集超集一定不频繁优点逻辑简单、好理解、规则易解释适合中小数据量缺点多次扫描数据集大数据量运行缓慢FP-Growth核心原理构建 FP 树频繁模式树仅两次遍历数据无需生成候选集优点运算速度极快百万级订单首选缺点树结构抽象原理理解难度更高三大评估指标支持度 Support 同时购买 AB 订单数 / 总有效订单数 → 组合流行度置信度 Confidence 同时购买 AB 订单数 / 仅购买 A 订单数 → 买 A 后顺带买 B 的概率提升度 Lift Confidence / (购买 B 总订单 / 全部订单)Lift1正向强关联适合捆绑Lift1 无关联Lift1 商品互斥不能搭配# 1. 提取订单-商品一对一关联去重同一订单多件同款商品只保留1条记录 df_order_item df_orders_clean[[order_id, product_id]].drop_duplicates() # 2. 关联商品表使用商品分类category建模替代单品名称大幅降维 df_order_merge pd.merge( df_order_item, df_products[[product_id, category]], # 核心改动取分类字段而非商品名 onproduct_id, howleft ) # 剔除分类信息缺失脏数据 df_order_merge df_order_merge.dropna(subset[category]) print(f订单-品类匹配完成共{len(df_order_merge)}条品类购买记录) # 3. 透视表生成购物篮0/1矩阵列改为商品品类维度大幅减少 basket_df pd.pivot_table( datadf_order_merge, indexorder_id, columnscategory, # 核心改动列改为分类category aggfunclambda x: 1, fill_value0 ) # 转换布尔值mlxtend算法强制要求bool输入 basket_bool basket_df.astype(bool) print(f购物篮矩阵生成完成订单数{basket_bool.shape[0]}商品品类总数{basket_bool.shape[1]}) # 诊断统计每个订单同时购买了多少个不同品类 order_category_cnt df_order_merge.groupby(order_id)[category].nunique() print(每个订单包含不同品类数量分布) print(order_category_cnt.value_counts().sort_index()) print(【步骤3 购物篮构建 完成】\n) print(【步骤4 关联规则建模挖掘】) from mlxtend.frequent_patterns import apriori, fpgrowth, association_rules import networkx as nx import pandas as pd # 最低门槛设置 # MIN_SUPPORT 0.001 # MIN_CONFIDENCE 0.3 # MIN_LIFT 1. # 宽松测试阈值 MIN_SUPPORT 0.0003 MIN_CONFIDENCE 0.15 MIN_LIFT 1.05 # 修复后的格式化函数解决tuple拼接报错 def format_item_set(item_set): item_list [] for item in item_set: if isinstance(item, tuple): item_list.append(-.join(map(str, item))) else: item_list.append(str(item)) return ,.join(item_list)# ---------------------- # 4.1 Apriori算法建模 # ---------------------- freq_apriori apriori(basket_bool, min_supportMIN_SUPPORT, use_colnamesTrue) print(频繁项集总条数, len(freq_apriori)) # 空数据兜底分支防止无规则时报错中断程序 if len(freq_apriori) 0: print( * 60) print(⚠️ 重要结论当前全部订单数据中未挖掘到任意满足阈值的商品共购组合) print(原因推测用户大多单次仅购买1件商品跨商品共同购买行为稀缺) print(业务建议平台优先做单品优惠活动暂不推出捆绑套餐、交叉搭配推荐) print( * 60) # 创建空结果表保证后续代码能正常运行不崩溃 apriori_result pd.DataFrame(columns[前置商品A, 后置商品B, support, confidence, lift]) else: # 生成关联规则 rules_apriori association_rules(freq_apriori, metricconfidence, min_thresholdMIN_CONFIDENCE) # 筛选正向高关联组合 rules_apriori rules_apriori[rules_apriori[lift] MIN_LIFT].sort_values(lift, ascendingFalse) # 转换商品集合为可读字符串 rules_apriori[前置商品A] rules_apriori[antecedents].apply(format_item_set) rules_apriori[后置商品B] rules_apriori[consequents].apply(format_item_set) # 提取业务核心字段 apriori_result rules_apriori[[前置商品A, 后置商品B, support, confidence, lift]].reset_index(dropTrue) # 新增关键过滤剔除【同一个商品自己关联自己】的无效垃圾规则 apriori_result apriori_result[apriori_result[前置商品A] ! apriori_result[后置商品B]] # 导出Excel apriori_result.to_excel(Apriori商品关联规则结果.xlsx, indexFalse) print(fApriori挖掘有效强关联规则共{len(apriori_result)}条) print(Apriori Top10高搭配组合) print(apriori_result.head(10))rule_df apriori_result # 分层1超高强关联固定优惠套装/礼盒lift≥3置信度≥0.7 bundle_package rule_df[(rule_df[lift] 3) (rule_df[confidence] 0.7)] # 分层2中等关联商品详情页/购物车交叉推荐1.1≤lift3 cross_recommend rule_df[(rule_df[lift] 1.1) (rule_df[lift] 3)] # 分层3多件组合三件及以上商品适合大促满减 multi_goods rule_df[(rule_df[前置商品A].str.count(,) 1) | (rule_df[后置商品B].str.count(,) 1)] # 生成可直接使用的运营方案文本 strategy_text f # 商品捆绑销售落地运营策略报告 ## 一、长期固定捆绑套餐天然强搭配组合 适用首页套装专区、礼盒、组合特惠套餐总价优惠5%-15% 代表组合清单 {bundle_package.to_string()} with open(捆绑销售运营策略.txt, w, encodingutf-8) as f: f.write(strategy_text) print( 强捆绑套餐组合必做套装 ) print(bundle_package) print(\n 交叉推荐商品组合 ) print(cross_recommend.head(8))4.数据可视化plt.rcParams[font.sans-serif] [SimHei, Microsoft YaHei] plt.rcParams[axes.unicode_minus] False # 判断是否存在有效规则无规则则提示无法绘图 if len(apriori_result) 0: print(⚠️ 无有效商品关联规则无法生成关联网络图) else: G nx.Graph() top_rules apriori_result.head(40) for _, row in top_rules.iterrows(): a_goods row[前置商品A] b_goods row[后置商品B] link_weight row[lift] G.add_edge(a_goods, b_goods, weightlink_weight) pos nx.spring_layout(G, seed12) edge_weights [G[i][j][weight] for i, j in G.edges()] nx.draw( G, pos, with_labelsTrue, node_size1200, font_size7, widthnp.array(edge_weights)/8, alpha0.8 ) plt.title(商品品类搭配关联网络图, fontsize14) plt.savefig(商品关联网络图.png, dpi300, bbox_inchestight) plt.show() print(网络图图片已保存至本地文件夹)因无任何有效关联规则三层策略表全部为空。业务落地建议短期放弃捆绑套餐、跨品类交叉推荐运营活动重心调整为单品直降、单品优惠券长期通过人工搭配活动引导用户一单多品类采购积累样本后重新建模。五、项目踩坑总结1.本次数据集核心问题用户购物习惯单次下单仅采购单一品类商品无跨品类共购样本单品维度过于分散直接单品建模维度高达 1906 个几乎无共购组合。改用品类聚合建模降低矩阵维度绘图代码增加模拟数据兜底保证可视化效果展示增加订单品类数量诊断代码快速定位无规则根源。运营上线品类捆绑套餐、满减活动引导用户一单多品类购买商品详情页配置搭配推荐提升跨品类共购订单量积累混合品类订单后重新执行购物篮分析。