基于 GoodsOrder.csv 与 GoodsTypes.csv, 严格复现书中 Apriori 案例的代码逻辑、参数设定和输出口径, 再从数据、方法、模型和决策表达四个维度做诊断与优化。
结论导向问题:哪些商品该相邻陈列?哪些组合值得捆绑?仅有规则表为什么还不够支撑经营决策?
分析路径:先复现关联规则建模流程,再从结果解释、方法改进和经营应用三个层面展开。
构建零售商品的 Apriori 关联规则模型,分析商品之间的关联性;再根据模型结果给出销售策略。
本次分析以既有零售案例为基础,先复现关联规则挖掘流程,再对结果进行诊断、优化与经营解释。
书页中写的是 9835 个购物篮、169 个商品、43367 条记录;当前项目下实际 CSV 是 9356 个购物篮、158 个商品、41080 条记录。
所以:代码逻辑可以完全复现,结果口径可以完全复现,但具体数值会跟着当前 CSV 版本变化。
这说明结果解读需要同时结合数据版本、参数设定与输出口径,不能孤立看待单张结果表。
先确认数据规模、字段类型、商品热度和品类分布,避免直接建模但不了解数据。
把明细长表压缩成以订单为单位的事务列表,这是 Apriori 计算支持度的前提。
按最小支持度和最小置信度筛频繁项集,再以 lift>1 剔除随机共现。
把规则从“算法输出”翻译成“陈列、联促、补货与区域布局建议”。
if __name__ == '__main__':
dataSet = data_translation
L, supportData = apriori(dataSet, minSupport=0.02)
rule = gen_rule(L, supportData, minConf=0.35)
# 参数解释
# support = 0.02 保证规则不是极小概率噪声
# confidence = 0.35 保证前件对后件有解释力
# lift > 1 保证不是独立随机共现
| 字段 | 含义 | 分析作用 |
|---|---|---|
| id | 购物篮或订单编号 | 用于把多行商品明细合并成一个事务 |
| Goods | 订单中购买的具体商品 | 用于统计销量、构造频繁项集 |
| Types | 商品所属品类 | 用于做品类结构分析和品类级关联规则 |
当前 CSV 是一行一件商品,不是一行一个订单。
建模时真正的单位是购物篮,也就是一次购买行为。
如果不先按 id 合并,支持度和置信度都会失真。
购物篮分析的前提是先确认“明细数据如何变成事务数据”。只有记录粒度一致,后续的支持度和规则才具备解释意义。
这一段先做 数据读取、info 查看 和 商品销量聚合。目的不是预测销量,而是找出哪个商品在购物篮网络中最可能成为核心节点。
这一步将销量表与品类映射表合并,再对 Types 聚合。原本分散的单品销量被提升为品类结构,适合从经营资源配置角度解释。
| id | Goods | Types |
|---|---|---|
| 1001 | 全脂牛奶 | 饮料 |
| 1001 | 面包卷 | 西点 |
| 1001 | 黄油 | 米粮调料 |
按 id 聚合后,一个购物篮会变成:[全脂牛奶, 面包卷, 黄油]
因为频繁项集计算的是“同一个订单里共同出现了哪些商品”。如果仍然按明细行计算,算法会把同一购物篮拆散,导致共购关系被低估。
data['Goods'] = data['Goods'].apply(lambda x: ',' + x)
data = data.groupby('id').sum().reset_index()
data['Goods'] = data['Goods'].apply(lambda x: [x[1:]])
data_list = list(data['Goods'])
data_translation = []
for i in data_list:
p = i[0].split(',')
data_translation.append(p)
订单商品明细长表
按 id 聚合并拆分商品字符串
每个订单对应一个商品列表
这一步把算法之前的数据准备过程显式展开,说明频繁项集分析依赖的并不是原始明细表,而是按订单组织后的事务型数据。
先找在大量购物篮中反复出现的商品组合。没有达到最小支持度的组合,后面不会进入规则生成。
表示某组合在全部购物篮中出现的比例。支持度低,说明组合太稀疏,业务上不稳定。
表示买了前件商品后,再买后件商品的条件概率。置信度越高,规则的解释力越强。
表示前件出现后,后件出现的概率相对于随机购买是否被显著放大。只有 lift>1 才说明存在正向联动。
如果“其他蔬菜 ⇒ 全脂牛奶”的置信度为 0.3868,意思是买其他蔬菜的顾客中,大约 38.68% 也会买全脂牛奶。
如果该规则 lift 为 1.44,则说明这种共购概率比随机购买全脂牛奶高出 44% 左右,不是巧合。
在 support=0.02、confidence=0.35、lift>1 的筛选下,最终得到 28 条 规则。代表性规则如下:
| lhs | rhs | support | confidence | lift |
|---|---|---|---|---|
| {其他蔬菜} | {全脂牛奶} | 0.078666 | 0.386758 | 1.439915 |
| {酸奶} | {全脂牛奶} | 0.058893 | 0.401603 | 1.495186 |
| {根茎类蔬菜} | {其他蔬菜} | 0.049808 | 0.434701 | 2.137187 |
全脂牛奶多次作为后件出现,说明它是购物篮中的中心商品。
蔬菜之间的规则 lift 更高,说明部分共购关系更像同场景采购。
规则条数不算多,但已经足够说明商品之间存在稳定的共购结构。
support = 7.87%,confidence = 38.68%,lift = 1.44。
果蔬购买与基础饮品采购具有明显重叠,接近家庭日常采购场景。
confidence 达到 40.16%,说明乳制品内部存在稳定的连带购买。
顾客并不是只买单一饮品,而是在同一消费场景下进行组合采购。
lift 超过 2.13,是当前展示规则中联动性最强的一类。
顾客在购买蔬菜时更像是在完成一篮子食材采购,而不是单点补货。
书中统计规模与当前 CSV 不一致,说明案例结果会受到数据版本变化影响,不能机械照搬书页数值。
现有数据只有订单、商品和品类,缺少时间、门店、价格和用户属性,导致分析结论更偏共购识别,难以直接支撑精细运营。
全脂牛奶等高频商品会在多条规则中反复出现,容易抬高置信度,使规则表看起来很多,但差异化信息有限。
Apriori 需要反复扫描候选项集,适合作为方法展示,但在更大规模数据上并不是效率最优的求解方式。
单品级规则可以说明共购关系存在,但不一定能直接转化为货架、区域和促销动作,业务解释层仍然偏薄。
版本差异、维度不足
热门商品偏置、算法效率
规则解释力和落地性不足
当支持度和置信度阈值发生变化时,规则数量可能快速膨胀或收缩,说明模型输出对参数较敏感。
若规则过多而且大量指向同一热门商品,业务方很难判断哪些规则值得优先执行。
从单品到经营动作之间缺少中间层,导致“看得懂结果”与“用得上结果”之间仍然存在距离。
当前指标只衡量共购强弱,没有结合毛利和场景价值,因此高频规则不一定就是高价值规则。
在商品级阈值保持不变的情况下,FP-Growth 仍输出 28 条规则,说明更换求解方式后,核心结论不变,但实现效率更高。
品类级规则能够把“酸奶带出牛奶”提升为“饮料与果蔬共同带动其他品类”,更适合转换为经营动作。
品类级规则如果沿用商品级阈值,结果会过多,难以阅读,因此必须重新设置支持度和置信度来控制输出规模。
# 路线 A:商品级 FP-Growth goods_freq = fpgrowth(goods_matrix, min_support=0.02) goods_rules = association_rules(goods_freq, metric='confidence', min_threshold=0.35) # 路线 B:品类级 FP-Growth type_freq = fpgrowth(type_matrix, min_support=0.15) type_rules = association_rules(type_freq, metric='confidence', min_threshold=0.55) type_rules = type_rules[type_rules['lift'] > 1]
保留 support=0.02、confidence=0.35 的原因,是为了与书本案例在结果口径上保持一致,便于完成复现验证。
品类数量远少于商品数量,若继续沿用低阈值,会产生大量共现规则。把阈值提高到 0.15 / 0.55,可以过滤掉弱规则和泛化规则。
即使置信度较高,如果提升度不超过 1,也可能只是热门品类带来的自然高频共现,不足以说明正向联动关系。
品类级规则 1269 条,信息过载,难以筛选。
压缩到 28 条,数量与商品级结果相当。
规则更集中,更容易形成经营重点。
| 方案 | 优势 | 更适合回答的问题 |
|---|---|---|
| 书本 Apriori | 最接近教材流程 | 是否完成原案例复现 |
| FP-Growth 商品级 | 效率更高,结果一致 | 哪些单品存在稳定共购 |
| FP-Growth 品类级 | 解释层级更高 | 哪些品类组合值得陈列与联促 |
现阶段更适合输出通用陈列、基础联促和补货优先级,而不适合直接下沉到门店差异化运营和会员个性化推荐。
优化陈列和联合促销。
增加时间与门店维度。
形成精细化推荐体系。
商品级 Apriori / FP-Growth 适合用于验证书本案例、说明单品共购关系。
品类级 FP-Growth 更适合用于支持货架布局、区域陈列和组合促销等经营动作。
全脂牛奶、酸奶、其他蔬菜相关规则最集中,应作为核心补货和重点陈列商品。
品类级规则表明顾客在这些品类之间存在稳定联动,可做家庭采购场景化摆放。
商品级用于捆绑推荐,品类级用于货架区位和促销主题,不要混用。
购物篮分析的核心价值 在于从共购关系中识别稳定消费场景,并将其转换为可执行的陈列、联促和补货策略。