找回密码
 注册
查看: 2052|回复: 1

R 语言与关联分析 (转载)

[复制链接]
发表于 2014-5-22 15:40:18 | 显示全部楼层 |阅读模式

世界上的万事万物都有着千丝万缕的联系,我们要善于发现这种关联

关联分析要解决的主要问题是:一群用户购买了很多产品之后,哪些产品同时购买的几率比较高?买了A产品的同时买哪个产品的几率比较高?可能是由于最初关联分析主要是在超市应用比较广泛,所以又叫“购物篮分析”,英文简称为MBA,当然此MBA非彼MBA,意为Market Basket Analysis。

(1)普通问题:如果在研究的问题中,一个用户购买的所有产品假定是同时一次性购买的,分析的重点就是所有用户购买的产品之间关联性;
(2)序列问题:如果假定一个用户购买的产品的时间是不同的,而且分析时需要突出时间先后上的关联,如先买了什么,然后后买什么?那么这类问题称之为序列问题,它是关联问题的一种特殊情况。从某种意义上来说,序列问题也可以按照关联问题来操作

关联分析有三个非常重要的概念,那就是“三度”:支持度、可信度、提升度。

假设有10000个人购买了产品,其中购买A产品的人是1000个,购买B产品的人是2000个,AB同时购买的人是800个。

支持度指的是关联的产品(假定A产品和B产品关联)同时购买的人数占总人数的比例,即800/10000=8%,有8%的用户同时购买了A和B两个产品;

可信度指的是在购买了一个产品之后购买另外一个产品的可能性,例如购买了A产品之后购买B产品的可信度=800/1000=80%,即80%的用户在购买了A产品之后会购买B产品;

提升度就是在购买A产品这个条件下购买B产品的可能性与没有这个条件下购买B产品的可能性之比,没有任何条件下购买B产品可能性=2000/10000=20%,那么提升度=80%/20%=4。


很多知识性的内容由于格式的问题或者自己的ppt太麻烦,没往里添加,加一些R的代码吧。基于啊apriori 和eclat算法


library(arules)

data(Groceries)

library(arulesViz)

-------------------------------------------------------------------------
apriori算法案例:简易应用之筛选购全脂牛奶 的关联分析情况

rules = apriori(Groceries,parameter = list(support = 0.01,confidence = 0.2))

inspect(sort(rules,by="support")[1:6]) #按支持度查看前6条规则
inspect(sort(rules,by="confidence")[1:6]) #按置信度查看前6条规则
sub.rules=subset(rules, subset = rhs %in% "whole milk" &lift > 1.2) #也可以用subset做规则的筛选,取"右手边"含有whole milk且lift大于1.2的规则

itemFrequencyPlot(Groceries,support = 0.05,cex.names =0.8) #数据画频繁项的图

plot(rules, shading="order", control=list(main = "Two-key plot"))#见chart.1
plot(rules, method="grouped")#见chart.2
plot(rules, method="graph")#见chart.3


----------------------------------------------------------------

eclat算法案例:简易应用之筛选购全脂牛奶 的关联分析情况


fsets <- eclat(Groceries, parameter = list(support = 0.05),control = list(verbose=FALSE)) #提取频繁项集

itemFrequencyPlot(Groceries,support = 0.05,cex.names =0.8) #数据画频繁项的图

itemsetList <- LIST(items(fsets), decode = FALSE)

singleItems <- fsets[size(items(fsets)) == 1] #筛选单独项集

singleSupport <- quality(singleItems)$support #单独项集的支持度

names(singleSupport) <- unlist(LIST(items(singleItems), decode = FALSE)) #转换为列表格式的数据

allConfidence <- quality(fsets)$support / sapply(itemsetList, function(x)max(singleSupport[as.character(x)]))

quality(fsets) <- cbind(quality(fsets), allConfidence)

fsetsmilk <- subset(fsets, subset = items %pin% "whole milk")

inspect(sort(fsetsmilk[size(fsetsmilk)>1], by = "allConfidence")[1:3])

回复

使用道具 举报

发表于 2014-5-23 00:12:54 | 显示全部楼层
感觉有点迷迷糊糊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-23 19:37 , Processed in 0.029059 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表