|
世界上的万事万物都有着千丝万缕的联系,我们要善于发现这种关联
关联分析要解决的主要问题是:一群用户购买了很多产品之后,哪些产品同时购买的几率比较高?买了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])
|
|