基于市场篮子分析的可视化技术

在与利益相关者会议即将开始之际,心想:“现在是展现成果的时刻!”准备了一个精彩的演示文稿,对自己的工作充满信心。然而,在演示进行到三十分钟时,竭尽全力向利益相关者解释提升、支持和置信度在想象中的三维空间中的概念,但他们似乎并不买账,认为这项技术过于复杂。会议以关键利益相关者的一句话结束:“能创建一个更简单、更直观的东西吗?”

这促使回到起点,开发出一种简单的可视化技术来解释市场篮子分析。这种技术的核心思想是:文本挖掘中使用的算法可以用来创建市场篮子分析中的关系图。市场篮子分析是零售业广泛使用的分析工具,但其应用并不仅限于零售业。不同行业的各种交叉销售策略都可以利用市场篮子分析来制定。网络上关于市场篮子分析的理论有很多内容,但很少看到有关如何可视化市场篮子分析的文章。在本文中,将利用一些文本挖掘算法来获取这样的视觉图。

一些基本定义

支持度(Support):支持度简单地说是事件发生的概率。如果有一个购买产品A的事件,支持度(A)就是包含A的交易数量除以总交易数量。

置信度(Confidence):置信度本质上是在B已经发生的情况下,事件A发生的条件概率。

如需更详细的定义,请参考之前的文章。

导入数据集

任何分析的第一步都是引入数据集。使用虚拟数据来演示这个应用。数据包含了12000笔交易的详细信息,每笔交易包含3个产品。以下是导入存储在CSV文件中的交易数据的代码。

txn_data <- read.csv("Retail_Data.csv") summary(txn_data)

如所见,每笔交易都有3个产品。产品1只包含A、B、C和D。产品2包含E、F和G。产品3包含H和I。所有三个产品都是互斥的。

创建“项目-交易”矩阵

这是在文本挖掘中学到的一个概念,它也非常适合这个应用。首先创建一个带有每个产品标志的矩阵。总共有9个产品,因此生成9个向量来捕获这些标志。以下是生成9个向量并将它们组合成项目文档矩阵的代码。

# 初始化向量 A <- numeric(0) B <- numeric(0) C <- numeric(0) D <- numeric(0) E <- numeric(0) F <- numeric(0) G <- numeric(0) H <- numeric(0) I <- numeric(0) # 准备标志度量 for ( i in 1:nrow(txn_data)) { if (txn_data$Prod1[i] == "A") A[i] <- 1 else A[i]<-0 if (txn_data$Prod1[i] == "B") B[i] <- 1 else B[i]<-0 if (txn_data$Prod1[i] == "C") C[i] <- 1 else C[i]<-0 if (txn_data$Prod1[i] == "D") D[i] <- 1 else D[i]<-0 if (txn_data$Prod2[i] == "E") E[i] <- 1 else E[i]<-0 if (txn_data$Prod2[i] == "F") F[i] <- 1 else F[i]<-0 if (txn_data$Prod2[i] == "G") G[i] <- 1 else G[i]<-0 if (txn_data$Prod3[i] == "H") H[i] <- 1 else H[i]<-0 if (txn_data$Prod3[i] == "I") I[i] <- 1 else I[i]<-0 } final.mat <- rbind(A,B,C,D,E,F,G,H,I)

一旦有了交易-项目矩阵,就该创建一个项目-项目相关性矩阵了。使用了一个简单的数学公式来实现这一点。将交易-项目矩阵与其自身的转置相乘,得到项目-项目相关性矩阵。在这个矩阵中,对角线上的数字给出了支持度的指示,而所有其他数字给出了置信度。使用这两个数字来构建关系图。以下是构建矩阵和图形的代码。

# 创建关系矩阵 termMatrix <- final.mat %*% t(final.mat) # 创建图形 library(igraph) # 从上述矩阵构建图形 g <- graph.adjacency(termMatrix, weighted=T, mode = "undirected") # 移除环 g <- simplify(g) # 设置标签和顶点的度数 V(g)$label <- V(g)$name V(g)$degree <- degree(g) # 设置种子以使布局可重现 set.seed(3952) layout1 <- layout.fruchterman.reingold(g) plot(g, layout=layout1) plot(g, layout=layout.kamada.kawai) tkplot(g, layout=layout.kamada.kawai)

目前还没有将置信度或支持度的强度纳入图形中。在这个图中,产品A和B没有连接。这只是因为他们在任何交易中从未共同存在过。这个图可以用来可视化负提升项目。这些项目不应该被放置在一起。下一步是将每个产品的支持度纳入视觉图中。

V(g)$label.cex <- 2.2 * V(g)$degree / max(V(g)$degree)+ .2 V(g)$label.color <- rgb(0, 0, .2, .8) V(g)$frame.color <- NA egam <- (log(E(g)$weight)+0.2) / max(log(E(g)$weight)+0.2)

在这里,已经将每个产品的支持度纳入了考虑。如所见,H和I形成了最大的字母,而A、B、C和D形成了最小的字母。这是支持度高低的指示。可以从最初的频率分布中验证这些推断。下一步是将置信度也纳入关系线宽度中。

E(g)$color <- rgb(.5, .5, 0, egam) E(g)$width <- egam # 在layout1中绘制图形 plot(g, layout=layout1) tkplot(g, layout=layout.kamada.kawai)

最终的图形使整个故事变得清晰。已经看到H和I拥有最高的支持度。现在也清楚地看到E-I、I-F和H-F具有很高的置信度。因此,如果客户购买了产品F,他们很可能也会购买产品H和I。因此,可以从这个分析中推断出以下规则:

  1. 如果客户购买了E,他们很可能会购买I。
  2. 如果客户购买了F,他们很可能会购买I。
  3. 如果客户购买了F,他们很可能会购买H。
  4. 如果客户购买了I,他们购买H的可能性很小。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485