世界上的万事万物都有着千丝万缕的联系,我们要善于发现这种关联。关联分析要解决的主要问题是:一群用户购买了很多产品之后,哪些产品同时购买的几率比较高?买了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。
一句话关联规则:关联规则是展现项集(itemsets)间关联(association)与相关性(correlation)的规则!
在关联规则挖掘中,满足一定最小置信度以及支持度的集合成为频繁集(frequent itemset),或者强关联。关联规则挖掘则是一个寻找频繁集的过程。
总之,可信度是对关联规则的准确度的衡量,支持度是对关联规则重要性的衡量。支持度说明了这条规则在所有事务中有多大的代表性,显然支持度越大,关联规则越重要。有些关联规则可信度虽然很高,但支持度却很低,说明该关联规则实用的机会很小,因此也不重要。
在了解了关联规则的三个度的基本定义之后,下一步则需要阐述清楚Apriori算法的基本定义。
在讲Apripri算法之前,我们首先要清楚两个概念:
1)设定最小支持度的阈值,如果一个项集的支持度大于等于最小支持度,则其为频繁项集,如果一个项集的支持度小于最小支持度,则其为非频繁项集。
2)对于一个项集,如果它是频繁集,则它的子集均是频繁集;如果它是非频繁集,则它的父集都是非频繁集。这是因为一个项集的所有子集的支持度都大于等于它本身,一个项集的所有父亲的支持度都小于等于它本身。
有了上面两个概念打底,Apriori算法就可以被定义了。Apripri算法主要分为三步:
1)设定最小支持度的阈值。从单项集开始,先计算所有单项集的支持度,过滤掉非频繁单项集及其父集;将剩余的单项集组合为二项集,先计算所有二项集的支持度,过滤掉非频繁二项集及其父集;不断地迭代上述过程,最后筛选出所有的频繁项集。
2)设定最小置信度的阈值。对频繁项集进行计算,求出满足置信度条件的强关联规则。
3)设定最小提升度的阈值。对第2)步进行计算,求出满足提升度条件的强关联规则,作为最后的关联规则的模型结果。
相比于最原始的一一计算,使用Apripor算法计算频繁项集可以大大地减少运算量,提升计算效率。 到底,理论的梳理就完全结束,下一步我将会对关联规则进行实战演练。
(2)网络安全领域中的入侵检测技术;
(3)可用在用于高校管理中,根据挖掘规则可以有效地辅助学校管理部门有针对性的开展贫困助学工作;
(4)也可用在移动通信领域中,指导运营商的业务运营和辅助业务提供商的决策制定。
关联规则算法的主要应用是购物篮分析,是为了从大量的订单中发现商品潜在的关联。其中常用的一个算法叫Apriori先验算法。
Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集。
# 数据转成data.frame格式
mdata <- as(mdata, "data.frame")
# 将数据转换成事务集形式(分组之后)
mdata <- as(mdata, "transactions")
library(arules)
library(grid)
library(arulesViz) # 加载可视化包
# ?apriori
apriori(data, parameter = NULL, appearance = NULL, control = NULL)
Data:交易数据(transactions)类对象或任何能够被转化成transaction的数据结构
Parameter:APparameter类对象或命名列表。挖掘规则默认的行为是:支持度=0.1;置信度=0.8;输出的最大规则长度;
Appearance:APappearance类对象或命名列表。
Control:APcontrol类对象或命名列表。控制挖掘算法的性能!
APparameter中minlen(最小规则数)默认的值是1,这意味着将会产生只有一项(item:比如,先前项/LHS)的规则:{}=>{beer}—这项规则说明,no matter what other items are involved the item in the RHS will appear with the probability given by the rule’s confidence (which equals the support)。如果想要避免这些规则,可以使用参数:parameter=list(minlen=2)!
返回一个rules类对象或itemsets类对象。
根据购物篮分析的目标,最有用的规则或许是那些具有高支持度、信度和提升度的规则。arules包中包含一个sort()函数,通过指定参数by为“support”,“confidence”或者“lift”对规则列表进行重新排序。 在默认的情况下,排序是降序排列,可以指定参数decreasing=FALSE反转排序方式。
lift(提升度),表示用来度量一类商品相对于它的一般购买率,此时被购买的可能性有多大 (Lift)是避免了一些不平衡数据标签的偏差性,Lift越大,则数据质量较好;Lift越小,则数据越不平衡。在此处设置lift值为3。
inspect(head(sort(rules, by="lift"), 3))
is.subset和is.superset函数用于在关联和项集矩阵对象中发现子集或父集!
Is.subset(x,y=NULL, proper=FALSE, sparse=FALSE,...)
返回一个与给定矩阵(在上三角或下三角中TRUE)相同大小的逻辑矩阵
Lower.tri(x,diag=FALSE)
rules=apriori(mdata,parameter=list(support=0.2,confidence=0.5))
rules=apriori(mdata,parameter=list(support=0.2,confidence=0.5,minlen = 2))