数据挖据——如何利用SQL语句实现购物篮分析?

article/2025/3/4 19:07:42

提到购物篮分析,就不得不说到一个无数次被提及的故事——啤酒与尿不湿的故事,这个经典案例常被拿到各种会场、餐桌和文章中,以至于听到耳朵都要磨成茧。购物篮分析,就是分析一段时间内客户购物篮中商品的规律,通过数据分析和数据挖掘,发现用户的消费习惯,尤其是哪些商品经常会一起购买,从而更好用于商品的排列、采购、推广和营销,以此来满足消费者的需要,提高公司收益。
在做购物篮分析时,往往是以订单、产品为最小颗粒度的数据,来分析用户在购买A产品以后,对B产品带来的影响有多大。

1.课前知识预习

购物篮分析的实现,是基于条件概率,也就是贝叶斯公式。在实际应用时,主要会牵扯到3个指标:置信度支持度提升度
将信息展示如下,N代表数量:

指标名称指标说明计算公式举例
产品A的订单数有购买过产品A的订单数量N(A)400
产品B的订单数有购买过产品B的订单数量N(B)300
同时购买产品A和B的订单数同时购买过产品A和B的订单数量N(A∩B)200
总订单数所有订单数量N(I)1000
支持度支持的程度,一般用百分比表示。本例中,A和B的支持度,即A和B同时出现的频率,如果A和B一起出现的频率非常小,那么就说明了A和B之间的联系并不大A和B的支持度=N(A∩B)/ N(I)200/1000=20%
置信度揭示了A出现时,B是否一定会出现,如果出现则其大概有多大的可能出现P(B|A)=P(A∩B) /P(A)=[N(A∩B)/N(I)]/[N(A)/N(I)]=N(A∩B)/N(A)200/400=50%
提升度提升度反映了关联规则中的A与B的相关性,提升度>1且越高表明正相关性越高,提升度<1且越低表明负相关性越高,提升度=1表明没有相关性,即相互独立。P(A→B)=P(B|A)/P(B) =[N(A∩B)/N(I)]/[N(A)/N(I)]/[N(B)/N(I)]=N(A∩B)*N(I)/N(A)/N(B)法1:0.5/(300/1000)=0.5/0.3≈1.67 法2:150*1000/400/300≈1.67

2.实现步骤

为方便演示,构建product_order作为测试表,表数据截图如下:
表
构建数据的代码如下:

--构建测试数据
DROP TABLE IF EXISTS "product_order";
CREATE TABLE "product_order" ("order_id" varchar(100) COLLATE "pg_catalog"."default","product" varchar(50) COLLATE "pg_catalog"."default","qty" int8
)
;INSERT INTO "product_order" VALUES ('1', 'A', 1);
INSERT INTO "product_order" VALUES ('1', 'B', 2);
INSERT INTO "product_order" VALUES ('1', 'C', 3);
INSERT INTO "product_order" VALUES ('1', 'D', 5);
INSERT INTO "product_order" VALUES ('2', 'A', 4);
INSERT INTO "product_order" VALUES ('2', 'C', 2);
INSERT INTO "product_order" VALUES ('3', 'D', 3);

2.1 步骤1:构建两两组合表

先生成两两组合表,效果图如下:
1

实现的SQL代码如下:

--构建两两组合表
SELECT A.order_id,A.product product_a,b.product product_b 
FROMproduct_orderA LEFT JOIN product_order b ON A.order_id = b.order_id;

2.2 步骤2:求两两组合的订单数量

计算出两两组合的订单数量,计算结果如下图所示:
2
实现代码如下:

-- 求两两组合的订单数量
SELECTproduct_a,product_b,COUNT ( DISTINCT order_id ) AS buy_together 
FROM(SELECT A.order_id,A.product product_a,b.product product_b FROMproduct_orderA LEFT JOIN product_order b ON A.order_id = b.order_id ) T 
GROUP BYproduct_a,product_b;

2.3 步骤3:求每个商品的订单数量

汇总计算每个产品的订单数,计算效果如下图:
3
实现代码如下:

-- 求每个商品的订单数量
SELECTproduct,COUNT ( DISTINCT order_id ) product_cnt 
FROMproduct_order 
GROUP BYproduct;

2.4 步骤4:求所有订单数量

汇总计算所有的订单数量,截图如下:
4

实现代码如下图:

--求所有订单数量
SELECT COUNT( DISTINCT order_id ) total_order_cnt 
FROMproduct_order;

2.5 步骤5:求拼接所有基础数据

对所有需要的基础数据进行拼接,数据如下:
2.5

实现代码如下:

--求拼接所有基础数据
SELECTt1.product_a,t1.product_b,t1.buy_together,t2.product_a_cnt,t3.product_b_cnt,t4.total_order_cnt 
FROM(SELECTproduct_a,product_b,COUNT ( DISTINCT order_id ) AS buy_together FROM(SELECT A.order_id,A.product product_a,b.product product_b FROMproduct_orderA LEFT JOIN product_order b ON A.order_id = b.order_id ) T GROUP BYproduct_a,product_b ) t1LEFT JOIN ( SELECT product, COUNT ( DISTINCT order_id ) product_a_cnt FROM product_order GROUP BY product ) t2 ON t1.product_a = t2.productLEFT JOIN ( SELECT product, COUNT ( DISTINCT order_id ) product_b_cnt FROM product_order GROUP BY product ) t3 ON t1.product_b = t3.productLEFT JOIN ( SELECT COUNT ( DISTINCT order_id ) total_order_cnt FROM product_order ) t4 ON 1 = 1;

2.6 步骤6:排除两两如何中产品相同的数据

对A产品和B产品相同的数据进行排除,数据如下:
2.6

实现代码如下:

-- 排除两两如何中产品相同的数据
SELECTt1.product_a,t1.product_b,t1.buy_together,t2.product_a_cnt,t3.product_b_cnt,t4.total_order_cnt 
FROM(SELECTproduct_a,product_b,COUNT ( DISTINCT order_id ) AS buy_together FROM(SELECT A.order_id,A.product product_a,b.product product_b FROMproduct_orderA LEFT JOIN product_order b ON A.order_id = b.order_id ) T GROUP BYproduct_a,product_b ) t1LEFT JOIN ( SELECT product, COUNT ( DISTINCT order_id ) product_a_cnt FROM product_order GROUP BY product ) t2 ON t1.product_a = t2.productLEFT JOIN ( SELECT product, COUNT ( DISTINCT order_id ) product_b_cnt FROM product_order GROUP BY product ) t3 ON t1.product_b = t3.productLEFT JOIN ( SELECT COUNT ( DISTINCT order_id ) total_order_cnt FROM product_order ) t4 ON 1 = 1 
--增加筛选条件
WHEREt1.product_a <> t1.product_b;

2.7 步骤7:构建衍生数据

利用得到的基础数据,增加对应的衍生指标。

3.完整SQL

按照上述步骤,得出完整计算结果:
3完结

--完整SQL,进行购物篮分析
SELECT*,round(buy_together * 1.0 / total_order_cnt,4) AS support,round(buy_together * 1.0 / product_a_cnt,4) AS confidence,round(( buy_together * 1.0 / product_a_cnt ) / ( product_b_cnt *1.0/ total_order_cnt ),4) AS promote
-- round(buy_together*total_order_cnt*1.0/product_a_cnt/product_b_cnt,4)	promote_b
FROM(SELECTt1.product_a,t1.product_b,t1.buy_together,t2.product_a_cnt,t3.product_b_cnt,t4.total_order_cnt 
FROM(SELECTproduct_a,product_b,COUNT ( DISTINCT order_id ) AS buy_together FROM(SELECT A.order_id,A.product product_a,b.product product_b FROMproduct_orderA LEFT JOIN product_order b ON A.order_id = b.order_id ) T GROUP BYproduct_a,product_b ) t1LEFT JOIN ( SELECT product, COUNT ( DISTINCT order_id ) product_a_cnt FROM product_order GROUP BY product ) t2 ON t1.product_a = t2.productLEFT JOIN ( SELECT product, COUNT ( DISTINCT order_id ) product_b_cnt FROM product_order GROUP BY product ) t3 ON t1.product_b = t3.productLEFT JOIN ( SELECT COUNT ( DISTINCT order_id ) total_order_cnt FROM product_order ) t4 ON 1 = 1 
WHEREt1.product_a <> t1.product_b) main 
ORDER BYpromote DESC;

http://chatgpt.dhexx.cn/article/TyTDXekT.shtml

相关文章

Apriori算法:购物篮分析

一、作业要求 编写Apriori算法程序&#xff0c;平台自选。用Apriori 算法找出频繁项集&#xff0c;支持度和置信度根据情况自行设定。找出强关联规则以及相应的支持度和置信度完成挖掘报告数据部分&#xff1a; 数据已上传网盘&#xff1a; 链接&#xff1a;https://wwn.lanzo…

【数据分析】产品关联度分析和购物篮分析(1)

产品关联度分析 关联分析是发现交易数据库中不同商品&#xff08;项&#xff09;之间的联系&#xff0c;主要应用于电商网站 推荐、线下零售门店商品摆放等场景中。 关联规则&#xff1a; 1.支持度&#xff08;support&#xff09;&#xff1a;数据集中包含某几个特定项的概率…

【Clemetine】市场购物篮分析

一、实验目的及要求 通过项目的训练学习&#xff0c;了解数据挖掘在零售业中应用状况&#xff0c;掌握数据挖掘在零售业中分析方法及过程。 二、实验仪器设备 系统环境&#xff1a;Windows10 软件环境&#xff1a;SPSS Clementine11.1 三、实验内容 &#xff08;一&#x…

购物篮分析模型实例——数据分析必备模型

要想做好数据分析必定要理解和熟悉掌握各类数据分析模型&#xff0c;但大部分文章只是给你罗列出了有哪几种数据分析模型及对应理论&#xff0c;并未用实例来辅助说明。 很多时候这些模型都进了收藏夹吃灰&#xff0c;大家也没有深刻理解这种分析模型&#xff0c;等到下次要开始…

商品零售购物篮分析——关联挖掘

一、实验目的 掌握对数据进行预处理和探索性分析的方法&#xff1b;掌握如何利用Apriori关联规则算法进行购物篮分析。 二实验内容 构建零售商品的Apriori关联规则模型&#xff0c;分析商品之间的关联性&#xff1b;根据模型结果给出销售策略。 三、实验操作步骤和结果分析…

使用Apriori关联规则算法实现购物篮分析

Apriori算法是一种挖掘关联规则的频繁项集算法&#xff0c;其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集&#xff0c;而且算法已经被广泛的应用到商业&#xff0c;网络安全等各个领域。 购物篮分析是通过发视频顾客再一次购物行为中放入购物篮中不同…

r语言商品购物篮分析

商品购物篮分析 现代商品种类繁多&#xff0c;顾客往往会由于需要购买的商品众多而变得疲于选择&#xff0c;且顾客并不会因为商品选择丰富而选择购买更多的商品。 对于某些商品&#xff0c;顾客会选择同时购买&#xff0c;如面包与牛奶、薯片与可乐等&#xff0c;当面包与牛…

销售需求丨购物篮分析

​ BOSS&#xff1a;那个谁&#xff0c;对&#xff0c;就是你&#xff0c;你给我研究研究咱商场物品摆放是否合理&#xff1f;&#xff01; 白茶&#xff1a;&#xff08;Excuse me&#xff1f;&#xff09;…BOSS&#xff0c;那个我就是个码字的&#xff01; BOSS&#xff1a;…

[Python] 电商平台用户的购物篮分析

目录 一、背景1. 项目描述2. 数据描述 二、相关模块1. 相关模块2. 数据导入3. 数据处理 三、商品销售分析1. 日销售情况2. 月销售情况3. 观察畅销品 四、 购物篮分析1. 购物篮系数2. 指定商品的购物篮系数3. 指定商品的人气指数 五、用户行为分析1. 用户的消费情况2. 用户初次购…

【Python数据挖掘】购物篮分析

购物篮分析 变量解释 变量含义说明ReceiptID收据单号Value支付金额pmethod支付渠道1现金&#xff0c;2信用卡&#xff0c;3电子支付&#xff0c;4其他sex性别1男性&#xff0c;2女性homeown是否有住宅1有&#xff0c;2无&#xff0c;3未知income收入age年龄其他其他购买的各种…

python数据分析与挖掘实战(商品零售购物篮分析)

一、引言 购物篮分析是商业领域最前沿、最具挑战性的问题之一&#xff0c;也是许多企业重点研究的问题。购物篮分析是通过发现顾客在一次购买行为中放入购物篮中不同商品之间的关联&#xff0c;研究顾客的购买行为&#xff0c;从而辅助零售企业制定营销策略的一种数据分析方法。…

数据挖掘实战—商品零售购物篮分析

文章目录 引言一、数据探索性分析1.数据质量分析1.1 缺失值分析1.2 异常值分析1.3 重复数据分析 2.数据特征分析2.1 描述性统计分析2.2 分布分析2.2.1 商品热销情况分布分析2.2.2 按类别划分商品销量分布分析2.2.3 商品内部结构分布分析 二、数据预处理三、模型构建 案例数据百…

购物篮分析( Apriori算法)—零售数据实战

购物篮分析&#xff08; Apriori算法&#xff09;—零售数据实战 【开题】在我从事零售行业的期间&#xff0c;曾拜读过"啤酒与尿布"一书&#xff0c;对于沃尔玛的购物篮分析模型产生极大的兴趣。由于网上对Aprioro算法介绍的内容较少&#xff0c;故而本人不得已回去…

商品零售购物篮分析

1 案例背景 购物篮分析是通过发现顾客在一次购买行为中放入购物篮中不同商品之间的关联&#xff0c;研究顾客的购买行为&#xff0c;从而辅助零售企业制定营销策略的一种数据分析方法。 通过对商场销售数据进行分析&#xff0c;得到顾客的购买行为特征&#xff0c;并根据发现的…

数据分析一定要懂的模型——购物篮模型

要想做好数据分析必定要理解和熟悉掌握各类数据分析模型&#xff0c;但网络上的大部分文章只是给你罗列出了有哪几种数据分析模型及对应理论&#xff0c;并未用实例来辅助说明。 很多时候&#xff0c;看完就只是看完&#xff0c;并没有深刻理解这种分析模型&#xff0c;等到下…

购物篮分析的基本概念、商业价值与算法介绍

作者 | gongyouliu 编辑 | auroral-L 全文共4915字&#xff0c;预计阅读时间45分钟。 购物篮分析的基本概念、商业价值与算法介绍 1. 什么是购物篮分析 2. 购物篮分析的商业价值 2.1 指导线下门店商品排列、摆放 2.2 优化线下采购、供应链与库存 2.3 为活动营销提供数据支…

给Windows系统配置host

以管理员身份运行命令提示符&#xff1b;注意&#xff1a;一定要管理员身份运行&#xff0c;否则后面存host的时候会出现没有修改权限的问题在命令行中键入&#xff1a;notepad&#xff0c;然后回车&#xff1b;这是打开记事本命令在记事本中工具栏选择“文件-打开”&#xff0…

#vue# 【二】本地电脑如何配置host文件?

#vue# 本地电脑如何配置host文件&#xff1f; &#xff08;1&#xff09;host概念 在进行请求接口之前&#xff0c;我们需要先配备好host Hosts&#xff1a;它是一个没有扩展名的系统文件&#xff0c; 而它的的基本作用&#xff0c;就是将一些我们个人常用的网址和相对应的IP…

window -- 配置hosts

在我们使用内网办公的时候&#xff0c;很多时候连接一些环境都是通过域名去访问的&#xff0c;但是因为这些内网的域名在公网是不存在的&#xff0c;可能会导致我们访问找不到地址&#xff0c;这时候我们可以配置本地hosts&#xff0c;把内网的域名与对应的ip映射起来&#xff…

vmware 配置host-only ip

增加网卡 新增加这个文件&#xff0c;根据ip a的信息增加 cat > /etc/sysconfig/network-scripts/ifcfg-enp0s8 <<EOF NM_CONTROLLEDyes BOOTPROTOnone ONBOOTyes IPADDR11.11.11.108 NETMASK255.255.255.0 DEVICEenp0s8 PEERDNSno EOF 默认安装虚拟机时候&#xff…