R语言之Apriori算法应用

关联分析用于发现隐藏在大型数据集中的有意义的联系。所发现的联系可以用关联规则(association rule)或频繁项集的形式表示。 2017-06-14 09:37:05 R语言Apriori算法 经济学人重磅:数据经济虽好,可是仍需补钙 虽然数据经济的征兆俯拾即是,但直至最近,它才初具雏形。在J.R.尤因(J. R. Ewing)眼里,这一切都显得格外眼熟。大型数据公司,不断壮大的投机分子队伍,以及其他无数公司,大家都试图分一杯羹。所有人都是冲着一台强大的经济引擎来的,它就是“数据网络效应”,即用数据吸引更多用户,进而催生更多的数据,再用这些数据改进服务,并吸引更多用户。 2017-06-13 16:09:49 大数据动向 图表绘制与处理的常用软件 工科背景的人员常使用Matlab,计算机背景的人员常使用Python,统计学科的人员常使用R,医学背景的人员常使用Graphpad等。常用的论文图表绘制软件包括Excel、Origin、Sigmplot、Graphpad、Matlab、Python、R等,如图1-2-1所示。每个绘图软件的图表都有不同的图表风格。 2017-06-13 15:37:21 大数据图表绘制常用软件 全栈必备Log日志 Log日志,不论对开发者自身,还是对软件系统乃至产品服务都是非常重要的事情。每个开发者都接触过日志,以至于每个人对日志的了解都会有所不同。 2017-06-13 15:10:02 大数据Log日志 读懂这篇文章就懂大数据,3000字概括《大数据时代》 近期有些起伏,这种情况最适合回归书本,寻找一些你内心认同的东西。这几天花了点时间重温《大数据时代》,整理、总结出了精华的东西,分享给大家。 2017-06-13 14:23:42 大数据动向 车品觉:数据与金钱的交易鲜有存在,但数据确实正在催生的新经济 相比之下,数据交易几乎无迹可寻,至少,数据与金钱的交易鲜有存在。这跟它“新兴资产类别”这一称号很不相称。在2011年发布的一份报告中,世界经济论坛(WEF;达沃斯的会议组织机构兼智囊)就给数据冠以这一称号,隐含的意思是,构成数据经济的,将是欣欣向荣的数据信息市场。但从当前的情况来看,数据经济基本上是一个个相互孤立的“谷仓”集合体。 2017-06-12 19:05:12 大数据动向 Spark Submit的ClassPath问题 我们的产品需要与客户的权限系统对接,即在登录时使用客户的认证系统进行认证。集成认证的方式是调用客户提供的jar包,调用userService的authenticate方法。同时,还需要在classpath中提供密钥的key文件。 2017-06-12 13:30:56 集成认证集群ClassPath 【技术】TensorFlow官方解读:如何在多系统和网络拓扑中构建高性能模型 这个文档和附带的脚本详细介绍了如何构建针对各种系统和网络拓扑的高性能可拓展模型。这个技术在本文档中用了一些低级的 Tensorflow Python 基元。在未来,这些技术将被并入高级 API。 2017-06-09 10:00:15 大数据网络拓扑可拓展模型 在这1.7亿出租车轨迹里,MIT找到了大城市治堵“秘方” 共享单车都这么火了,但它还只是智慧城市的冰山一角而已。一群来自MIT感知城市实验室的科学家们,已经开始研究“共享汽车”出行的算法模型。他们分析了纽约1.7亿条出租车轨迹数据发现,如果能够用实时数据来调动纽约的出租车系统,可以减少40%的运输线路。换句话说,寸步难行的“大苹果”终于可以迎来畅通无阻的日子了。 2017-06-09 09:35:18 大数据出租车轨迹治堵“秘方” 从上菜太慢,谈事件管理、流程管理、数据管理 职场中的管理者非常多,但水平良莠不齐。管理者能力水平的高低,往往在解决组织运营过程中出现的问题时,就能被检视和显现出来。今天,我们要从实际案例中,对比三种管理改善的方法,探寻到一种对组织完善体系、构建机制最有用的方法。 2017-06-08 15:18:29 大数据事件管理数据管理 亿级推广流量仍能精准推荐?解读核心算法的应用实践 原创 每天有超过50亿的推广流量完成超过3亿件商品的推广展现,覆盖高达98%的网民,实现数字媒体(PC端+无线端+互联网电视端)的一站式触达。在这些鲜亮的数据背后,是什么样的核心算法在起作用?它如何保证商家的产品得到最有效的推荐?本文将给大家详解阿里妈妈 CTR 预估核心算法 MLR 的研发背景和应用实践。

关联分析用于发现隐藏在大型数据集中的有意义的联系。所发现的联系可以用关联规则(association rule)或频繁项集的形式表示。

[[193979]]

一. 概念

关联分析用于发现隐藏在大型数据集中的有意义的联系。所发现的联系可以用关联规则(association rule)或频繁项集的形式表示。

项集:在关联分析中,包含0个或多个项的集合被称为项集(itemset)。如果一个项集包含k个项,则称它为k-项集。例如:{啤酒,尿布,牛奶,花生} 是一个4-项集。空集是指不包含任何项的项集。

关联规则(association rule):是形如 X → Y 的蕴含表达式,其中X和Y是不相交的项集,即:X∩Y=∅。关联规则的强度可以用它的支持度(support)和置信度(confidence)来度量。

支持度:一个项集或者规则在所有事物中出现的频率,确定规则可以用于给定数据集的频繁程度。σ(X):表示项集X的支持度计数

项集X的支持度:s(X)=σ(X)/N;规则X → Y的支持度:s(X → Y) = σ(X∪Y) / N

置信度:确定Y在包含X的事务中出现的频繁程度。c(X → Y) = σ(X∪Y)/σ(X)

支持度是一种重要的度量,因为支持度很低的规则可能只是偶然出现,低支持度的规则多半也是无意义的。因此,支持度通常用来删去那些无意义的规则;

置信度度量是通过规则进行推理具有可靠性。对于给定的规则X → Y,置信度越高,Y在包含X的事物中出现的可能性就越大。即Y在给定X下的条件概率P(Y|X)越大。

二. R语言中实现Apriori算法应用

R语言中的Apriori算法实现包含在arules包中,本文不涉及算法的实现,只是应用arules该包实现关联规则的挖掘。

1.数据源:利用arules包中自带的Groceries数据集,该数据集是来自一个现实世界中的超市经营一个月的购物数据,包含了9835次交易。我们按照超市一天12个小时的工作时间计算,大约每小时的交易次数为9835/30/12=27.3,表明该超市规模属于中等。

  1. >library(arules)#加载arules包
  2. >data(Groceries)
  3. >Groceries
  4. transactionsinsparseformatwith
  5. 9835transactions(rows)and
  6. 169items(columns)

2.探索和准备数据:

(1)事务型数据每一行指定一个单一的实例,每条记录包括用逗号隔开的任意数量的产品清单,通过inspect()函数可以看到超市的交易记录,每次交易的商品名称;通过summary()函数可以查看该数据集的一些基本 信息。

  1. >inspect(Groceries[1:5])#通过inspect函数查看Groceries数据集的前5次交易记录
  2. items
  3. 1{citrusfruit,semi-finishedbread,margarine,readysoups}
  4. 2{tropicalfruit,yogurt,coffee}
  5. 3{wholemilk}
  6. 4{pipfruit,yogurt,creamcheese,meatspreads}
  7. 5{othervegetables,wholemilk,condensedmilk,longlifebakeryproduct}
  8. <br>>summary(Groceries)
  9. transactionsasitemMatrixinsparseformatwith
  10. 9835rows(elements/itemsets/transactions)and
  11. 169columns(items)andadensityof0.02609146
  12. mostfrequentitems:
  13. wholemilkothervegetablesrolls/bunssodayogurt(Other)
  14. 2513190318091715137234055
  15. element(itemset/transaction)lengthdistribution:
  16. sizes
  17. 12345678910111213141516171819202122232426272829
  18. 2159164312991005855645545438350246182117787755462914149114611113
  19. 32
  20. 1
  21. Min.1stQu.MedianMean3rdQu.Max.
  22. 1.0002.0003.0004.4096.00032.000
  23. includesextendediteminformation-examples:
  24. labelslevel2level1
  25. 1frankfurtersausagemeatandsausage
  26. 2sausagesausagemeatandsausage
  27. 3liverloafsausagemeatandsausage
  1. >itemFrequency(Groceries[,1:3])#itemFrequency()函数可以查看商品的交易比例<br>frankfurtersausageliverloaf<br>0.0589730550.0939501780.005083884

分析:

①密度值0.02609146(2.6%)指的是非零矩阵单元格的比例。

该数据集一共有9835行(交易记录),169列(所有交易的商品种类),因此,矩阵中共有9835*169=1662115个位置,我们可以得出,在30天内共有1662115*0.02609146=43367件商品被购买。进一步可以得出在每次交易中包含了43367/9835=4.409件商品被购买,在均值那一列可以看出(Mean=4.409)我们的计算是正确的;

②most frequent items:列出了事务型数据中最常购买的商品。whole milk 在9835次交易中被购买了2513次,因此,我们可以得出结论:whole milk有2513/9835=25.6%的概率出现在所有的交易中;

③element (itemset/transaction) length distribution:呈现了一组关于交易规模的统计,总共有2159次交易中包含一件商品,有1次交易中包含了32件商品.从分位数分布情况可以看出,25%的交易中包含了两件或者更少的商品,大约一半的交易中商品数量为3件;

(2)可视化商品的支持度——商品的频率图

为了直观地呈现统计数据,可以使用itemFrequenctyPlot()函数生成一个用于描绘所包含的特定商品的交易比例的柱状图。因为包含很多种商品,不可能同时展现出来,因此可以通过support或者topN参数进行排除一部分商品进行展示

R语言之Apriori算法应用

R语言之Apriori算法应用

(3)可视化交易数据——绘制稀疏矩阵

通过使用image()函数可以可视化整个稀疏矩阵。

  1. image(Groceries[1:5])#生成一个5行169列的矩阵,矩阵中填充有黑色的单元表示在此次交易(行)中,该商品(列)被购买了

R语言之Apriori算法应用

从上图可以看出,***行记录(交易)包含了四种商品(黑色的方块),这种可视化的图是用于数据探索的一种很有用的工具。它可能有助于识别潜在的数据问题,比如:由于列表示的是商品名称,如果列从上往下一直被填充表明这个商品在每一次交易中都被购买了;另一方面,图中的模式可能有助于揭示交易或者商品的有趣部分,特别是当数据以有趣的方式排序后,比如,如果交易按照日期进行排序,那么黑色方块图案可能会揭示人们购买商品的数量或者类型受季节性的影响。这种可视化对于超大型的交易数据集是没有意义的,因为单元太小会很难发现有趣的模式。

3.训练模型

  1. grocery_rules<-apriori(data=Groceries,parameter=list(support=,confidence=,minlen=))

运行apriori()函数很简单,但是找到支持度和置信度参数来产生合理数量的关联规则时,可能需要进行大量的试验与误差评估。

如果参数设置过高,那么结果可能是没有规则或者规则过于普通而不是非常有用的规则;另一方面如果阈值太低,可能会导致规则数量很多,甚至需要运行很长的时间或者在学习阶段耗尽内存。

aprior()函数默认设置 support = 0.1 和 confidence = 0.8,然而使用默认的设置,不能得到任何规则

  1. >apriori(Groceries)
  2. setof0rules#因为support=0.1,则意味着该商品必须至少出现在0.1*9835=983.5次交易中,在前面的分析中,我们发现只有8种商品的support>=0.1,因此使用默认的设置没有产生任何规则也不足为奇

解决支持度设定问题的一种方法是考虑一个有趣的模式之前,事先想好需要的最小交易数量,例如:我们可以认为如果一种商品一天被购买了2次,一个月也就是60次交易记录,这或许是我们所感兴趣的,据此,可以计算所需要的支持度support=60/9835=0.006;

关于置信度:设置太低,可能会被大量不可靠的规则淹没,设置过高,可能会出现很多显而易见的规则致使我们不能发现有趣的模式;一个合适的置信度水平的选取,取决于我们的分析目标,我们可以尝试以一个保守的值开始,如果发现没有具有可行性的规则,可以降低置信度以拓宽规则的搜索范围。

在此例中,我们将从置信度0.25开始,这意味着为了将规则包含在结果中,此时规则的正确率至少为25%,这将排除最不可靠的规则

minlen = 2 表示规则中至少包含两种商品,这可以防止仅仅是由于某种商品被频繁购买而创建的无用规则,比如在上面的分析中,我们发现whole milk出现的概率(支持度)为25.6%,很可能出现如下规则:{}=>whole milk,这种规则是没有意义的。

最终,根据上面的分析我们确定如下参数设置:

  1. >grocery_rules<-apriori(data=Groceries,parameter=list(support=0.006,confidence=0.25,minlen=2))
  2. >grocery_rules
  3. setof463rules

4.评估模型的性能

  1. >summary(grocery_rules)
  2. setof463rules
  3. rulelengthdistribution(lhs+rhs):sizes#前件+后件的规则长度分布
  4. 234
  5. 15029716#有150个规则只包含2种商品,297个规则包含3种商品,16个规则包含4种商品
  6. Min.1stQu.MedianMean3rdQu.Max.
  7. 2.0002.0003.0002.7113.0004.000
  8. summaryofqualitymeasures:
  9. supportconfidencelift
  10. Min.:0.006101Min.:0.2500Min.:0.9932
  11. 1stQu.:0.0071171stQu.:0.29711stQu.:1.6229
  12. Median:0.008744Median:0.3554Median:1.9332
  13. Mean:0.011539Mean:0.3786Mean:2.0351
  14. 3rdQu.:0.0123033rdQu.:0.44953rdQu.:2.3565
  15. Max.:0.074835Max.:0.6600Max.:3.9565
  16. mininginfo:
  17. datantransactionssupportconfidence
  18. Groceries98350.0060.25
  19. <br>>inspect(grocery_rules[1:5])
  20. lhsrhssupportconfidencelift
  21. 1{potplants}=>{wholemilk}0.0069140820.40000001.565460
  22. 2{pasta}=>{wholemilk}0.0061006610.40540541.586614
  23. 3{herbs}=>{rootvegetables}0.0070157600.43125003.956477
  24. 4{herbs}=>{othervegetables}0.0077275040.47500002.454874
  25. 5{herbs}=>{wholemilk}0.0077275040.47500001.858983 

这里需要解释一下lift(提升度),表示用来度量一类商品相对于它的一般购买率,此时被购买的可能性有多大。通俗的讲就是:比如***条规则{pot plants} => {whole milk},lift = 1.565,表明(购买pot plants 之后再购买 whole milk商品的可能性) 是 (没有购买pot plants 但是购买了whole milk 的可能性) 的 1.565倍;

***条规则解读:如果一个顾客购买了pot plants,那么他还会购买whole milk,支持度support为0.0070,置信度confidence为0.4000,我们可以确定该规则涵盖了大约0.7%的交易,而且在购买了pot plants后,他购买whole milk的概率为40%,提升度lift值为1.565,表明他相对于一般没有购买pot plant商品的顾客购买whole milk商品的概率提升了1.565倍,我们在上面的分析中知道,有25.6%的顾客购买了whole milk,因此计算提升度为0.40/0.256=1.56,这与显示的结果是一致的,注意:标有support的列表示规则的支持度,而不是前件(lhs)或者后件(rhs)的支持度。

提升度 lift(X → Y) = P (Y| X) / P (Y) , lift(X → Y) 与 lift(Y → X) 是相同的。

如果lift值>1,说明这两类商品在一起购买比只有一类商品被购买更常见。一个大的提升度值是一个重要的指标,它表明一个规则时很重要的,并反映了商品之间的真实联系。

5.提高模型的性能

(1)对关联规则集合排序

根据购物篮分析的目标,最有用的规则或许是那些具有高支持度、信度和提升度的规则。arules包中包含一个sort()函数,通过指定参数by为"support","confidence"或者"lift"对规则列表进行重新排序。 在默认的情况下,排序是降序排列,可以指定参数decreasing=FALSE反转排序方式。

  1. >inspect(sort(grocery_rules,by="lift")[1:10])
  2. lhsrhssupportconfidencelift
  3. 3{herbs}=>{rootvegetables}0.0070157600.43125003.956477
  4. 57{berries}=>{whipped/sourcream}0.0090493140.27217133.796886
  5. 450{tropicalfruit,othervegetables,wholemilk}=>{rootvegetables}0.0070157600.41071433.768074
  6. 174{beef,othervegetables}=>{rootvegetables}0.0079308590.40206193.688692
  7. 285{tropicalfruit,othervegetables}=>{pipfruit}0.0094560240.26345613.482649
  8. 176{beef,wholemilk}=>{rootvegetables}0.0080325370.37799043.467851
  9. 284{pipfruit,othervegetables}=>{tropicalfruit}0.0094560240.36186773.448613
  10. 282{pipfruit,yogurt}=>{tropicalfruit}0.0064056940.35593223.392048
  11. 319{citrusfruit,othervegetables}=>{rootvegetables}0.0103711240.35915493.295045
  12. 455{othervegetables,wholemilk,yogurt}=>{tropicalfruit}0.0076258260.34246583.263712

(2)提取关联规则的子集:可以通过subset()函数提取我们感兴趣的规则

  1. >fruit_rules<-subset(grocery_rules,items%in%"pipfruit")#items表明与出现在规则的任何位置的项进行匹配,为了将子集限制到匹配只发生在左侧或者右侧位置上,可以使用lhs或者rhs代替
  2. >fruit_rules
  3. setof21rules
  4. >inspect(fruit_rules[1:5])
  5. lhsrhssupportconfidencelift
  6. 127{pipfruit}=>{tropicalfruit}0.0204372140.27016132.574648
  7. 128{pipfruit}=>{othervegetables}0.0261311640.34543011.785237
  8. 129{pipfruit}=>{wholemilk}0.0300965940.39784951.557043
  9. 281{tropicalfruit,pipfruit}=>{yogurt}0.0064056940.31343282.246802
  10. 282{pipfruit,yogurt}=>{tropicalfruit}0.0064056940.35593223.392048

以上,就是应用R语言添加包arules中实现的apriori算法进行的关联规则挖掘的应用,欢迎大家进行交流!

©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经

(0)
打赏 微信扫码打赏 微信扫码打赏 支付宝扫码打赏 支付宝扫码打赏
清一色的头像清一色管理团队
上一篇 2023年5月6日 03:57
下一篇 2023年5月6日 03:58

相关推荐

发表评论

登录后才能评论

联系我们

在线咨询:1643011589-QQbutton

手机:13798586780

QQ/微信:1074760229

QQ群:551893940

工作时间:工作日9:00-18:00,节假日休息

关注微信