关联规则Apriori算法

关联规则有时也被称之为购物篮分析,常被用于发现隐藏在大型数据集背后的有趣关系,这些关系被称为规则或频繁项集,用于回答以下问题:
1.哪些产品可能会被一起购买?
2.与这个人相似的客户倾向于购买什么产品?
3.对于已经购买了该产品的客户,他们还可能查看或购买什么其他类似的产品?

概念:
1、所谓项集就是项目的集合,只包含一个项目的项集为单项集,包含多个项目的项集为多项集。例如:超市交易单中,{牛奶}、{面包}就是多个单项集,{牛奶、面包}、{牛奶、面包、苹果}是多个多项集;这里的多项集是同时发生的,即用户既买了牛奶又买了面包;

2、在所有数据中,项集出现的概率被称之为该项集的支持度,比如出现{牛奶}的交易占总交易的比例为70%,则{牛奶}的支持度为70%;

3、我们通常会设定一个最小支持度来划分项集是否是频繁的,比如我们设置最小支持度为50%,则超过这个最小支持度的项集都是频繁项集。可以理解为被购买次数占比超过一半的商品都是被频繁购买的商品。

4、一个多项集如果是频繁项集,则它每个子项必定是一个频繁项集,因为这里的多项集是指每个子项同时发生的项集。

5、一般会找出交易中存在的所有频繁项集或限定多项集的长度以内的频繁项集;Apriori算法采用的是一个自下而上的迭代算法:

  1)设定一个最小支持度0.5;
  2)先找出单项集中的频繁项集;
  3)合并筛选出的单项集进行合并,并剪掉非频繁项集的项集;
  4)迭代进行合并剪枝,指导达到限定长度或最大迭代;
  5)输出所有频繁项集。

6、有了频繁项集后就有了候选规则,比如一个频繁项集{牛奶、面包},则候选规则有{牛奶}->{面包}和{面包}->{牛奶}。

7、通常用置信度来评估候选规则,置信度被定义为与每个发现规则相关联的确定性和可能性;

    confidence(x->y) = support(x^y) / support(x)

例如,如果{牛奶、面包}的支持度为0.15,且{牛奶}的支持度为0.15,则{牛奶}->{面包}的置信度为1,这意味着用户在购买牛奶的时候一定会购买面包;

8、置信度的取值范围为[0,1],越接近1说明两者之间越可能存在某种有趣的联系;一般会设定一个阀值,当超过这个阀值的时候,则可以认为可能存在一定的关联。

9、这里排除了无趣的规则,但有一个问题,不能完全说明{X} 就一定与{Y}关联,比如上例子中面包可能就是一个刚需品,购买量本来就很大,那这个规则就没多大意义了。

10、这里要增加两个度量方式:提升度和杠杆率,两个是类似的概念。提升度公式:

      Lift(x->y) = support(x^y) / support(x) * support(y)

如果x与y是相互统计独立,那提升度为1;相比之下,如果大于1,则说明这个规则是有用的,而且越大越好。

11、重温下统计独立概念,就是两个事件是完全不相关的,满足公式:

      P(AB)=P(A)P(B),A与B同时发生的概率为A发生的概率*B发生的概率

两个事件统计独立,则两个事件必定不相关;但两个事件不相关不一定统计独立。

12、杠杆率的计算公式:

      Leverage=support(x^y)  -  support(x) * support(y)

跟提升度类似,杠杆率大于0说明有一定关系,越大越好。

13、总结:通过支持度筛选出频繁项集,即可获得一些候补规则;通过置信度来筛选可能有趣的候选规则,为了排除巧合或其他因素,通常使用提升度和杠杆率来进行二次评估。

你可能感兴趣的:(关联规则Apriori算法)