R语言关联挖掘实例(购物篮分析)

简介: R语言关联挖掘实例(购物篮分析)

关联挖掘通常用于通过识别经常一起购买的产品来提出产品推荐。但是,如果您不小心,则规则在某些情况下可能会产生误导性的结果。

关联挖掘通常是根据零售市场或在线电子商务商店的交易数据进行的。由于大多数交易数据很大,因此该apriori算法使更容易快速找到这些模式或规则

那么,什么是规则

规则是一种符号,表示经常购买哪些商品和哪些商品。它具有LHSRHS部分,可以表示如下:

项目集A =>项目集B

这意味着,右侧的商品经常与左侧的商品一起购买。

如何衡量规则的强度?

apriori()产生最相关集从给定的交易数据的规则。它还显示了这些规则的支持,信心和提升度。这三个度量可用于确定规则的相对强度。那么这些术语是什么意思呢?

让我们考虑规则A => B,以便计算这些指标。

 

 

提升是A和B的共存超过独立的A和B并存的预期概率的因素。因此,提升越高,A和B一起发生的机会就越高。

让我们看看如何使用R获取规则,置信度,提升度等。

交易数据

与数据框不同,使用head(Groceries)不会在数据中显示交易项目。要查看交易,请改用inspect()函数。

由于关联挖掘处理交易,因此必须将数据转换为class transactions。这是必要的步骤,因为该apriori()函数transactions仅接受类的交易数据。




library(arules)
class(Groceries)
#> [1] "transactions"
#> attr(,"package")
#> [1] "arules"
inspect(head(Groceries, 3))
#>商品
#> 1 {citrus fruit,
#>    semi-finished bread,
#>    margarine,
#>    ready soups}
#> 2 {tropical fruit,
#>    yogurt,
#> coffee}
#> 3 {whole milk}

如果您必须从文件中读取数据作为交易数据,请使用read.transactions()


tdata <- read.transactions("transactions_data.txt", sep="\t")

如果您已经将交易存储为数据框,则可以将其转换为类transactions,如下所示:


tData <- as (myDataFrame, "transactions") # 转换为“交易”类

这里有一些其他有用的实用程序函数:



size(head(Groceries)) # 每个观察项的数量
#> [1] 4 3 1 4 4 5
LIST(head(Groceries, 3)) # 将'交易'类转换为列表,注意CAPS中的LIST
#> [[1]]
#> [1] "citrus fruit"        "semi-finished bread" "margarine"
#> [4] "ready soups"
#>
#> [[2]]
#> [1] "tropical fruit" "yogurt"         "coffee"
#>
#> [[3]]
#> [1] "whole milk"

如何查看最常出现的项目?

eclat()交易对象中获取并给出根据您提供的支持数据的最常见物品supp。该maxlen定义频繁项中的每个项目集项目的最大数量。

frequentItems <- eclat (Groceries, parameter = list(supp = 0.07, maxlen = 15)) # 计算对频繁物品的支持度
inspect(frequentItems)
#>    items                         support
#> 1  {other vegetables,whole milk} 0.07483477
#> 2  {whole milk}                  0.25551601
#> 3  {other vegetables}            0.19349263
#> 4  {rolls/buns}                  0.18393493
#> 5  {yogurt}                      0.13950178
#> 6  {soda}                        0.17437722
itemFrequencyPlot(Groceries, topN=10, type="absolute", main="Item Frequency") # 绘制频繁项目

如何获得推荐规则?





inspect(head(rules_conf)) # 显示所有规则的支持度,提升度和置信度
#>      lhs                                           rhs                support     confidence lift
#> 113  {rice,sugar}                               => {whole milk}       0.001220132 1          3.913649
#> 258  {canned fish,hygiene articles}             => {whole milk}       0.001118454 1          3.913649
#> 1487 {root vegetables,butter,rice}              => {whole milk}       0.001016777 1          3.913649
#> 1646 {root vegetables,whipped/sour cream,flour} => {whole milk}       0.001728521 1          3.913649
#> 1670 {butter,soft cheese,domestic eggs}         => {whole milk}       0.001016777 1          3.913649
#> 1699 {citrus fruit,root vegetables,soft cheese} => {other vegetables} 0.001016777 1          5.168156
rules_lift <- sort (rules, by="lift", decreasing=TRUE) # 'high-lift' rules.
inspect(head(rules_lift)) #
#>      lhs                                                  rhs              support  confidence lift
#> 53   {Instant food products,soda}                      => {hamburger meat} 0.001220 0.6315789  18.995
#> 37   {soda,popcorn}                                    => {salty snack}    0.001220 0.6315789  16.697
#> 444  {flour,baking powder}                             => {sugar}          0.001016 0.5555556  16.408
#> 327  {ham,processed cheese}                            => {white bread}    0.001931 0.6333333  15.045
#> 55   {whole milk,Instant food products}                => {hamburger meat} 0.001525 0.5000000  15.038
#> 4807 {other vegetables,curd,yogurt,whipped/sour cream} => {cream cheese }  0.001016 0.5882353  14.834

置信度为1(见rules_conf上文)的规则意味着,每当购买LHS物品时,也100%的时间购买了RHS物品。

提升为18(见rules_lift上文)的规则意味着,与假设无关的购买相比,LHS和RHS中的物品一起购买的可能性要高18倍。

如何控制输出中的规则数量?

调整maxlensuppconf在所述参数apriori函数来控制生成的规则数。您将不得不根据数据的冗余性对此进行调整。


parameter = list (supp = 0.001, conf = 0.5, maxlen=3) # maxlen = 3 限制规则中最大物品数量为 3
  • 要获得“强”规则,请增加“ conf”参数的值。
  • 要获得“更长”的规则,请增加“ maxlen”

如何删除冗余规则?

有时希望删除作为较大规则子集的规则。为此,请使用以下代码过滤冗余规则。


rules <- rules[-subsetRules] #删除规则子集

如何查找与给定项目相关的规则?

这可以通过修改函数中的appearance参数来实现apriori()。例如,

找出哪些因素影响了产品X的购买

在购买“全脂牛奶”之前找出顾客购买了什么。这将帮助您了解导致购买“全脂牛奶”的频繁模式。


sort (  by="confidence", decreasing=TRUE) # 按置信度排列


#>      lhs                                           rhs          support     confidence lift
#> 196  {rice,sugar}                               => {whole milk} 0.001220132 1          3.913649
#> 323  {canned fish,hygiene articles}             => {whole milk} 0.001118454 1          3.913649
#> 1643 {root vegetables,butter,rice}              => {whole milk} 0.001016777 1          3.913649
#> 1705 {root vegetables,whipped/sour cream,flour} => {whole milk} 0.001728521 1          3.913649
#> 1716 {butter,soft cheese,domestic eggs}         => {whole milk} 0.001016777 1          3.913649
#> 1985 {pip fruit,butter,hygiene articles}        => {whole milk} 0.001016777 1          3.913649

找出在产品X之后/与产品X一起购买的产品

这是找出购买“全脂牛奶”的顾客的案例在等式中,“全脂牛奶”以LHS(左侧)表示。



list(default="rhs",lhs="whole milk"  #
#>   lhs             rhs                support    confidence lift
#> 6 {whole milk} => {other vegetables} 0.07483477 0.2928770  1.5136341
#> 5 {whole milk} => {rolls/buns}       0.05663447 0.2216474  1.2050318
#> 4 {whole milk} => {yogurt}           0.05602440 0.2192598  1.5717351
#> 2 {whole milk} => {root vegetables}  0.04890696 0.1914047  1.7560310
#> 1 {whole milk} => {tropical fruit}   0.04229792 0.1655392  1.5775950
#> 3 {whole milk} => {soda}             0.04006101 0.1567847  0.8991124

这样做的一个缺点是,无论支持,置信度或最小参数如何,您在RHS上只能得到一项。

使用提升度的提示

使用提升时,规则的方向性将丢失。也就是说,任何规则A => B和规则B => A的提升都将相同。请参阅以下计算:

A-> B

  • 支持:
  • 置信度:
  • 预期置信度:PB
  • 升降机:

B-> A

  • 支持度:
  • 置信度:
  • 预期置信度:PB
  • 提升度:

重要的提示

对于规则A-> BB-> A而言提升和支持度的值都相同。这意味着我们不能使用提升为特定方向的 “规则” 提出建议。它只能用于将经常购买的物品分组。

使用置信度的提示

在现实世界中提出产品建议时,尤其是在提出附加产品建议时,规则的置信度可能是一种误导性的度量。让我们考虑以下涉及4个事务的数据,涉及iPhone和耳机:

  1. Iphone,耳机
  2. Iphone,耳机
  3. 苹果手机
  4. 苹果手机

我们可以为这些交易创建2条规则,如下所示:

  1. iPhone->耳机
  2. 耳机-> iPhone

在现实世界中,将耳机推荐给刚买了iPhone而不是相反的人是很现实的。想象一下,当您刚购买完耳机时,就被推荐为iPhone。不太好!

apriori输出中选择规则时,您可能会猜测规则的置信度越高,则规则越好。但是对于这种情况,头戴式耳机-> iPhone规则将比iPhone->头戴式耳机具有更高的置信度(2倍)。你知道为什么吗?下面的计算显示了如何。

置信度计算:

iPhone->耳机

耳机-> iPhone

如您所见,耳机-> iPhone推荐具有更高的置信度,这具有误导性和不现实性。因此,置信度不应成为您提出产品建议的唯一手段

因此,在推荐产品之前,您可能需要检查更多标准,例如产品价格,产品类型等,尤其是在交叉销售的情况下。

相关文章
|
4月前
|
运维 安全 数据挖掘
【数据挖掘】离群点概念、类型、检测的挑战概述(图文解释 超详细)
【数据挖掘】离群点概念、类型、检测的挑战概述(图文解释 超详细)
151 0
|
数据可视化 大数据 定位技术
I+关系网络分析发布,提供完整的可视化分析和关系引擎功能
I+关系网络分析是以OLP模型为核心,面向业务快速建模,为开发者和终端用户提供大数据关系计算引擎(含API服务)和可视化交互分析能力,面向安防、关税、银行、保险、互联网等提供的产品化方案。目前,I+关系网络分析已在阿里巴巴、蚂蚁金服集团内广泛应用于反欺诈、反作弊、反洗钱等风控业务。
4403 0
|
12天前
|
数据可视化 数据挖掘
R语言分段回归数据数据分析案例报告
R语言分段回归数据数据分析案例报告
11 0
|
存储 数据挖掘
|
存储 运维 分布式计算
数据分析和数据开发的区别 - 初始
数据分析和数据开发的区别 初始 数据分析(DA:Data Analysis)和数据开发/数据仓库工程师(DE:Data Extraction)究竟有什么区别,工作职责和工作内容上的差异是什么?
374 0
|
数据挖掘 开发工具
数据分析实例-餐饮行业分析
数据分析实例-餐饮行业分析
273 0
数据分析实例-餐饮行业分析
|
算法 数据挖掘
《数据挖掘:实用案例分析》——2.4 时序模式
本节书摘来自华章计算机《数据挖掘:实用案例分析》一书中的第2章,第2.4节,作者 张良均 陈俊德 刘名军 陈荣,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1664 0
|
算法 数据挖掘
数据分析模型-关联模型
尿布与啤酒背后的原理,如何让客户加满购物篮?
1573 0
数据分析模型-关联模型
|
机器学习/深度学习 算法 数据挖掘
图(关系网络)数据分析及阿里应用
2019年1月18日,由阿里巴巴MaxCompute开发者社区和阿里云栖社区联合主办的“阿里云栖开发者沙龙大数据技术专场”走近北京联合大学,本次技术沙龙上,阿里巴巴资深技术专家钱正平为大家分享了大数据技术背景下图数据的应用前景,以及阿里巴巴在图数据的建模、查询和系统优化等方面做出的初步探索。
3622 0
|
新零售 数据挖掘

热门文章

最新文章

http://www.vxiaotou.com