R语言购物篮分析(翻译)

原文链接

关联规则

       比较项集(Items)之间的相似度的方法有很多种。这些方法属于关联规则这一技术范畴。简单的说,关联规则挖掘的结果是得到一个集合,而集合里的元素类似于A->B(由A推导出B)。

应用

       那么我们关心哪些项目呢?以下是关联规则挖掘的应用:

  • 商品推荐——像Amazon的“买屋及乌”
  • 音乐推荐——像Last.fm的歌手推荐
  • 医学诊断——像糖尿病
  • 内容推荐——像网站或者博客

       本文关注点是关联规则挖掘在零售行业的应用,因为它简单直观。此外,R语言的相关包包含一个零售数据集,你可以通过该数据集来学习关联规则挖掘。

Groceries数据集

       假如你的桌子上有10000张收据。每一张收据表示一次购买商品(一个或者多个)的交易记录。这些收据可以认为是顾客的购物篮。如果对这些收据进行分析,那么这便是超市购物篮分析。

       事实上,Groceries数据集的每一行表示一次交易记录,行中的每一列代表一个商品。你可以下载Groceries数据集来查看数据格式,但是这不是必须的步骤。

数学相关知识

       我们已经讨论过了交易和项集的概念了。
一个项集可以表示为:
I = ( i 1 , i 2 , . . . i n ) I=(i_1,i_2,...i_n) I=(i1,i2,...in)
一次交易可以表示为:
t n = ( i j , i k , . . . i n ) t_n=(i_j,i_k,...i_n) tn=(ij,ik,...in)
关联规则挖掘可以表示为:
( i 1 , i 2 ) = > ( i k ) (i_1,i_2) => (i_k) (i1,i2)=>(ik)
       该表达式可以理解为,如果顾客购买了表达式左边的项集,那么他可能购买表达式右边的项集。下面是一个更为通俗的例子:
( c o f f e e , s u g a r ) = > ( m i l k ) (coffee,sugar)=> (milk) (coffee,sugar)=>(milk)
如果一个顾客购买了咖啡和糖,那么他可能还会买牛奶。

       由此,我们可以了解下支持度、置信度和lift。下面我们将描述这些值,如果你想知道它们的数学意义,那么你可以查阅维基百科。

  • 支持度:包含指定项集的记录在数据集的占比
  • 置信度:由指定项集推导出的规则与该项集之比
  • 提升度:由项集推导出的规则的置信度与规则右侧的项集之比
    注意:如果提升度等于1,那么该规则的左右两侧的项集是不相关的。

Apriori挖掘

       加载相关包和数据集

# Load the libraries
library(arules)
library(arulesViz)
library(datasets)
 
# Load the data set
data(Groceries)

       在挖掘规则之前探索下数据集

# Create an item frequency plot for the top 20 items
itemFrequencyPlot(Groceries,topN=20,type="absolute")

在这里插入图片描述
       现在我开始挖掘规则!你必须设置最小支持度和最小置信度。

-最小支持度设置为0.001

  • 最小置信度设置为0.8
  • 我们只显示规则中的top5
# Get the rules
rules <- apriori(Groceries, parameter = list(supp = 0.001, conf = 0.8))
 
# Show the top 5 rules, but only 2 digits
options(digits=2)
inspect(rules[1:5])

输出如下:

 lhs                        rhs             support      confidence  lift
1 {liquor,red/blush wine} => {bottled beer}  0.0019       0.90        11.2
2 {curd,cereals}          => {whole milk}    0.0010       0.91        3.6
3 {yogurt,cereals}        => {whole milk}    0.0017       0.81        3.2
4 {butter,jam}            => {whole milk}    0.0010       0.83        3.3
5 {soups,bottled beer}    => {whole milk}    0.0011       0.92        3.6

       由以上可知,如果客户购买了yogurt和cereals,那么他有81%的概率买whole milk

       我们总结了一些关于规则的信息,这些信息可以为我们提供有趣的内容,例如:

  • 生成规则总数:410条
  • 规则的长度分布:大多数规则的长度为4
  • 挖掘结果分析:将支持度、置信度和提升度取不同的值
  • 挖掘信息:数据总数和最小参数
set of 410 rules
 
rule length distribution (lhs + rhs): sizes
  3   4   5   6 
 29 229 140  12 
 
summary of quality measures:
         support     conf.           lift     
 Min.   :0.00102     Min.   :0.80    Min.   : 3.1  
 1st Qu.:0.00102     1st Qu.:0.83    1st Qu.: 3.3  
 Median :0.00122     Median :0.85    Median : 3.6  
 Mean   :0.00125     Mean   :0.87    Mean   : 4.0  
 3rd Qu.:0.00132     3rd Qu.:0.91    3rd Qu.: 4.3  
 Max.   :0.00315     Max.   :1.00    Max.   :11.2  
 
mining info:
      data      n      support   confidence
 Groceries      9835   0.001     0.8

排序

       通过观察发现,挖掘出的规则是没有排序的。我们总是想要最相关的规则。或者说,我们想要最可能发生的规则。通过以下代码就可以实现根据置信度将规则排序:

rules<-sort(rules, by="confidence", decreasing=TRUE)

       现在我们输出了根据置信度排序后的最相关的前5条规则

 lhs                                            rhs            support  conf.  lift
1 {rice,sugar}                                => {whole milk}   0.0012   1      3.9
2 {canned fish,hygiene articles}              => {whole milk}   0.0011   1      3.9
3 {root vegetables,butter,rice}               => {whole milk}   0.0010   1      3.9
4 {root vegetables,whipped/sour cream,flour}  => {whole milk}   0.0017   1      3.9
5 {butter,soft cheese,domestic eggs}          => {whole milk}   0.0010   1      3.9

       第4条规则有些长。你可以设置更明确的规则。只要在apriori的函数中添加“maxlen”参数即可:

rules <- apriori(Groceries, parameter = list(supp = 0.001, conf = 0.8,maxlen=3))

冗余规则处理

       有时候,规则会重复生成。冗余规则指的是一条规则被重复给出。作为一个分析师,你应该删除生成的冗余规则。

       用下面的代码可以删除重复生成的规则:

subset.matrix <- is.subset(rules, rules)
subset.matrix[lower.tri(subset.matrix, diag=T)] <- NA
redundant <- colSums(subset.matrix, na.rm=T) >= 1
rules.pruned <- rules[!redundant]
rules<-rules.pruned

目标项集

       我们知道了如何生成项集、限制输出,现在我们生成关于指定的目标项集的规则。我们可能感兴趣的目标有两种,以“whole milk”来说明:

  • 客户在购买whole milk前会购买什么?
  • 客户购买了whole milk后还会购买什么?

       这基本上意味着我们要设置关联规则的左边或者右边。这对R语言并不难。

       针对第一个问题,我们将apriori函数做以下调整:

rules<-apriori(data=Groceries, parameter=list(supp=0.001,conf = 0.08), 
               appearance = list(default="lhs",rhs="whole milk"),
               control = list(verbose=F))
rules<-sort(rules, decreasing=TRUE,by="confidence")
inspect(rules[1:5])

结果如下:

lhs                                              rhs          supp.   conf.  lift
1 {rice,sugar}                                 => {whole milk}  0.0012   1     3.9
2 {canned fish,hygiene articles}               => {whole milk}  0.0011   1     3.9
3 {root vegetables,butter,rice}                => {whole milk}  0.0010   1     3.9
4 {root vegetables,whipped/sour cream,flour}   => {whole milk}  0.0017   1     3.9
5 {butter,soft cheese, domestic eggs}          => {whole milk}  0.0010   1     3.9

       同样的,我们设置关联规则的左边为“whole milk”。需要注意的是:

  • 由于置信度设为0.8时没有规则产生,因此设为0.15
  • 项集长度设置为2,以避免规则左边的项集为空
rules<-apriori(data=Groceries, parameter=list(supp=0.001,conf = 0.15,minlen=2), 
               appearance = list(default="rhs",lhs="whole milk"),
               control = list(verbose=F))
rules<-sort(rules, decreasing=TRUE,by="confidence")
inspect(rules[1:5])

结果如下:

lhs             rhs                support confidence lift
1 {whole milk} => {other vegetables}   0.075       0.29  1.5
2 {whole milk} => {rolls/buns}         0.057       0.22  1.2
3 {whole milk} => {yogurt}             0.056       0.22  1.6
4 {whole milk} => {root vegetables}    0.049       0.19  1.8
5 {whole milk} => {tropical fruit}     0.042       0.17  1.6
6 {whole milk} => {soda}               0.040       0.16  0.9

可视化:
       最后一步是可视化。我们可以通过arulesViz包来画出规则的图。

library(arulesViz)
plot(rules,method="graph",interactive=TRUE,shading=NA)

       你会得到一幅可移动的图,像这样:
在这里插入图片描述

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值