全部
常见问题
产品动态
精选推荐
功能建议

已处理 待处理 {{opt.name}}
已处理 待处理
分析中 已回复 待规划 {{opt.name}}
分析中 已回复 待规划
关联商品发现:通过API挖掘购物车组合规律

管理 管理 编辑 删除

1. 引言

在电商场景中,购物车是用户购买意图最集中的地方。相比单纯的浏览行为,加入购物车的商品往往更能反映真实的消费需求。如果能够从海量购物车数据中挖掘出商品之间的组合规律,就能为推荐系统、营销活动和库存管理提供直接支撑。本文围绕「关联商品发现」这一主题,介绍如何通过API获取购物车数据,并在此基础上挖掘商品组合规律。

2. 核心概念

在动手之前,先厘清几个关键概念,便于后续理解整个挖掘流程。

  • 购物车数据:用户在一次会话中加入购物车的商品集合,通常以订单或会话为单位记录。
  • 关联规则:用于描述商品之间共现关系的规则,例如「购买A的用户也倾向于购买B」。
  • 支持度:某个商品组合在所有购物车中出现的比例,反映组合的普遍程度。
  • 置信度:在包含A的购物车中,同时包含B的比例,反映规则的可靠性。
  • 提升度:衡量A与B之间关联强度相对于随机共现的提升程度。

3. 数据获取:通过API拉取购物车记录

挖掘组合规律的第一步,是把购物车数据从业务系统中取出来。这里以REST API为例,说明如何分页拉取购物车记录,并整理成后续分析所需的格式。


import requests

def fetch_cart_data(api_url, token, page_size=100):
    headers = {"Authorization": f"Bearer {token}"}
    page = 1
    all_carts = []
    while True:
        resp = requests.get(
            api_url,
            headers=headers,
            params={"page": page, "page_size": page_size},
            timeout=10
        )
        resp.raise_for_status()
        data = resp.json()
        items = data.get("items", [])
        if not items:
            break
        all_carts.extend(items)
        total = data.get("total", 0)
        if len(all_carts) >= total:
            break
        page += 1
    return all_carts

上述代码按页拉取数据,直到取完所有记录。实际项目中,建议在循环中加入重试和限流逻辑,避免对上游服务造成压力。

4. 数据清洗与格式化

原始接口返回的字段往往比较杂乱,需要先做清洗,再转换成适合关联分析的格式。核心工作包括去重、过滤异常记录,以及把每个购物车中的商品ID整理成列表。


def clean_and_format(carts):
    cleaned = []
    for cart in carts:
        cart_id = cart.get("cart_id")
        product_ids = cart.get("product_ids", [])
        if not cart_id or not product_ids:
            continue
        # 去重并保持顺序
        unique_ids = list(dict.fromkeys(product_ids))
        if len(unique_ids) < 2:
            continue
        cleaned.append(unique_ids)
    return cleaned

这里过滤掉商品数少于2的购物车,因为单个商品的购物车无法构成组合关系。清洗后的数据是一个列表的列表,每个内层列表代表一个购物车中的商品集合。

5. 挖掘组合规律

数据准备好之后,就可以进行关联分析。这里使用经典的Apriori思路,先统计频繁项集,再生成关联规则。为便于演示,下面给出一个轻量实现,不依赖第三方库。


from collections import defaultdict
from itertools import combinations

def find_frequent_pairs(carts, min_support=0.01):
    total = len(carts)
    pair_count = defaultdict(int)
    for items in carts:
        for pair in combinations(sorted(items), 2):
            pair_count[pair] += 1
    frequent = {
        pair: count / total
        for pair, count in pair_count.items()
        if count / total >= min_support
    }
    return frequent

def generate_rules(frequent_pairs, carts, min_confidence=0.3):
    total = len(carts)
    item_count = defaultdict(int)
    for items in carts:
        for item in set(items):
            item_count[item] += 1
    rules = []
    for (a, b), support in frequent_pairs.items():
        conf_ab = support / (item_count[a] / total)
        conf_ba = support / (item_count[b] / total)
        if conf_ab >= min_confidence:
            rules.append((a, b, support, conf_ab))
        if conf_ba >= min_confidence:
            rules.append((b, a, support, conf_ba))
    return rules

上述代码先统计两两共现的商品对,再根据支持度和置信度筛选出有价值的规则。实际生产环境中,可以替换为mlxtend或Spark MLlib等成熟方案,以应对更大规模的数据。

6. 结果解读与业务应用

挖掘出的规则需要结合业务场景进行解读。以下是一个简单的规则输出示例,展示商品A与商品B之间的支持度、置信度和提升度。

商品A商品B支持度置信度提升度
手机壳钢化膜0.0520.613.2
咖啡豆手冲壶0.0380.472.8
运动鞋运动袜0.0450.552.5

提升度大于1说明两个商品之间存在正向关联。例如手机壳与钢化膜的提升度为3.2,意味着同时购买这两者的概率远高于随机水平。这类规则可以直接用于以下场景:

  • 购物车推荐:用户加入手机壳后,在结算页推荐钢化膜。
  • 捆绑促销:将高关联商品打包销售,提升客单价。
  • 货架陈列:在实体场景中把关联商品摆放在相邻位置。

7. 注意事项与优化方向

关联挖掘虽然直观,但在实际落地时需要注意几个问题。

  • 数据时效性:购物车规律会随季节和促销活动变化,建议定期重新训练模型。
  • 冷门商品:支持度阈值过低会引入大量噪声,过高则会漏掉长尾组合,需要根据业务目标权衡。
  • 组合爆炸:当商品数量很大时,频繁项集数量会急剧增长,建议引入最大项集限制或使用FP-Growth等更高效的算法。
  • 因果性:关联不等于因果,挖掘出的规则需要结合业务经验验证,避免盲目应用。

8. 总结

本文从API数据获取出发,介绍了购物车数据的清洗、格式化,以及基于支持度和置信度的关联规则挖掘方法,并给出了结果解读和业务应用建议。通过这套流程,可以较为系统地发现商品之间的组合规律,为推荐、营销和运营提供数据支撑。后续可以在此基础上引入时间窗口、用户分层等维度,进一步提升挖掘效果。如有任何疑问,欢迎留言探讨!​


{{voteData.voteSum}} 人已参与
支持
反对
请登录后查看

1f2b05e1edf5 最后编辑于2026-08-24 16:56:24

快捷回复
{{replySubmitting ? '提交中...' : '回复'}}
{{replySubmitting ? '提交中...' : '回复'}}
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
排序 默认正序 回复倒序 点赞倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推荐': '推荐'}}
{{item.is_suggest == 1? '取消推荐': '推荐'}} 【已收集】
{{item.floor}}# 沙发 板凳 地板 {{item.floor}}# 【已收集】
{{item.user_info.title || '暂无简介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打赏
已打赏¥{{item.reward_price}}
{{item.like_count}}
分享
{{item.showReply ? '取消回复' : '回复'}}
删除
{{replySubmitting ? '提交中...' : '回复'}}
{{replySubmitting ? '提交中...' : '回复'}}

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打赏
已打赏¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
{{replySubmitting ? '提交中...' : '回复'}}
{{replySubmitting ? '提交中...' : '回复'}}
收起 展开更多
查看更多
打赏
已打赏¥{{reward_price}}
15
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

{{replySubmitting ? '提交中...' : '回复'}}
{{replySubmitting ? '提交中...' : '回复'}}
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定
打赏金额
当前余额:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
请输入 0.1-{{reward_max_price}} 范围内的数值
打赏成功
¥{{price}}
完成 确认打赏

微信登录/注册

{{ wechatLoginError }}
切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服
CRMEB咨询热线 400-8888-794

扫码领取产品资料

功能清单
思维导图
安装教程
CRMEB开源商城下载 源码下载 CRMEB帮助文档 帮助文档
返回顶部 返回顶部
CRMEB客服