推荐系统|关联规则 置信度与支持度以及Apriori算法简介

关联规则:购物篮分析,最早的出现是为了发现超市销售数据库中不同商品之间的关联关系。

文章目录

    • 1.案例引入
      • (1)啤酒与尿布的故事
      • (2)购物篮例子
    • 2.关联分析问题定义
      • 2.1二元表示
      • 2.2项集和支持度计数
      • 2.3 关联规则
      • 2.4为什么使用支持度和置信度?
      • 2.5.1频繁项集的产生
      • 2.5.2Apriori算法
  • 未完待续

1.案例引入 (1)啤酒与尿布的故事
“啤酒与尿布”的故事产生于20世纪90年代的美国沃尔玛超市。沃尔玛的超市管理人员分析销售数据时发现了一个令人难于理解的现象:在某些特定的情况下,“啤酒”与“尿布”两件看上去毫无关系的商品会经常出现在同一个购物篮中,这种独特的销售现象引起了管理人员的注意,经过后续调查发现。
原来,美国的妇女通常在家照顾孩子,所以她们经常会嘱咐丈夫在下班回家的路上为孩子买尿布,而丈夫在买尿布的同时又会顺手购买自己爱喝的啤酒。这样就会出现啤酒与尿布这两件看上去不相干的商品经常会出现在同一个购物篮的现象。
这个发现为商家带来了大量的利润,但是如何从浩如烟海却又杂乱无章的数据中,发现啤酒和尿布销售之间的联系呢?
(2)购物篮例子
商店的收银台每天都收集了大量的顾客购物篮数据,如下表,一般也称作购物篮事务,表中每一行对应一个事务,包含一个唯一标识的TID和给定顾客购买的商品的集合。零售商对分析这些数据很感兴趣,以便了解他们的顾客的购买行为,可以使用这些价值的信息来支持各种商业应用,如市场促销,顾客管理等。
推荐系统|关联规则 置信度与支持度以及Apriori算法简介
文章图片

关联分析,用于发现隐藏在大型数据集中有意义的联系。我们将所发现的联系用关联规则或频繁项集的形式表示,从上表中可以提取出如下规则:
{尿布}---------------------->{啤酒}
该规则表明尿布和啤酒销售之间存在很强的联系,因为许多购买了尿布的顾客也购买了啤酒。商家们可以利用这类规则,帮助他们发现新的销售组合或者商机。

在数据问题中,我们需要处理两个关键问题:
  • 从大型事务数据集中发现模式可能在计算上要付出很高的代价。
  • 所发现的某些模式也有可能是虚假的,因为他们可能是偶然发生的。这两个问题是我们在接下来需要解决的。
2.关联分析问题定义 2.1二元表示
我们可以用二元形式表示购物篮数据,其中每行对应一个事务,每列对应一个项。项可以用二元变量表示,项在事务中出现它的值为1,否则为0。
项在事务中的出现比不出现更重要,因此项也是非对称的二元变量。这也是实际购物篮数据的极其简单的展现,这种表示忽略了数据的一些比较重要特征,比如价格和数量等。
推荐系统|关联规则 置信度与支持度以及Apriori算法简介
文章图片

2.2项集和支持度计数
在关联分析中,包含0个或多个项的集合被称为项集(itemset),如果一个项集包含k个项,则称它为k-项集。如{啤酒,尿布,牛奶}是一个3项集。空集是不包含任何项的项集。
项集的一个最重要的性质是它的支持度计数,也就是包含特定项集的事务个数。我们从数学上定义项集X的支持度计数表示为
推荐系统|关联规则 置信度与支持度以及Apriori算法简介
文章图片

从表中可以得出=={啤酒,尿布,牛奶}==的支持度计数为2,因为只有两个事务中包含了这三个项。
2.3 关联规则
关联规则是形如X->Y的蕴含表达式,其中X和Y是不相交项集。
关联规则的强度使用它的支持度(support)和置信度(confidence)度量:
支持度确定可以用于给定数据集的频繁程度,数学表达式如下。
推荐系统|关联规则 置信度与支持度以及Apriori算法简介
文章图片

分子指X和Y同时出现的次数,N是事务的总数,即行数
置信度确定Y在包含X的事务中出现的频繁程度,数学表达式如下。
推荐系统|关联规则 置信度与支持度以及Apriori算法简介
文章图片

购买X的情况下同时购买X和Y的概率,分子指X和Y同时出现的次数,分母是前置项出现的总和
推荐系统|关联规则 置信度与支持度以及Apriori算法简介
文章图片

推荐系统|关联规则 置信度与支持度以及Apriori算法简介
文章图片

例子:
考虑规则{牛奶,尿布}–>{啤酒}
(1){牛奶,尿布,啤酒}的支持度计数为2
(2)事务总数N=5
(3){牛奶,尿布}前置出现项的次数为3
(4)支持度S=2/5=0.4,置信度C=2/3=0.67
2.4为什么使用支持度和置信度?
关联规则发现:给定事务的集合T,关联规则发现是指==找出支持度大于等于minsup(最小支持度)并且置信度大于等于minconf(最小置信度)==的所有规则。
但是根据上述规则挖掘关联规则的时候,计算的代价太高。我们在实际业务中通常采用的一种策略:将关联规则挖掘任务分解为两个子任务
  • (1)频繁项集的产生:其目标是发现满足最小支持度阈值的所有项集,这些项集就是频繁项集(frequent itemset)。该任务开销也是最大的。
  • (2)规则的产生:其目标是从上一步发现的频繁项集中提取所有高置信度规则,这些规则称作强规则。
2.5.1频繁项集的产生
根据高中数学集合的基本知识,一个含有K个元素的集合,它的非空子集个数为推荐系统|关联规则 置信度与支持度以及Apriori算法简介
文章图片

(不包括空集)。频繁项集也是在集合中寻找非空子集的过程,需要计算规模可能是指数级别的,复杂度高。
推荐系统|关联规则 置信度与支持度以及Apriori算法简介
文章图片

为了降低频繁项集产生的计算复杂度,采用两种方法:
  • (1)减少候选项集的数目(M):使用先验Apriori原理,无需计算支持度而删除某些候选项集的有效方法。也算是一种剪枝的方法。
  • (2)减少比较次数:将每个候选集与每个事务相匹配,同时,可以存储候选项集或压缩数据集减少比较次数。
    接下来解释先验原理
    定理1:先验原理:如果一个项集是频繁的,则它的所有子集一定也是频繁的。同理,如果一个子集是非频繁的,则整个超集是非频繁的。
    推荐系统|关联规则 置信度与支持度以及Apriori算法简介
    文章图片
我们通过上述原理,立马可以对很多非频繁项集进行剪枝,这种剪枝方法也称作基于支持度的剪枝。依赖的原理为:一个项集的支持度绝不会超过他的子集的支持度。
推荐系统|关联规则 置信度与支持度以及Apriori算法简介
文章图片

图3:基于支持度的剪枝:如果{a,b}是非频繁的,则所有超集均为非频繁的
2.5.2Apriori算法
(1)算法介绍
1993年美国学者Agrawal提出通过分析购物篮中的商品集合,从而找出商品之间关联关系的关联算法,并根据商品之间的关系,找出客户的购买行为。Agrawal从数学及计算机算法角度提出了商品关联关系的计算方法——Apriori算法。
沃尔玛从上个世纪90年代尝试将Aprior算法引入到POS机数据分析中,并获得了成功,于是产生了“啤酒与尿布”的故事。
如何寻找?
在历史购物记录中,一些商品总是在一起购买。但人看上去不是那么的直观的,而是隐蔽的。让计算机做这事,设计算法让计算机自动去找,找到这样的模式(规律)。
目标:寻找那些总是一起出现商品。
如:购买mahout实战—>机器学习实战
引出支持度和置信度
《mahout实战》与《机器学习实战》一起该买的记录数占所有商品记录总数的比例——支持度(整体)
买了《mahout实战》与《机器学习实战》一起该买的记录数占所有购买《mahout实战》记录数的比例——置信度==(局部)==
需要达到一定的阈值
(2)举例
Apriori算法是第一个且最重要的关联规则算法,使用基于支持度的剪枝技术,从而控制候选项集的指数级别的增长。
我们把前面的商品的例子,假设最小支持度阈值是60%,相当于最小支持度计数为3。(根据支持度=x/5=0.6=>x=3)
推荐系统|关联规则 置信度与支持度以及Apriori算法简介
文章图片

推荐系统|关联规则 置信度与支持度以及Apriori算法简介
文章图片

分析:
  • (1)根据最小支持度阈值0.6,计算最小支持度为3,则根据最小支持度删去支持度低于3的候选集,此时我们称之为候选1-项集。如上图去掉了可乐和鸡蛋的两项。
  • (2)将得到的候选1项集合并为候选2项集,如上图,根据支持度计数将低于3的舍去,舍去{啤酒,面包}和{啤酒,牛奶},得到所有的候选2-项集。
  • (3)利用候选2项集得到候选3项集:{啤酒,尿布,面包}3,{啤酒,尿布,牛奶}3,{面包,尿布,牛奶}3,因为{啤酒,面包},{啤酒,牛奶}在候选二项集中已经被判定非频繁项集,因此根据先验原理,它的超集也是非频繁项集,最后得到{面包,尿布,牛奶}3的频繁项集。
算法描述:
  • (1)初始通过单遍扫描数据集,确定每个项的支持度。从而得到频繁1-项集的集合F1.
  • (2)使用上次迭代发现的频繁(k-1)项集,产生新的频繁k项集。(关键步骤)
  • (3)对候选集支持度计数,算法需要扫描一次数据集,使用子集函数确定包含在每一个事务t中所有候选k项集。
  • (4)计算候选项的支持度计数之后,算法将删去支持度计数小于minsup的所有候选集。
  • (5)当没有新的频繁项集产生,算法结束。
【推荐系统|关联规则 置信度与支持度以及Apriori算法简介】总结:Apriori算法的频繁项集产生的部分有两个重要特点:
  • (1)逐层计算,从频繁1-项集到最长的频繁项集,每次遍历项集格中的一层。
  • (2)使用“产生-测试”(geberate and test)策略来发现频繁项集。每次迭代后,新的候选项集都由前一次迭代发现的频繁项集产生,然后对每个候选的支持度进行计数,并与最小支持度阈值进行比较。
未完待续

    推荐阅读