写在前面
—— 超越频繁项集,挖掘商品语义关联与互补性,驱动更智能的推荐与组合策略
今天,我们将把目光转向另一个电商运营的核心场景:购物篮分析 (Market Basket Analysis),并探索如何利用 LLM 为其注入 “语义理解” 的能力,从而挖掘出远超传统方法的深度洞察。
传统的购物篮分析,最经典的算法莫过于 Apriori。它通过计算 支持度 (Support)、置信度 (Confidence) 和 提升度 (Lift) 等指标,能够有效地发现那些 经常被用户同时购买的商品组合(频繁项集和关联规则)。例如,我们可能会发现:
{牛奶, 面包} -> {黄油}
(买了牛奶和面包的人,有较高概率会买黄油){纸尿裤} -> {啤酒}
(经典的“啤酒与尿布”案例)
这些发现对于优化商品陈列、设计捆绑促销、进行基础的交叉推荐等无疑是有价值的。
但是,这种基于“共现频率”的分析方法,也存在明显的局限性:
- 无法理解“为什么”: 它告诉我们 A 和 B 经常 一起买,但无法解释 为什么。是因为它们 功能互补(如相机和存储卡)?风格搭配(如某款连衣裙和某款项链)?替代品关系(用户可能对比后选择了其中一个,但下次可能买另一个)?还是仅仅因为 促销捆绑?缺乏对商品 内在关系 的理解。
- 难以发现“新品”或“长尾”关联: Apriori 算法依赖于足够高的 支持度(出现频率),对于那些 销量不高但潜力巨大 的新品,或者 购买频次较低但搭配性很强 的长尾商品,传统方法很难挖掘出有意义的关联规则。
- 忽略商品“本质”: 它将 “iPhone 15 Pro 充电线” 和 “Apple USB-C to Lightning 数据线” 视为两个完全不同的商品,除非我们手动进行大量的 商品归一化或打标签 工作,否则无法识别它们在功能上的高度相似性。
- 推荐缺乏“新意”和“理由”: 基于高频共现的推荐往往容易陷入“马太效应”,总是推荐那些热门组合,难以给用户带来惊喜。同时,推荐理由也常常是“购买了 A 的人也购买了 B”,缺乏更具说服力的解释。
如何突破这些瓶颈,让购物篮分析更“智能”,推荐更“懂你”?
答案依然指向我们正在探索的强大工具——大语言模型 (LLM),特别是其 理解文本语义 和 生成嵌入向量 (Embeddings) 的能力!
本篇博客,我们将实战演练:
- 快速回顾传统关联规则挖掘 (Apriori) 的基本概念与局限。
- 引入基于 LLM Embeddings 的语义相似度计算,发现“看起来不像但本质相似”的商品。
- 探索挖掘商品间“互补性”关系的新思路 (结合 Embeddings 与 LLM 推理)。
- 讨论如何将语义关联应用于更智能的商品推荐策略。
- 提供 Python 代码示例的核心思路与关键实现。
通过本篇学习,你将掌握利用 LLM 升级购物篮分析的方法,从简单的共现统计迈向更深层次的语义关联挖掘,为你的推荐系统和营销策略注入新的智能!
一、温故知新:传统关联规则挖掘 (Apriori) 与其局限
在深入 LLM 之前,我们先简单回顾下 Apriori 算法的核心概念(如果你不熟悉,可以查阅相关资料或我们之前的机器学习初步介绍):
- 项集 (Itemset): 一组一起出现的商品集合,例如
{牛奶, 面包}
。 - 支持度 (Support): 一个项集在所有交易中出现的频率(比例)。
Support({牛奶, 面包}) = 同时包含牛奶和面包的订单数 / 总订单数
。支持度用于筛选掉不常见的项集。 - 置信度 (Confidence): 规则
X -> Y
的置信度表示购买了项集 X 的用户中,有多大比例也购买了项集 Y。Confidence({牛奶, 面包} -> {黄油}) = Support({牛奶, 面包, 黄油}) / Support({牛奶, 面包})
。置信度衡量规则的可靠性。 - 提升度 (Lift): 规则
X -> Y
的提升度表示购买项集 X 对购买项集 Y 的概率提升了多少倍 (相比于不考虑 X 单独购买 Y 的概率)。Lift(X -> Y) = Confidence(X -> Y) / Support(Y)
。Lift > 1
: X 和 Y 之间存在正相关关系(购买 X 提升了购买 Y 的概率)。Lift < 1
: X 和 Y 之间存在负相关关系。Lift = 1
: X 和 Y 之间可能独立。
Python 实现 (常用库): mlxtend
库提供了 Apriori 和关联规则挖掘的方便实现。
# 伪代码示例 (假设已有 one-hot 编码的交易 DataFrame: df_trans_onehot)
# from mlxtend.frequent_patterns import apriori, association_rules
# # 1. 计算频繁项集 (设置最小支持度阈值)
# frequent_itemsets = apriori(df_trans_onehot, min_support=0.01, use_colnames=True)
# # 2. 生成关联规则 (设置最小置信度或提升度阈值)
# rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.5)
# rules = rules.sort_values(['confidence', 'lift'], ascending=[False, False])
# print("挖掘出的关联规则:\n", rules)
局限性重述:
- 依赖高频共现: 难以发现低频但有价值的关联。
- 忽略商品语义: 无法理解商品之间的内在联系。
- 无法处理“未购买”信息: