R语言--数据挖掘3---关联规则分析

关联规则分析

本次报告主要包括以下内容:

  1. 数据介绍
  2. 基本原理介绍
  3. 结合理论进行案例分析
  4. 最后总结
  5. 附录加上参考和代码

数据介绍

本次报告所使用的案例数据为购物篮数据,存储在shop_basket.csv文件中。主要有有1000个观测数据,除去前面7个介绍消费者的编号、消费金额、支付方式、性别、是否是本地、收入、年龄变量之外,剩下还有11个商品的数据,这些数据主要介绍每个观测者是否购买这些商品。

本案例的重点在于分析商品之间的关联规则,主要是利用这后面11个商品的数据来进行分析,故在以下的分析中将数据前面7列删除。并且本次使用的数据中有每个列的观测值均是0和1,分别代表不购买、购买这些商品。这里我们需要将每个用户的观测数据进行转换,若在某一行观测数据中,某个字段(变量)的取值是1,则将这个字段名(变量)写入第一个观测值中,以下所有的观测值都这样处理。

基本原理介绍

基本概念:

T = i 1 , i 2 , . . . , i m \mathcal{T} = {i_1, i_2, ..., i_m} T=i1,i2,...,im表示所有项的集合。 T \mathcal{T} T的子集称为项集

关联规则的形式为 A ⇒ B A \Rightarrow B AB A , B A, B A,B 是两个项集,满足 A ∪ B = ∅ A \cup B=\varnothing AB=, A A A B B B分别 称为前项集后项集

项集的支持度:项集X的支持度support( X X X)定义为数据集 D D D的观测中包含X中所有项的比例。

关联规则的支持度:关联规则 A ⇒ B A \Rightarrow B AB的支持度confidence( A ⇒ B A \Rightarrow B AB)为数据集D的观测中同时包含 A A A B B B中所有项的比例,即support( A ∪ B A \cup B AB).

关联规则的置信度:关联规则 A ⇒ B A \Rightarrow B AB的置信度confidence( A ⇒ B A \Rightarrow B AB)定义为数据集D中包含A的观测中同时包含 B B B的比例,即support( A ⇒ B A \Rightarrow B AB)/support( A A A),这等价于给定A,B出现的条件概率。

在数据挖掘时,需要先指定最小支持度阈值(min_sup)和最小置信度(min_conf)。

强关联规则:支持度不小于min_sup且置信度不小于min_conf的关联规则。其中如果项集A满足最小支持度,那么 A ⇒ ∅ A \Rightarrow \varnothing A是强关联规则。

在此处,满足强关联规则条件的规则为好规则,这是评价一个规则好坏的一个标准。

Apriori算法

简介:Apriori寻找最有影响力的关联规则挖掘的算法。

步骤

  1. 找到所有频繁项集,那些support ≥ \ge min_sup称为频繁项集。
  2. 从频繁项集中生成所有强关联规则。

算法的性质

  1. 一个频繁项集的任何自己必然是频繁项集。
  2. 一个非频繁项集的任何超集必然是非频繁项集。

对性质的举例子解释

  • 如果项集{A}是频繁的,则其子集{A, B}, {A, B,C}也是频繁的,因为A出现,则可以推出{A, B}和{A, B, C}也会出现。
  • 同上,如果{A, B}不出现,说明{A}不出现,{B}也不出现。是性质1的逆否命题。

有意义的关联规则

解释关联规则挖掘的结果光有支持度和置信度是不够的,还需要考察当前关联规则的购买某件商品的提升值。其中关联规则 A ⇒ B A \Rightarrow B AB提升值为:该规则的置信度与B的支持度的比例,即
p ( B ~ ∣ A ~ ) p ( B ~ ) \cfrac{p(\tilde{B}|\tilde{A})}{p(\tilde{B})} p(B~)p(B~A~)
在引入提升值之后,评价关联规则的好坏变成,支持度和置信度均不小于相应的最小阈值,且提升度大于1.

案例分析

首先读取数据,并且需要将数据转换成项集数据,将原始商品类数据
在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6XfVml8g-1618494953333)(C:\Users\laguarange\AppData\Roaming\Typora\typora-user-images\image-20210331195814928.png)]

通过R语言的这种处理转变成每一行数据只有当前列名为1的那些列名,这些列表代表顾客购买的商品。

> inspect(shopBasket[1:4])
    items                           
[1] {confectionery,dairy,freshmeat} 
[2] {confectionery,freshmeat}       
[3] {beer,cannedveg,fish,frozenmeal}
[4] {dairy,wine} 

以上说明,第一个顾客购买了confectionery,dairy,freshmeat三件商品,第二个顾客购买了confectionery,freshmeat两件商品。

再查看商品篮数据的概览

> summary(shopBasket)
transactions as itemMatrix in sparse format with
 1000 rows (elements/itemsets/transactions) and
 11 columns (items) and a density of 0.2545455 

most frequent items:
 cannedveg frozenmeal   fruitveg       beer       fish    (Other) 
       303        302        299        293        292       1311 

element (itemset/transaction) length distribution:
sizes
  0   1   2   3   4   5   6   7   8 
 60 174 227 220 175  81  38  21   4 

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    0.0     2.0     3.0     2.8     4.0     8.0 

includes extended item information - examples:
      labels
1       beer
2 cannedmeat
3  cannedveg

由上结果可以得知,数据中有1000个交易,所有购买的商品种类有11种。在一个1000*11的矩阵中,只有25.45455%个单元格有值,其它都是空的。同时也可得知,最常被购买的商品有cannedveg, frozenmeal fruitveg, beer, fish等5类商品。有4次交易同时购买了8种商品,购买商品的数量最少购买0件商品,最多一次性购买8件商品。

其中关于最频繁购买的商品的频率直方图如下:
在这里插入图片描述

在以上对数据格式进行预处理之后,使用Apriori算法进行数据之间的关联性分析。

由于在调用Apriori算法的时候,其中有一个sup_min,我们首先设置一个比较低的值,以查看大致的support的取值情况,根据这些结果再进一步选取更加合适的support_min的取值。

调整关联规则的sup_min和conf_min:

首先,固定conf_min=0.5(default),这里取sup_min为0.01,查看大致的情况:

Min1st QuMedianMean3rd QuMax
support0.010000.012000.017000.029230.031000.30300

使用summary(rules)得到Apriori算法分析的结果:
在这里插入图片描述

关联规则数为845有些多,因为实际中不需要这么多的关联规则,因此在这里我尝试将取值以上support的上三分位数0.031来作为新的支持度。

同理,固定sup_min,将conf_min设置为0.1查看得到上三分位数为0.5233。最终设置sup_min为0.031,设置conf_min为0.5233来作为后续的最小支持度和最小置信度,此时关联规则的数量为54条,大小合适。

最后得到强关联规则的前6条数据。如下所示,其中每条关联规则的支持度,置信度以及提升度都比较大。根据关联规则好坏的判别准则来讲,以下的关联规则均是在我们设置的规则下的强关联规则。
在这里插入图片描述

画图可视化最后得出强关联规则的支持度、置信度及提升度的分布:
在这里插入图片描述
可见,数据关联规则的置信度主要集中在上图的四个角,因此我们可以多加关注那些支持度、置信度以及提升度位于以上四角的商品。但是如果仅仅是在保证支持度和置信度的情况下,想要极大地提升关联规则的置信度的话,可以考虑将上方左右两角的商品放在一起。

总结反思

本案例主要分析了一下shop_basket.csv数据中顾客购买的商品之间的关联规则,调用R语言中的Apriori算法来分析这些关联规则,此处并没有考虑到之前所给出的顾客的消费金额以及收入等信息,这些仅仅是关联规则的初步分析。所以在以后的学习中,学习完了数据挖掘的建模算法之后,还需要回来将前7列的变量列入我们的分析范畴之内,以便挖掘出更加完整的信息。

此外,在进行选择min_sup和min_conf的时候,我个人仅凭借着自身的直觉判断了一下min_sup和min_conf的取值。仅仅从(1)强规则的个数。(2)设置一个比较低的min_sup和min_conf值,固定其中一个值查看min_sup的上三分位数(3)调节min_sup之后,再查看min_conf的上三分位数来作为最终的min_conf。这还没有参考到完善的数据挖掘理论,此处还需要进一步学习以改善。

最后画图分析查看强关联规则的支持度、可信度以及支持度的分布,更加清晰与直观。

学习其他同学的代码

  1. 考虑前7列数据中所有变量的值,画图展示,并且在最后对其进行关联规则挖掘,发现年龄和消费额之间关联比较大。

  2. 在挖掘出强关联规则之后,需要对得到的结果进行解释。

  3. 也不删掉前7列的数据,对其进行分析。可以分别对男性和女性进行分析,指关联规则进行对比。缺点:男性和女性的比例是不一致的,所以需要考虑对比是否有意义?我自己的思考:可以尝试使用过采样来达到1:1的比例,且最开始在描述的时候需要将男性和女性数据之间的对比写出来。

    对比很重要的一点:需要有可比性,需要有控制变量

参考

[1]薛薇.R语言数据挖掘[M] 北京:中国人民大学出版社.2016.324-339

[2]普拉迪帕塔 · 米什拉.R语言数据挖掘:实用项目解析[M] 北京:机械工业出版社.2017.112-121

[3] 关联规则transaction数据准备

[4] 【Python数据挖掘课程】八.关联规则挖掘及Apriori实现购物推荐

[5] 关联分析(3):Apriori R语言实现

代码

library(arules)
library(arulesViz)

# ----------1 读取数据
setwd("D:/lagua/CODING/R-learn/R-code/Chap4_AssociationRule")
shopBasket = read.csv("shop_basket.csv", sep=",")
# 去除前7个与购买商品无关的数据
shopBasket = shopBasket[, -seq(1, 7, 1)]

# ----------2 查看数据、转换数据、画图查看
# ----------2 查看数据
# 查看前4个观测数据顾客购买的商品
# 等价于inspect(shopBasket[1:4])
for (i in 1:4){
  print(names(shopBasket[i,])[shopBasket[i,]==1])
}

# ----------2 转换数据
# 将数据每一行字段取值为1的列名拿出来,这些列名代表每一条观测购买的商品
shopBasket <- apply(shopBasket,1,function(x) names(x)[x==1])
# 或者直接list(shopBasket)
# 再shopBaseket = as(shopBasket, "transactions")
# 转换成Apriori可以识别的数据类型
shopBasket = as(shopBasket, "transactions")

# 查看的概览
summary(shopBasket)
inspect(shopBasket[1:4])

# ----------2 画图查看
help("itemFrequencyPlot")
itemFrequencyPlot(shopBasket, support=0.01, 
                  main="Relative Itemeq Plot",
                  type="absolute")


# ----------3 关联分析 调整sup_min, conf_min
# 关联分析 初步分析
help(apriori)
rules <- apriori(shopBasket, 
                 parameter=list(support=0.01, confidence=0.1,target="rules"))
summary(rules)

# 固定min_conf 设置support为0.031(上三分位数)
rules <- apriori(shopBasket, 
                 parameter=list(support=0.031, confidence=0.1,target="rules"))
summary(rules)

# 调整min_sup之后并固定 设置confidence为0.5233(上三分位数)
rules <- apriori(shopBasket, 
                 parameter=list(support=0.031, confidence=0.5233,target="rules"))
summary(rules)


# ----------4 查看关联规则,按照support, confidence, lift排序
# 把所有规则按照lift(提升度)排序查看关联规则
shopBasket.sorted<-sort(x=rules,by="lift",decreasing=TRUE)
inspect(shopBasket.sorted)

# 逐条查看数据集shopBasket.sorted的前6条记录
# 这其实跟前面排序是等价的
inspect(head(shopBasket.sorted))

# 查看分析结果
options(digits=4)
#设置输出小数位数为4位数
inspect(head(rules,by="lift"))
# inspect函数逐条查看关联规则
#  by="lift"指定按提升值降序排列。


# ----------5 关联分析结果可视化
plot(rules)
# 对关联规则的支持度、置信度和提升值进行可视化


的前6条记录
# 这其实跟前面排序是等价的
inspect(head(shopBasket.sorted))

# 查看分析结果
options(digits=4)
#设置输出小数位数为4位数
inspect(head(rules,by="lift"))
# inspect函数逐条查看关联规则
#  by="lift"指定按提升值降序排列。


# ----------5 关联分析结果可视化
plot(rules)
# 对关联规则的支持度、置信度和提升值进行可视化
  • 3
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
R语言是一种用于数据分析和数据可视化的强大工具,也被广泛应用于关联规则数据挖掘。下面是一个关联规则数据挖掘在市场篮子分析中的应用案例。 假设某超市想要了解不同商品之间的关联性,以便进行优化的货架布局和推广策略。他们收集了一段时间内每个顾客购买的商品清单数据。 首先,使用R语言中的数据预处理技术对数据进行清洗和准备。通过删除无效数据和处理重复项,确保数据的准确性和一致性。 然后,使用R语言关联规则挖掘的包,如arules,对数据进行分析。使用Apriori算法,可以找到物品之间的关联规则和频繁项集。 通过设定支持度和置信度阈值,可以确定只有在一定数量的交易中出现的频繁项集。例如,如果支持度阈值设定为0.05,表示只有在超过5%的交易中出现的项集才被认为是频繁的。 此外,通过设置置信度阈值,可以找到具有一定关联性的规则。置信度表示在一个规则中出现的商品组合与整体交易的关联程度。例如,如果置信度阈值设定为0.4,表示只有当规则中的商品组合在40%以上的交易中都出现时,该规则才被认为是强关联的。 最后,通过分析得到的关联规则,超市可以了解哪些商品经常一起被购买,进而进行优化的货架布局和推广策略。例如,如果关联规则显示购买面包的顾客还经常购买黄油,那么超市可以考虑将这两种商品放在相邻的货架上。 综上所述,关联规则数据挖掘在市场篮子分析中的应用案例中,通过R语言分析工具,可以找到商品之间的关联规则,从而提供超市货架布局和推广策略的优化建议。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值