You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建商品共现频率稀疏矩阵用于交叉销售分析

R实现商品交叉销售共现稀疏矩阵方案

核心逻辑:先构建「购物车-商品」二值稀疏矩阵(行对应购物车ID,列对应商品ID,存在购买关系则值为1,否则为0),再通过矩阵转置乘自身的运算,直接得到商品维度的共现矩阵,非对角线元素即为两个商品共同出现在同一购物车的次数,对角线为单个商品的总出现次数。

方案1:Matrix包原生实现(推荐,适配大数据量)

计算效率高、内存占用低,适合十万级以上购物车数据场景。

# 加载稀疏矩阵包
library(Matrix)

# 示例数据
x = data.frame(
  cart_id = c("1","1","1","2","2","3","4","5","5","6"),
  product_id = c("A","B","C","D","A","F","G","A","C","F")
)

# 将ID转为因子固定索引映射
x$cart_id <- factor(x$cart_id)
x$product_id <- factor(x$product_id)

# 构建购物车-商品二值稀疏矩阵
cart_prod <- sparseMatrix(
  i = as.integer(x$cart_id),
  j = as.integer(x$product_id),
  x = rep(1, nrow(x)),
  dimnames = list(levels(x$cart_id), levels(x$product_id))
)

# 矩阵乘法计算共现矩阵
cooccur_mat <- t(cart_prod) %*% cart_prod

# 若不需要商品自身的出现次数,可将对角线置0
diag(cooccur_mat) <- 0

运行后得到的稀疏矩阵结果如下,和预期共现次数完全匹配:

7 x 7 sparse Matrix of class "dgCMatrix"
  A B C D F G
A . 1 2 1 . .
B 1 . 1 . . .
C 2 1 . . . .
D 1 . . . . .
F . . . . . .
G . . . . . .

注:稀疏矩阵中.代表位置值为0

方案2:tidyverse流实现(代码易读,适合小数据量)

通过数据框自连接统计共现次数,逻辑直观,适合熟悉tidyverse语法的场景:

library(tidyverse)
library(Matrix)

all_prod <- unique(x$product_id)

cooccur_df <- x %>%
  # 同购物车内的商品做全配对
  inner_join(x, by = "cart_id", relationship = "many-to-many") %>%
  # 统计每对商品的共现次数
  count(product_id.x, product_id.y, name = "freq")

# 转换为稀疏矩阵格式
cooccur_mat <- sparseMatrix(
  i = as.integer(factor(cooccur_df$product_id.x, levels = all_prod)),
  j = as.integer(factor(cooccur_df$product_id.y, levels = all_prod)),
  x = cooccur_df$freq,
  dimnames = list(all_prod, all_prod)
)

内容的提问来源于stack exchange,提问作者Bart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 11:48:17