Loading...

Apriori - 基于关联规则的推荐算法(二)

Apriori Algorithm - 先验算法,基于数据挖掘和关联规则的推荐算法(二)

前言:上一章介绍了Apriori算法的核心概念、数据频繁项集、以及算法的核心公式。接下来将通过一个例子,手工演算Apriori算法

Apriori实例

在一家烧烤店,有6名客人,分别购买了以下商品,计算商品之间的关联性

tips: 数据的N项集,以下简称K = N

客人购买的产品
老李鸡翅,玉米,羊肉串,韭菜,鸡杂,啤酒
老王鸡翅,韭菜,鸡杂,柠檬茶
张三羊肉串,韭菜
徐义杰玉米,鸡杂,柠檬茶,啤酒
刘淇昌鸡翅,韭菜,羊肉串,鸡杂,柠檬茶
徐家丽鸡翅,韭菜,玉米柠檬茶

step1: 定义2个关键值(minSup、minConf)

   minSup = 0.5 = 50%            minConf = 0.7 = 70%

step2: 计算数据K=1项集Sup

L1C1Sup1
鸡翅42/3 -> 0.667
玉米31/2 -> 0.5
羊肉串31/2 -> 0.5
韭菜42/3 -> 0.667
鸡杂42/3 -> 0.667
啤酒(此Sup < minSup,不再参与后续聚合)21/3 -> 0.334
柠檬茶42/3 -> 0.667

根据第一章的Sup计算公式可得出所有商品的K=1项集Sup

例:Sup{鸡翅} = 鸡翅出现的次数(4次) / 总数据项数量(6条) = 4 / 6 = 2/3 = 0.667 (之后的Sup计算不再举例说明)

step3: 计算数据K=2项集Sup

同理,Sup < minSup的数据集不再记录在表格中

L2C2Sup2
{鸡翅,韭菜}42/3 → 0.667
{鸡翅,鸡杂}31/2 → 0.5
{鸡翅,柠檬茶}31/2 → 0.5
{羊肉串,韭菜}31/2 → 0.5
{韭菜,鸡杂}31/2 → 0.5
{韭菜,柠檬茶}31/2 → 0.5

step4: 计算数据K=3项集Sup

L3C3Sup3
{鸡翅,韭菜,鸡杂}31/2 → 0.5
{鸡翅,韭菜,柠檬茶}31/2 → 0.5

至此,所有数据集的Sup计算完毕!

step5: 计算全部Sup对应的Conf

   Conf({鸡翅,韭菜} -> {鸡杂}) = {鸡翅,韭菜,鸡杂} / {鸡翅,韭菜}  = C3 / C2 = 3 / 4 = 0.75

   Conf({鸡翅,鸡杂} → {韭菜})= {鸡翅,鸡杂,韭菜} / {鸡翅,鸡杂} = C3 / C2 = 3/3 = 1

   Conf({鸡翅,韭菜} → {柠檬茶})= {鸡翅,韭菜,柠檬茶} / {鸡翅,韭菜} = C3 / C2 = 3/4 = 0.75

以上为K=3的Conf计算

   Conf({柠檬茶,韭菜} → {鸡翅})= {鸡翅,韭菜,柠檬茶} / {柠檬茶,韭菜} = C3 / C2 = 3/3 = 1

   Conf{鸡翅} → {韭菜} = {鸡翅,韭菜} / {鸡翅} = C2 / C1 = 4/4 = 1

   Conf{鸡杂} → {鸡翅} = {鸡翅,鸡杂} / {鸡杂} = C2 / C1 = 3/4 = 0.75

   Conf{鸡翅} → {柠檬茶} = {鸡翅,柠檬茶} / {鸡翅} = C2 / C1 = 3/4 = 0.75

   Conf{羊肉串} → {韭菜} = {羊肉串,韭菜} / {羊肉串} = C2 / C1 = 3/3 = 1

   Conf{韭菜} → {羊肉串} = {羊肉串,韭菜} / {韭菜} = C2 / C1 = 3/4 = 0.75

   Conf{韭菜} → {鸡杂} = {韭菜,鸡杂} / {韭菜} = C2 / C1 = 3/4 = 0.75

   Conf{韭菜} → {柠檬茶} = {韭菜,柠檬茶} / {韭菜} = C2 / C1 = 3/4 = 0.75

以上为K=3的Conf计算

至此,所有数据集的Conf值计算完毕!

*这里可能会有疑问,为什么没有K=1的Conf值?第一章里关于Conf的介绍讲到,Conf值是“信心值”。而K=1项集时,数据没有关联性,所以不存在Conf值,Conf值的计算最早只有在K=2时才开始

step6: 计算Lift

Lift({鸡翅,韭菜} → {鸡杂}) = Sup{鸡翅,韭菜,鸡杂} / Sup{鸡翅,韭菜} * Sup{鸡杂} = 0.5 / 2/3 * 2/3 = 0.5 / 0.44 = 1.136

Lift({鸡翅,鸡杂} → {韭菜}) = Sup{鸡翅,韭菜,鸡杂} / Sup{鸡翅,鸡杂} * Sup{韭菜} = 0.5 / 0.5 * 0.667 = 1.497

Lift({鸡翅,韭菜} → {柠檬茶}) = Sup{鸡翅,韭菜,柠檬茶} / Sup{鸡翅,韭菜} * Sup{柠檬茶} = 0.5 / 0.667 * 0.667 = 1.124

Lift({柠檬茶,韭菜} → {鸡翅}) = Sup{鸡翅,韭菜,柠檬茶} / Sup{柠檬茶,韭菜} * Sup{鸡翅} = 0.5 / 0.5 * 0.667 = 1.497

以上为三阶Lift计算,即:购买产品A和B是否会对C有影响。

以此类推,可继续计算二阶Lift的所有结果,以得出产品A对B是否有购买影响。

由于Lift为【提升度】通过所有Lift的计算,对Lift < 1的结果,以及对应的Sup,Conf作废弃处理,即:此Sup和Conf均不具备参考性

篇幅受限,K=2的Lift值将不计算,读者可以自己动手试试

通过以上演算,我们可以得出以下结论:

结论1: 购买鸡翅,韭菜的客人大概率会买鸡杂

结论2: 购买鸡翅,鸡杂的客人有较高的概率会买韭菜

结论3: 购买鸡翅,韭菜的客人有大概率会买柠檬茶

结论4: 购买柠檬茶,韭菜的客人有较高概率会买鸡翅

请记住:Sup、Conf、Lift都不能单独采信,若要算法做出精准决策时,需要3个关键值均达到要求。且不同场景下,3个关键值大小的设置,会极大程度上影响算法做出的决策!

至此,我们已经通过一个简单的小例子,展示了Apriori算法的能力。下一章我们将把本章的算法思想通过代码实现!

0

回到顶部