生动理解关联规则——Apriori算法

 

生动理解关联规则——Apriori算法_第1张图片

有趣的啤酒和尿布

“啤酒与尿布”的例子相信很多人都听说过吧,故事是这样的:在一家超市中,人们发现了一个特别有趣的现象,尿布与啤酒这两种风马牛不相及的商品居然摆在一起。但这一奇怪的举措居然使尿布和啤酒的销量大幅增加了。为什么有这么奇怪现象呢?看了资料后发现是因为美国妇女在丈夫回家前买尿布,然后丈夫顺手买了自己喜欢的啤酒,所以发生了这么有趣的事情。

关联分析

关联分析是一种在大规模数据集中寻找有趣关系的任务。这些任务有两种形式:频繁项集和关联规则。

频繁项集是经常出现在一块的物品的集合;

关联规则暗示的是两种物品之间可能存在很强的关系。

可以结合某家店的交易清单来说明这两个概念:

 

生动理解关联规则——Apriori算法_第2张图片

频繁集指的就是数据集中经常一起出现的组合,比如{啤酒、尿布、饼干}就是频繁集中的一个例子,而根据上表也可以找到{尿布 to 啤酒}的关联规则。而我们要通过关联分析大规模数据来发现数据之间的关系,如何定义关系的强弱呢?这时候我们用支持度(Support)和置信度(Confidence)来定义。

公式定义

支持度:数据集中包含该项集记录所占的比例,上例中{豆奶}的支持度=2/5,{啤酒,尿布}的支持度=3/5。

置信度:针对像频繁集数量>=2的情况,例如{啤酒,尿布},那么置信度=支持度({尿布,啤酒})/支持度(尿布)。

关联规则的一般步骤

找到频繁集;

在频繁集中通过可信度筛选获得关联规则。

Apriori算法假设

Apriori算法是生成频繁集的一种算法。Apriori原理有个重要假设,如果某个项集是频繁的,那么它的所有子集势必也是频繁的。如果一个项集是非频繁项集,那么它所对应的超集就全都是非频繁项集。

一个简单的例子

生动理解关联规则——Apriori算法_第3张图片

上图从左到右依次进行迭代,在C1中{D}出现次数为1,所以{D}不是频繁集,由于Apriori假设,{D}的超集也不是频繁集(eg:{D,A,C},{A,D},{C,D}),很明显看出这个集合的出现次数也是1;

筛选掉{D}来到C2,C2是对L1进行两两不重复组合的结果,然后再根据步骤1进行筛选非频繁集,不断迭代直至最后组合剩下一个时迭代结束。

将从步骤2得到频繁集通过计算得到关联规则,计算方式如下:

 

同理,

 

需要注意的是,b和a的位置不同代表着的意思不一样,就像是你买一次啤酒同时去买了十次尿布,和买了十次尿布只买了一次啤酒的感觉时很不同的。

所以利用置信度阈值(Confidence Threshold),将不满足的置信度(Confidence)都过滤掉,剩下的就是该数据集的强关联规则。

总结

传统的Apriori算法的计算量很大,当商品数据量大时基本上效率很低,所以后来有FP-Tree算法优化了该算法。

在电商平台中,常用的关联规则应用是单品推荐单品,即一般只需要知道频繁2项集即可。而且商品并不是全部平等销售的,组合、搭售、买赠、企业采购等订单都会影响频繁集的生成,若仅用支持度衡量物品之间的关联性,很容易导致出现假性关联。

在关联规则中,因为支持度表示在历史中A和B同时购买的概率,置信度表示A推荐B的可信程度。由此可以采用提升度=支持度(Support)*置信度(Confidence )的方式来表示A推荐B而A和B同时购买的概率。这样相比于单纯使用支持度更全面,同时避免了支持度中等或置信度中等的关联规则被淘汰。

你可能感兴趣的:(国科大论文)