Skip to content

Latest commit

 

History

History
118 lines (77 loc) · 6.09 KB

Apriori.md

File metadata and controls

118 lines (77 loc) · 6.09 KB

Apriori算法

关联规则挖掘是数据挖掘中的一个非常重要的研究方向,也是一个由来已久的话题,它的主要任务就是设法发现事物之间的内在联系。

参考: https://www.cnblogs.com/qwertWZ/p/4510857.html#_label1

参考: http://blog.csdn.net/lizhengnanhua/article/details/9061755

在电商行业里,有一个著名的公式:销售额=UV * 转化率 * 客单价

而提高客单价的一个有效手段就是关联销售或者叫交叉销售(cross-selling)。

常见的产品形态就是组合产品、套餐搭配、配件中心等。

而不同的商品如何搭配组合才能激发用户最大的购买欲望就是一个关键的问题。

Apriori算法是最常用的关联规则挖掘算法。Apriori算法的原理就是说如果某个项是频繁的,那么它的所有子集也是频繁的。

也就是说,如果一个项是非频繁的,那么它的所有超集也是非频繁的

假设目前宠物商店的交易系统中只有下表1中的几张顾客购物清单。

表1 顾客购物清单

交易订单号 顾客购物清单
001 鸟、鸟笼、鸟食、猫粮、猫砂
002 鱼食、鸟、鸟笼
003 猫粮、狗粮、宠物玩具
004 鸟、鸟笼、鸟食
005 猫粮、猫砂、宠物玩具

我们的目标是利用过去顾客已购买商品的历史信息作为参考,推荐他们可能感兴趣的其他商品。

因此在这里,宠物商店的管理者经过仔细考虑和讨论,确定只要一个商品组合的购买比例占到订单交易笔数的40%(即支持度),即可认为该商品组合中的商品集合是具有较强的购买关联性。 因此,如果顾客在购物篮中加入了组合其中的一种商品,则系统就会立刻将组合中的其他商品推荐给顾客。

下面模拟Apriori算法完成这项工作:

(1)计算单项商品的频繁项集L[1]

首先要找到单项商品的候选商品频繁项集C[1],然后过滤掉其中支持度小于40%的商品频繁项集从而得到L[1],如表2所示。

表2 计算频繁项集L[1]

商品频繁项集C[1] 存在的交易订单号 支持度 是够保留该商品
001,002,004 3/5 x 100% > 40%
鸟笼 001,002,004 3/5 x 100% > 40%
鸟食 001,004 2/5 x 100% = 40%
猫粮 001,003,005 3/5 x 100% > 40%
猫砂 001,005 2/5 x 100% = 40%
鱼食 002 1/5 x 100% < 40%
狗粮 003 1/5 x 100% < 40%
宠物玩具 003,005 2/5 x 100% = 40%

得到频繁项集L[1] = {{鸟},{鸟笼},{鸟食},{猫粮},{猫砂},{宠物玩具}}。

(2)根据频繁项集L[1]生成候选频繁项集C[2]

顾名思义。C[2]即为商品数量为2的候选频繁项集,它是由单品频繁项集L[1]中的频繁项集两两组合而来的,这里直接给出结果。 得到候选频繁项集C[2] = {{鸟,鸟笼},{鸟,鸟食},{鸟,猫粮},{鸟,猫砂},{鸟,宠物玩具},{鸟笼,鸟食},{鸟笼,猫粮},{鸟笼,猫砂},{鸟笼,宠物玩具},{鸟食,猫粮},{鸟食,猫砂},{鸟食,宠物玩具},{猫粮,猫砂},{猫粮,宠物玩具},{猫砂,宠物玩具}}。

(3)计算单项商品频繁项集L[2] 利用候选频繁项集C[2]进行计算,过滤掉支持度小于40%的商品频繁项集得到L[2],如表3所示。

表3 计算频繁项集L[2]

商品频繁项集C[2] 存在的交易订单号 支持度 是否保留该商品
鸟,鸟笼 001,002,004 3/5 x 100% > 40%
鸟,鸟食 001,004 2/5 x 100% = 40%
鸟,猫粮 001 1/5 x 100% < 40%
鸟,猫砂 001 1/5 x 100% < 40%
鸟,宠物玩具 0/5 x 100% < 40%
鸟笼,鸟食 001,004 2/5 x 100% = 40%
鸟笼,猫粮 001 1/5 x 100% < 40%
鸟笼,猫砂 001 1/5 x 100% < 40%
鸟笼,宠物玩具 0/5 x 100% < 40%
鸟食,猫粮 001 1/5 x 100% < 40%
鸟食,猫砂 001 1/5 x 100% < 40%
鸟食,宠物玩具 0/5 x 100% < 40%
猫粮,猫砂 001,005 2/5 x 100% = 40%
猫粮,宠物玩具 003,005 2/5 x 100% = 40%
猫砂,宠物玩具 005 1/5 x 100% < 40%

得到频繁项集L[2] = {{鸟,鸟笼},{鸟,鸟食},{鸟笼,鸟食},{猫粮,猫砂},{猫粮,宠物玩具}}。

(4)根据频繁项集L[2]生成候选频繁项集C[3] 本步和第二步中C[2]的生成规则是一样的,这里强调一点,在Apriori算法中只允许差异为1的不同项集进行组合。

例如在本次计算C[3]的候选频繁项集时, {鸟,鸟笼}和{鸟,鸟食}之间是可以组合的,而{鸟,鸟笼}和{猫粮,猫砂}由于这两个频繁项集的差异为2(超过了一个元素),则不能进行组合。

得到候选频繁项集C[3] = {{鸟,鸟笼,鸟食},{猫粮,猫砂,宠物玩具}}。

(5)计算单项商品频繁项集L[3]

表4 计算频繁项集L[3]

商品频繁项集C[3] 存在的交易订单号 支持度
鸟,鸟笼,鸟食 001,004 2/5 x 100% = 40%
猫粮,猫砂,宠物玩具 005 1/5 x 100% < 40%

得到频繁项集L[3] = {{鸟,鸟笼,鸟食}}。

(6)循环终结条件及获得最终的商品频繁项集 由于C4应由L[3]中的频繁项集组合而来,但L[3]中目前已没有可供继续连接的频繁项集,因此循环到此结束。

根据Apriori算法,本例中最终的商品频繁项集为L[1] ∪ L[2] ∪ L[3] ={{鸟},{鸟笼},{鸟食},{猫粮},{猫砂},{宠物玩具},{鸟,鸟笼},{鸟,鸟食},{鸟笼,鸟食},{猫粮,猫砂},{猫粮,宠物玩具},{鸟,鸟笼,鸟食}}。

根据本例中宠物商店的需求,对客户兴趣度有意义的商品关联数据为{鸟,鸟笼},{鸟,鸟食},{鸟笼,鸟食},{猫粮,猫砂},{猫粮,宠物玩具},{鸟,鸟笼,鸟食}。因此,宠物商店可根据以上数据来进行商品推荐。