关联分析详细讲解

关联分析

在市场营销学中有一个经典案例,也许你已经听说过,就是大名鼎鼎的“啤酒与尿布”的故事?这是超市数据挖掘史上经常被拿出来说的事迹,用的便是关联分析。全球零售业巨头沃尔玛在对消费者购物行为分析时发现,男性顾客在购买婴儿尿布湿时,经常会顺便搭配几瓶啤酒来犒劳自己,于是尝试推出了将啤酒和尿布摆在一起的促销手段,没想到这个举措居然使尿布和啤酒的销量都大幅增加了。

像这样的案例还有很多,一次去超市的购物,便可以提供许多机器学习的例子。物品的展示方式、购买后提供给你的优惠券以及忠诚度计划都是由大量的数据处理驱动的。商店看到数据的价值,可以帮助他们赚取更多的钱,他们肯定会为此使用技术。

忠诚度计划通过使用忠诚度卡为客户提供折扣,可以让商店一窥消费者的购买情况,无论使用的是会员卡、信用卡还是现金 ,商店都可以从消费记录中查看一起购买的商品。

查看一起购买的商品可以让商店了解顾客的购买行为。这些知识是从海量数据中提取的,可用于定价、营销促销、库存管理等。在大型数据集中寻找隐藏的关系被称为关联分析或关联规则学习。问题是,找到不同的项目组合可能是一项耗时的任务,而且就计算能力而言,成本高得令人望而却步。残酷的解决方案无法解决这个问题,因此需要一种更智能的方法来在合理的时间内找到频繁的项集(产品组合)。在本节中,我们将重点讨论Apriori算法来解决这个问题。

我们将首先详细讨论关联分析,然后讨论导致Apriori算法的Apriori原理。接下来,我们将创建函数来有效地查找频繁项集,然后从频繁项集中提取关联规则。

关联分析是在大型数据集中寻找有关联的项集,这些关联可以通过频繁项目集或关联规则来确定,频繁项目集是经常出现在一起的项目的集合,关联规则是两个项目之间存在着强烈的关系。我将用一个例子来说明这两个概念,超市的交易列表如图所示。

频繁项目集通常是一起出现的项目列表,图中的一个例子是{尿布,牛奶,啤酒}。从数据集中我们还可以找到一个关联规则,例如尿布→ 啤酒,这意味着,如果有人买尿布,他们很有可能会买啤酒。有了频繁的商品集和关联规则,零售商对他们的客户有了更好的了解。尽管关联分析的常见例子来自零售业,但它也可以应用于许多其他行业,如网站流量分析,医学和交叉销售中。

关于关联分析,我们需要先了解3个名词:支持度、置信度与提升度,他们的定义如下:

支持度(Support)

支持度可以理解为物品当前流行程度。计算方式是:支持度 = (某物品记录数量) / (总的记录数量)

下面支持度表示项集 {A,B}在总项集里出现的概率:

多项集支持度以此类推:

用上面的超市记录举例,一共有五个交易,尿布湿出现在五个交易中,故而{尿布湿}的支持度为4/5。{啤酒}的支持度是3/5。尿布湿和啤酒同时出现的次数是3,故而{尿布湿,啤酒}的支持度为3/5。

置信度(Confidence):

置信度是指如果购买物品A,有多大可能购买物品B(其实就是条件概率)。计算方式是这样:置信度( A -> B) = (包含物品A和B的记录数量) / (包含 A 的记录数量)

还是用上面超市记录举例:

提升度(Lift):

提升度指当销售一个物品时,另一个物品销售率会增加多少。计算方式是:提升度( A -> B) = 置信度( A -> B) / (支持度 A)

还是上面的数据举例:

当提升度(A->B)的值大于1的时候,说明物品A卖得越多,B也会卖得越多,否则值不会大于1。而提升度等于1则意味着产品A和B之间没有关联。最后,提升度小于1那么意味着购买A反而会减少B的销量。

Apriori算法过程:

Apriori的核心是根据物品间的支持度找出物品中的频繁项集。通过上面我们知道,支持度越高,说明物品越受欢迎。我们可以通过给Apriori提供一个最小支持度参数,然后Apriori会返回比这个最小支持度高的那些频繁项集。事实上,我们知道支持度的计算公式,可以直接遍历所有组合计算它们的支持度找出所有频繁项集,但问题是遍历所有组合花的时间太多,效率太低,假设有N个物品,那么一共需要计算2^N-1次,每增加一个物品,数量级是成指数增长。而Apriori就是一种找出频繁集的高效算法,它的核心是:

某个项集是频繁的,那么它的所有子集也是频繁的,因为:

{A,B,C}是频繁的,那么{A,B} {A,C} {BC}出现的频数一定≥{A,B,C}的频数,{A,B} {A,C} {BC}也一定是频繁的。

反之亦然,如果一个项集是非频繁项集,那么它的所有超集也是非频繁项集。

{A,B}是非频繁的,那么{A,B,C} {A,B,D} ...{A,B,Z}出现的频数一定≤{A,B}的频数,那么{A,B,C} {A,B,D} ...{A,B,Z}一定也是非频繁的。

那么,通过上面的逻辑,判断出非频繁项集后,他们的所有超集都可以忽略不用去计算了。

如上图所示,我们假设{A,B}这个项集是非频繁的,那么{A,B}这个项集的超集,{A,B,C},{A,B,D}等等也都是非频繁的,这些就都可以忽略不去计算。运用Apriori算法的思想,我们就能去掉很多非频繁的项集,大大简化计算量。

那么具体的,Apriori算法是如何做到挖掘 K 项频繁集的呢?Apriori算法采用了迭代的方法,先搜索出候选1项集及对应的支持度,剪枝去掉低于支持度阙值的1项集,得到频繁1项集。然后对剩下的频繁1项集进行连接,得到频繁2项集,筛选去掉低于支持度阙值的候选2项集,得到真正的频繁2项集。以此类推,迭代下去,直到无法找到频繁k+1项集为止,对应的频繁k项集的集合即为算法的输出结果。

下面时是使用Aprioris算法获取频繁项集的一个简单的例子:

通过上面的方法,可以逐渐遍历得到大于某个支持度阈值的所有频繁项集。

测试数据:

http://www.allmlp.com/public/resource/data/association_analysis.txt

我们看出尿布和啤酒的提升度值也很大(大于1) ,更一步说明了尿布和啤酒的关联性很强,所以在销售的时候,应该将其放在一起售卖,或者适当增加一下促销方式。

python代码请查看“关联分析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MLPlatform

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值