🍉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
为分享市场购物篮分析结果,我们将数据保存为文件形式和数据框形式。