用关联规则学习之购物篮分析

🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972

   个人介绍: 研一|统计学|干货分享
         擅长Python、Matlab、R等主流编程软件
         累计十余项国家级比赛奖项,参与研究经费10w、40w级横向

文章目录

  • 1 目的
  • 2 数据来源
  • 3 案例演示
    • 3.1 数据准备
      • 3.1.1 为交易数据创建一个稀疏矩阵
      • 3.1.2 可视化商品支持度——商品的频率图
      • 3.1.3 可视化交易数据——绘制稀疏矩阵
    • 3.2 模型的建立及优化
      • 3.2.1 基于数据训练模型
      • 3.2.2 评估模型的性能
      • 3.2.3 提高模型性能

1 目的

  我们的核心目标是利用关联规则学习这一数据挖掘技术,来揭示顾客在购物过程中经常一起购买的食品杂货组合。通过深入了解这些组合,商家可以更好地理解顾客的购物习惯,从而优化商品布局、制定促销策略,并最终提高销售额和客户满意度。

2 数据来源

  该演示数据来源于: 机器学习和智能系统中心

3 案例演示

3.1 数据准备

3.1.1 为交易数据创建一个稀疏矩阵

  运行代码:

library("arules")                                           #加载包
library("Matrix")                                           #加载包
data<- read.transactions('F:\\groceries.csv', sep = ',')    #读取数据 
summary(data)                                               #查看数据信息

  结果展示:

## transactions as itemMatrix in sparse format with
##  9835 rows (elements/itemsets/transactions) and
##  169 columns (items) and a density of 0.02609146 
## 
## most frequent items:
##       whole milk other vegetables       rolls/buns             soda 
##             2513             1903             1809             1715 
##           yogurt          (Other) 
##             1372            34055 
## 
## element (itemset/transaction) length distribution:
## sizes
##    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16 
## 2159 1643 1299 1005  855  645  545  438  350  246  182  117   78   77   55   46 
##   17   18   19   20   21   22   23   24   26   27   28   29   32 
##   29   14   14    9   11    4    6    1    1    1    1    3    1 
## 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   2.000   3.000   4.409   6.000  32.000 
## 
## includes extended item information - examples:
##             labels
## 1 abrasive cleaner
## 2 artif. sweetener
## 3   baby cosmetics

  通过read.transactions()函数为事务型数据创建一个稀疏矩阵,发现共有9835次交易,169种商品类别。稀疏矩阵中,1表示对应商品已被购买,0表示未被购买;同时,密度值为0.02309146,表示商店经营30填内,共有9835×169×0.02309146=43367件商品被购买;我们不仅能看到交易频率最高的集中商品交易数量,也能看到关于交易规模的统计,且每笔交易的平均商品数为4.409件。

  运行代码:

inspect(data[1:5])
itemFrequency(data[,1:3])

  结果展示:

> inspect(data[1:5])
##     items                     
## [1] {citrus fruit,            
##      margarine,               
##      ready soups,             
##      semi-finished bread}     
## [2] {coffee,                  
##      tropical fruit,          
##      yogurt}                  
## [3] {whole milk}              
## [4] {cream cheese,            
##      meat spreads,            
##      pip fruit,               
##      yogurt}                  
## [5] {condensed milk,          
##      long life bakery product,
##      other vegetables,        
##      whole milk}
> itemFrequency(data[,1:3])
## abrasive cleaner artif. sweetener   baby cosmetics 
##     0.0035587189     0.0032536858     0.0006100661

  可以看到前五条交易数据,且能看到前三种商品(商品顺序根据字母排列)出现频率。

3.1.2 可视化商品支持度——商品的频率图

1.商品支持度图

  运行代码:

itemFrequencyPlot(data,support=0.1)

  结果展示:

在这里插入图片描述

2.Top20商品支持度频率图

  运行代码:

itemFrequencyPlot(data,topN=20)

  结果展示:
在这里插入图片描述

  通过商品频率图可以看到样本数据中支持度至少为10%的有8类商品,同时绘制了支持度排名前20的商品。

3.1.3 可视化交易数据——绘制稀疏矩阵

1.前5条数据稀疏矩阵

  运行代码:

itemFrequencyPlot(data,support=0.1)

  结果展示:
在这里插入图片描述

2.前100条数据稀疏矩阵

  运行代码:

image(data[1:100])

  结果展示:

在这里插入图片描述

  可以看到前五条和前100条的商品购买稀疏矩阵。少数列的黑点看起来相当稠密,表明该商店部分商品很受欢迎。

3.2 模型的建立及优化

3.2.1 基于数据训练模型

  运行代码:

apriori(data)
datarules<-apriori(data,parameter = list(support=0.006,confidence=0.25,minlen=2))

  结果展示:

> apriori(data)
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.8    0.1    1 none FALSE            TRUE       5     0.1      1
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 983 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[169 item(s), 9835 transaction(s)] done [0.00s].
## sorting and recoding items ... [8 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 done [0.00s].
## writing ... [0 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
> datarules<-apriori(data,parameter = list(support=0.006,confidence=0.25,minlen=2))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##        0.25    0.1    1 none FALSE            TRUE       5   0.006      2
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 59 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[169 item(s), 9835 transaction(s)] done [0.00s].
## sorting and recoding items ... [109 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 4 done [0.00s].
## writing ... [463 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].

  首先试图使用默认设置,支持度为0.1,置信度为0.8,发现最终不能得到任何规则,接着尝试设置支持度0.006,置信度0.25,规则最低项数2,发现包含463个关联规则。

3.2.2 评估模型的性能

1.查看所有规则情况

  运行代码:

summary(datarules)

  结果展示:

## set of 463 rules
## 
## rule length distribution (lhs + rhs):sizes
##   2   3   4 
## 150 297  16 
## 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   2.000   2.000   3.000   2.711   3.000   4.000 
## 
## summary of quality measures:
##     support           confidence        coverage             lift       
##  Min.   :0.006101   Min.   :0.2500   Min.   :0.009964   Min.   :0.9932  
##  1st Qu.:0.007117   1st Qu.:0.2971   1st Qu.:0.018709   1st Qu.:1.6229  
##  Median :0.008744   Median :0.3554   Median :0.024809   Median :1.9332  
##  Mean   :0.011539   Mean   :0.3786   Mean   :0.032608   Mean   :2.0351  
##  3rd Qu.:0.012303   3rd Qu.:0.4495   3rd Qu.:0.035892   3rd Qu.:2.3565  
##  Max.   :0.074835   Max.   :0.6600   Max.   :0.255516   Max.   :3.9565  
##      count      
##  Min.   : 60.0  
##  1st Qu.: 70.0  
##  Median : 86.0  
##  Mean   :113.5  
##  3rd Qu.:121.0  
##  Max.   :736.0  
## 
## mining info:
##  data ntransactions support confidence
##  data          9835   0.006       0.25

  根据结果可以看到,有150个规则只包含2种商品,297个规则包含3种商品,16个规则包含四种商品。

2.查看前3个规则情况

  运行代码:

k<-inspect(datarules[1:3])
k

  结果展示:

##     lhs                rhs               support     confidence coverage  
## [1] {potted plants} => {whole milk}      0.006914082 0.4000000  0.01728521
## [2] {pasta}         => {whole milk}      0.006100661 0.4054054  0.01504830
## [3] {herbs}         => {root vegetables} 0.007015760 0.4312500  0.01626843
##     lift     count
## [1] 1.565460 68   
## [2] 1.586614 60   
## [3] 3.956477 69

  根据结果可以看到前3个规则支持度、置信度、提升度情况。其中第一条规则表示如果一个顾客购买了盆摘植物,那么他还会购买全脂牛奶,其支持度为0.007,置信度为0.400,表示该规则涵盖了大约0.7%的交易,且涉及盆摘植物购买的正确率为40%,提升度可以表示假定一个顾客购买了盆摘植物,其相对于一般顾客继续购买全脂牛奶的可能性大小。为方便更快的找出有用规则,利用对关联规则排序的方式提高模型性能。

3.2.3 提高模型性能

1. 对关联规则集合排序

  运行代码:

inspect(sort(datarules,by="lift")[1:5])

  结果展示:

##     lhs                   rhs                      support confidence   coverage     lift count
## [1] {herbs}            => {root vegetables}    0.007015760  0.4312500 0.01626843 3.956477    69
## [2] {berries}          => {whipped/sour cream} 0.009049314  0.2721713 0.03324860 3.796886    89
## [3] {other vegetables,                                                                         
##      tropical fruit,                                                                           
##      whole milk}       => {root vegetables}    0.007015760  0.4107143 0.01708185 3.768074    69
## [4] {beef,                                                                                     
##      other vegetables} => {root vegetables}    0.007930859  0.4020619 0.01972547 3.688692    78
## [5] {other vegetables,                                                                         
##      tropical fruit}   => {pip fruit}          0.009456024  0.2634561 0.03589222 3.482649    93

  根据结果可以看到提升度排名前五的规则情况,其中第一条规则提升度大约为3.96,表示购买药草的顾客继续购买根菜类蔬菜的可能性大约为一般顾客购买根菜类蔬菜的可能性的4倍。

2. 提取关联规则的子集

  假设一营销团队需要调查浆果是否经常于其他商品一起购买,利用提取关联规则子集的方法进行操作。

  运行代码:

berryrules<-subset(datarules,items %in% "berries")  #提取包含浆果的规则
inspect(berryrules)                                 #查看相关情况

  结果展示:

##     lhs          rhs                  support     confidence coverage  lift    
## [1] {berries} => {whipped/sour cream} 0.009049314 0.2721713  0.0332486 3.796886
## [2] {berries} => {yogurt}             0.010574479 0.3180428  0.0332486 2.279848
## [3] {berries} => {other vegetables}   0.010269446 0.3088685  0.0332486 1.596280
## [4] {berries} => {whole milk}         0.011794611 0.3547401  0.0332486 1.388328
##     count
## [1]  89  
## [2] 104  
## [3] 101  
## [4] 116

  根据结果显示,涉及浆果的规则有四个,其中购买浆果的顾客也经常购买鲜牛奶和酸奶。

3. 将关联规则保存到文件或数据框中

  运行代码:

write(datarules,file="F:\\datarules.csv",sep=",",quote=T,row.names=F)#保存为文件
datarules_df<-as(datarules,"data.frame")                             #保存为数据框
str(datarules_df)                                                    #查看数据类型

  结果展示:

## 'data.frame':    463 obs. of  6 variables:
##  $ rules     : Factor w/ 463 levels "{baking powder} => {other vegetables}",..: 340 302 207 206 208 341 402 21 139 140 ...
##  $ support   : num  0.00691 0.0061 0.00702 0.00773 0.00773 ...
##  $ confidence: num  0.4 0.405 0.431 0.475 0.475 ...
##  $ coverage  : num  0.0173 0.015 0.0163 0.0163 0.0163 ...
##  $ lift      : num  1.57 1.59 3.96 2.45 1.86 ...
##  $ count     : int  68 60 69 76 76 69 70 67 63 88 ...

4. 查看前6条个规则详情

  运行代码:

head(datarules_df)                                                   #查看前六行

  结果展示:

##                                rules     support confidence   coverage     lift
## 1    {potted plants} => {whole milk} 0.006914082  0.4000000 0.01728521 1.565460
## 2            {pasta} => {whole milk} 0.006100661  0.4054054 0.01504830 1.586614
## 3       {herbs} => {root vegetables} 0.007015760  0.4312500 0.01626843 3.956477
## 4      {herbs} => {other vegetables} 0.007727504  0.4750000 0.01626843 2.454874
## 5            {herbs} => {whole milk} 0.007727504  0.4750000 0.01626843 1.858983
## 6 {processed cheese} => {whole milk} 0.007015760  0.4233129 0.01657346 1.656698
##   count
## 1    68
## 2    60
## 3    69
## 4    76
## 5    76
## 6    69

  为分享市场购物篮分析结果,我们将数据保存为文件形式和数据框形式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/699870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python_Zebra斑马打印机编程学习笔记(二)】基于BarTender将btw文件转换为zpl文件

基于BarTender将btw文件转换为zpl文件 基于BarTender将btw文件转换为zpl文件前言一、BarTender1、BarTender 介绍2、BarTender 安装 二、导出 ZPL 文件1、导出 ZPL 文件步骤2、Zebra 打印机驱动安装 基于BarTender将btw文件转换为zpl文件 前言 本文介绍如何基于 BarTender 软…

深入理解JS的执行上下文、词法作用域和闭包(中)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

.NET指定图片地址下载并转换Base64字符串

需求描述 需要调用第三方图片上传接口上传图片&#xff0c;对方图片格式只能接收Base64字符串。所以我们需要将系统服务器的图片通过Url下载下来&#xff0c;然后转换成Base64字符串。接下来我们将使用HttpClient类库下载图片并将其转换为Base64格式的字符串。 代码示例 /// &…

新手入门C语言之移位操作符和位操作符

在C语言中&#xff0c;移位操作符和位操作符是专门针对二进制的数字进行&#xff0c;因此&#xff0c;在描述移位操作符和位操作符之前&#xff0c;我们先来了解十进制&#xff0c;二进制&#xff0c;八进制&#xff0c;十六进制等的含义以及相互之间的转化。 一.进制以及相互…

《隐私计算简易速速上手小册》第7章:隐私计算与云计算/边缘计算(2024 最新版)

文章目录 7.1 云计算中的隐私保护7.1.1 基础知识7.1.2 主要案例:使用 Python 实现云数据的安全上传和访问7.1.3 拓展案例 1:实现基于角色的访问控制7.1.4 拓展案例 2:使用 Python 保护 API 安全7.2 边缘计算的隐私问题7.2.1 基础知识7.2.2 主要案例:使用 Python 实现边缘设…

Flink join详解(含两类API及coGroup、connect详解)

Flink SQL支持对动态表进行复杂而灵活的连接操作。 为了处理不同的场景&#xff0c;需要多种查询语义&#xff0c;因此有几种不同类型的 Join。 默认情况下&#xff0c;joins 的顺序是没有优化的。表的 join 顺序是在 FROM 从句指定的。可以通过把更新频率最低的表放在第一个、…

使用yolo-seg模型实现自定义自动动态抠图

yolov8导航 如果大家想要了解关于yolov8的其他任务和相关内容可以点击这个链接&#xff0c;我这边整理了许多其他任务的说明博文&#xff0c;后续也会持续更新&#xff0c;包括yolov8模型优化、sam等等的相关内容。 YOLOv8&#xff08;附带各种任务详细说明链接&#xff09; …

DFT系列文章之 《BIST技术》

BIST&#xff1a;BIST是在设计时在电路中植入相关功能电路用于提供自我测试功能的技术&#xff0c;以此降低器件测试对自动测试设备&#xff08;ATE&#xff09;的依赖程度。 ATE&#xff1a;ATE是Automatic Test Equipment的缩写&#xff0c;根据客户的测试要求、图纸及参考方…

Element table 实现表格行、列拖拽功能

安装包 npm install sortablejs --save <template><div class"draggable" style"padding: 20px"><el-table row-key"id" :data"tableData" style"width: 100%" border><el-table-columnv-for"(it…

VS中使用xcopy生成后命令报9009错误

错误现象: download下来的代码&#xff0c;在另一台电脑能使用生成后命令xcopy&#xff0c;换一台电脑后该命令不能使用&#xff0c;报如下错误&#xff1a; 2.错误原因&#xff1a; 这是因为xcopy /Y 为Windows程序命令&#xff0c;xcopy其实是Windows下的一个xcopy.exe,如果…

nginx 模块 常见内置变量 location

一、nginx 模块 ngx_http_core_module 核心模块 ngx_http_access_module 访问控制模块 deny allow ngx_http_auth_basic_module 身份验证 小红小名&#xff08;虚拟用户&#xff09; ftp也有虚拟用户 ngx_http_gzip_module 压缩模块 ngx_http_gzip_static_modul…

Java 学习和实践笔记(19):this的使用方法

this用来指向当前对象的地址。 this的用法&#xff1a; 1&#xff09;在普通方法中&#xff0c;this总是指向调用该方法的对象。在普通方法中&#xff0c;它是作为一种隐式参数一直就存在着&#xff08;这句话的意思&#xff0c;就是其实在普通方法中&#xff0c;编译器一直就…

【前端素材】推荐优质后台管理系统Be admin平台模板(附源码)

一、需求分析 后台管理系统&#xff08;或称作管理后台、管理系统、后台管理平台&#xff09;是一种专门用于管理网站、应用程序或系统后台运营的软件系统。它通常由一系列功能模块组成&#xff0c;为管理员提供了管理、监控和控制网站或应用程序的各个方面的工具和界面。以下…

从零开始学逆向:理解ret2syscall

1.题目信息 链接&#xff1a;https://pan.baidu.com/s/19ymHlZZmVGsJHFmmlwww0w 提取码&#xff1a;r4el 首先checksec 看一下保护机制 2.原理 ret2syscall 即控制程序执行系统调用来获取 shell 什么是系统调用&#xff1f; 操作系统提供给用户的编程接口是提供访问操作系统…

电路设计(28)——交通灯控制器的multisim仿真

1.功能设定 南北、东西两道的红灯时间、绿灯时间均为24S&#xff0c;数码管显示倒计时。在绿灯的最后5S内&#xff0c;黄灯闪烁。有夜间模式&#xff1a;按下按键进入夜间模式。在夜间模式下&#xff0c;数码管显示计数最大值&#xff0c;两个方向的黄灯不停闪烁。 2.电路设计 …

【k8s资源调度-StatefulSet】

1、部署对象StatefulSet资源&#xff08;无状态应用&#xff09; StatefulSet针对的是有状态应用&#xff0c;有状态应用会对我们的当前pod的网络、文件系统等有关联。 2、配置文件如下 StatefulSet资源的配置文件粗略如下&#xff0c;如下的配置信息包含了数据卷&#xff0c;…

uniapp_微信小程序自定义顶部导航栏和右侧胶囊对齐(不对齐来打我)

一、想要的效果 思路首先开启自定义导航栏&#xff0c;取消自带的导航栏&#xff0c;然后计算胶囊的高度和标题对齐 二、成品代码 1、首先再你需要居中的代码添加以下style <view class"header":style"{paddingTop:navBarTop px,height:navBarHeight px,…

GitLab代码库提交量统计工具

1.说明 统计公司所有项目的提交情况&#xff0c;可指定分支和时间段&#xff0c;返回每个人的提交新增数、删除数和总数。 2.API 文档地址&#xff1a;http://公司gitlab域名/help/api/README.md 项目列表查询 返回示例&#xff1a; [{"id": 1, //项目ID"http…

机器学习——线性回归算法、代价函数、梯度下降算法基础

线性回归 还是以之前的预测房价为例&#xff0c;根据不同尺寸的房子对应不同的售价组成的数据集画图&#xff0c;图如下 监督学习算法工作流程 假设函数其实就是我们所说的函数&#xff0c;在房价这个例子中&#xff0c;我们可以从上图中看出房价和房子面积是一个一元的线性函…

【进程地址空间】

目录 上层用户看到的地址父进程创建子进程对代码区的同一变量修改 进程地址空间进程地址空间需要划分 页表 上层用户看到的地址 一个系统中的进程是与其他进程共享内存和CPU的。如果某个进程不小心写入另一个使用该内存的进程&#xff0c;进程就可能以某种完全和程序逻辑无关的…