跳到主要内容
版本:6.6.0

如何在观远BI平台做购物篮分析

什么是购物篮分析?

购物篮分析,最早是为了发现超市销售数据库中不同商品之间的关联关系。大家经常听到的啤酒与尿不湿的案例就是购物篮分析的一个经典案例。购物篮分析的目的在于,通过对用户消费记录数据的挖掘和分析,找出用户购买习惯的一些潜在规律,从而可以为用户提供他们想要的搭配或套餐。套餐销量的提升一般会带来客单价的提升,从而可以提高公司收益。

怎么做购物篮分析?

做购物篮分析一般以订单(购物小票)为视角,即分析一次购买行为中同时购买商品A与商品B的关联性。通俗地说,也就是用户购买商品A的行为,是否会对其购买商品B产生影响?

购物篮分析的关键衡量指标有3个:支持度、置信度、提升度。要计算这3个指标,需要4个基础指标:商品A的订单数、商品B的订单数、商品组合的订单数、总订单数。

以下表格是对这7个指标的解释:

指标计算公式含义举例
商品A的订单数num(A)含商品A的订单的去重个数600
商品B的订单数num(B)含商品B的订单的去重个数400
商品组合的订单数num(A∩B)同时包含商品A和商品B的订单的去重个数150
总订单数num(I)总的去重订单数10000
支持度num(A∩B)/num(I)A和B两个商品同时被购买的概率,代表了这个组合的重要程度。只有分析支持度高的商品组合才有业务价值。150/10000=1.5%
置信度[num(A∩B)/num(I)]/[num(A)/num(I)]=num(A∩B)/num(A)在购买商品A的情况下,有多大概率再买商品B,也就是买商品A对商品B产生了多大的影响。150/600=25%
提升度A对B的置信度/B的支持度=[num(A∩B)/num(A)]/[num(B)/num(I)]先购买商品A再购买商品B的概率 vs. 不计其他商品的影响,自然购买商品B的概率。若A对B的提升度>1,则表示买A再买B的概率大于本身买B的概率,就表示用户买了A之后再买B的意愿要比自然情况下买B的意愿要强烈,商品组合AB会对商品B的销量带来提升。(150/600)/(400/10000)=6.25

观远BI平台落地购物篮分析

在观远BI平台上做购物篮分析,可以通过创建卡片做即席分析,也可以使用Smart ETL工具对订单数据做处理后再做购物篮分析。在卡片上做的购物篮分析方案是尝试验证性的计算,并且计算复杂较占用系统资源,因此推荐在Smart ETL中做计算。案例数据4万多行,使用Smart ETL工具3秒中就运算完成了。本次内容和大家分享如何使用Smart ETL工具做购物篮分析,若有需要了解在卡片上的解决方案,可以访问观远云应用市场上的案例库

在使用Smart ETL工具对订单数据做处理后再做可视化的展示,可以得到如下的分析结果:

image.png

接着让我们看一下在观远BI平台做购物篮分析的步骤:

首先,我们使用的数据源为最常见的包含日期、门店、商品、订单号的消费流水数据。

image.png

然后,我们使用这份消费流水数据作为输入数据源,在ETL中做数据的处理。整个ETL的操作步骤不算复杂,过程如下图所示:

image.png

计算逻辑推导

在动手开发ETL前,我们需要先梳理一下计算逻辑。其实做购物篮分析的4个基础指标:商品A的订单数、商品B的订单数、商品组合的订单数、总订单数,只有商品组合的订单数这1个基础指标是比较难算的,是做购物篮分析的难点所在。

我们可以用一份简单的数据来推导下该怎么计算商品组合的订单数。例如下表,我们最终需要计算出每个商品组合有多少个订单数。

商品组合商品1商品2订单数
ABAB3
ACAC2
ADAD1
BCBC2
BDBD1
CDCD1

那往回倒推一步,我们要先算出每个订单都有哪些商品组合。例如下表所示:

单号商品商品组合
订单1A
订单2A,BAB
订单3A,B,CAB,AC,BC
订单4A,B,C,DAB,AC,AD,BC,BD,CD

所以计算商品组合的订单数这个指标的关键是要穷举出每个订单有哪些商品组合。穷举的过程其实类似于我们高中时候学的排列组合问题。

以上表中的订单4为例,一共有A,B,C,D 4件商品。

  1. 我们可以先分别取2种商品放到2个盒子里面:盒子1放商品1 -> 盒子2放商品2,但商品2是所有商品里面除了商品1外任意的商品。这样一共有12种排列的可能性。

  2. 然后我们把2个盒子里面的商品放入1个大盒子里面,再做去重,只保留含有相同商品的大盒子的其中1个。通过去重后,我们得到了6种商品组合。

通过这份简单数据的逻辑推导,我们把一个看似复杂的计算商品组合的问题回归到了先排列再去重的计算组合的数学问题。穷举了两两商品的组合,其实用这个解题思路,也可以解决3件商品组合、4件商品组合的问题。

盒子1盒子2大盒子
ABAB
ACAC
ADAD
BABA
BCBC
BDBD
CACA
CBCB
CDCD
DADA
DBDB
DCDC

ETL开发实现

接下去就是在观远BI平台上实现这个计算逻辑。

Step1:数据去重和过滤

  image.png

  • 添加筛选条件过滤数据源,例如日期大于等于2021-01-01。

  • 使用分组聚合对订单号和商品做去重,将订单号、商品ID、商品名称拖入维度栏。

  • 添加计算字段:商品种类数。COUNT([商品ID]) OVER(PARTITION BY [订单号])

  • 添加筛选条件,过滤商品种类数大于等于2。

Step2:计算两两商品组合的订单数。

image.png

  • 添加计算字段:商品序号列表。array_sort(collect_list([商品ID]) over(partition by [订单号]))--罗列一个订单内的所有商品ID,并排序

  • 添加计算字段:商品B列表。filter([商品序号列表], x -> x<>[商品ID])--过滤掉商品A的ID就是商品B的列表

  • 添加计算字段:商品B序号。explode([商品B列表])--展开商品B序号

  • 添加计算字段:商品组合。array_sort(array([商品ID],[商品B序号]))--使用array函数创建商品组合的数组(将2个盒子里面的商品放入1个大盒子里面),并使用array_sort函数对数组做排序。

  • 使用分组聚合对订单号和商品组合做去重,将订单号、商品组合拖入维度栏。

  • 添加计算字段:商品A序号。[商品组合][0]

  • 添加计算字段:商品B序号。[商品组合][1]

  • 使用分组聚合计算商品组合的订单数,将商品A序号、商品B序号拖入维度栏;订单号拖入数值栏,聚合方式设置为去重计数,别名为商品组合的订单数。

Step3:关联得到商品A名称、商品A的订单数、商品B名称、商品B的订单数、总订单数。

image.png

分支1:  

  • 使用分组聚合计算商品的订单数,将商品ID、商品名称拖入维度栏;订单号拖入数值栏,聚合方式设置为去重计数,别名为订单数。

  • 添加关联数据,商品组合的商品A序号 关联 商品ID。重命名,得到商品A名称、商品A的订单数。

               image.png

  • 添加关联数据,商品组合的商品B序号 关联 商品ID。重命名,得到商品B名称、商品B的订单数。

分支2:

  • 使用分组聚合计算商品的订单数,聚合方式设置为去重计数,别名为订单数。

  • 添加关联数据,常数字段a 关联 常数字段a。重命名,得到总订单数。

              image.png

最后保持并且运行ETL,我们就算出了4个基础指标:商品A的订单数、商品B的订单数、商品组合的订单数、总订单数。然后使用ETL输出的数据集新建卡片,计算商品组合的支持度、置信度、提升度,就可以得到我们想要分析结果啦!

看完了是不是想要马上试一试?也可以联系观远获得购物篮分析的Sample数据源和ETL程序文件哦。