RSS

数据挖掘-关联规则-概念

一、举个栗子

    马克思主义哲学告诉我们,万事万物都是有联系的。对于这条哲学理论我无法证实,也无法证伪。 还好数据挖掘的工作往往不需要找出万事万物之间的联系, 只需要常常找出一部分特定数据之间的联系,关联规则挖掘正是一种找出特定数据之间关联关系的一种 数据挖掘方式。
只要提到关联规则挖掘,最经典的栗子当然是“啤酒与尿布”。

《啤酒和尿布》的故事是营销届的神话,“啤酒”和“尿布”两个看上去没有关系的商品摆放在一起进行销售并获得了很好的销售收益,这种现象就是卖场中商品之间的关联性,研究“啤酒与尿布”关联的方法就是购物篮分析,购物篮分析是沃尔玛秘而不宣的独门武器,购物篮分析可以帮助我们在门店的销售过程中找到具有关联关系的商品,并以此获得销售收益的增长! –摘自豆瓣

然而我不再想用这个老掉牙的栗子,我的栗子更有趣,假设有以下观察到的数据:

周几下午2点 一起在操场玩耍
周一 {小刚,小红}
周二 {小红,小明,小杨,小刘}
周三 {小刚,小明,小杨,小李}
周四 {小红,小刚,小明,小杨}
周五 {小红,小刚,小明,小李}


通过观察以上数据,我们至少可以看到以下几个现象:

  1. 小刚同学有4天的下午2点都在操场玩耍,分别是周一、周三、周四、周五。
  2. 小红同学有4天的下午2点都在操场玩耍,分别是周一、周二、周四、周五。
  3. 小明同学有4天的下午2点都在操场玩耍,分别是周二、周三、周四、周五。
  4. 小杨同学有3天的下午2点都在操场玩耍,分别是周二、周三、周四。


通过以上现象我们可以不难得出以下结论:

  1. 小明和小红有3天在一起玩耍。
  2. 小明和小刚也有3天在一起玩耍。
  3. 同样,小明和小杨也有3天在一起玩耍。


我们假设在一起玩耍的次数多少能代表两个人的亲密度,我们是不是可以认为小明和小刚、小红、小杨 的亲密度是一样的。但是感觉和小杨的忠诚度要高一些,因为小杨仅有的3天都是和小明在一起玩耍的, 并没有和其他人一起玩耍过。

那么我们怎么量化我们这种直觉?

二、关联规则的概念

在一些书本上,已经用特别专业的数学语言定义了关联规则的概念,如果想看专业的定义可以参考相关的数据挖掘 的书籍,应该都有。这里不再重复,我们只讨论比较容易理解的概念。

项: 以上栗子中,每一个人就是一个项。
项集: 项的集合,例如 I = {小刚}是一个项集,I = {小杨,小刘,小李}也是一个项集。
关联规则 X -> Y: 其中 X和Y 都是项集,且X和Y不想交,即没有相同项。并且称X为前件,Y为后件。
事务:栗子中,一条记录就是一个事务。可见一个事务也是一个项集。
事务集合 T:所有事务的集合。

所以,根据以上栗子,
小红 -> 小明,表示一条关联规则。
意思是:在小红玩耍的时候小明也在玩耍,即小红和小明在同一天的下午2点都在操场玩耍;
小红,小刚 -> 小明,也表示一条关联规则。
意思是:在小红和小刚都玩耍的时候小明也在玩耍,即小红、小刚和小明在同一天的下午2点都在操场玩耍。

三、支持度

假设有一条规则:小红->小明, 则这条规则的支持度表示:
小红和小明同时在一起玩耍的次数占总的统计事务的比率。
支持度:(X∪Y)∙count/n,其中n是T中事务总数。

以上,我们知道, 小明和小红有3天在一起玩耍。而总共我们统计了5天,所以该规则的支持度就是(3/5)。同样的道理,我们知道规则 小杨->小明 的支持度也是(3/5)。

所以,规则的支持度是指 规则的前件和后件组成的项集在整个事务集合中被包含的频繁程度。
如果一个规则的支持度是100%,则表示每一个事务都包含了该规则,我们可以认为该规则是必然事件。
如果一个规则的支持度是0%,则表示该规则没有出现在任何事务中,我们可以认为该规则是不可能事件。
如果一个规则的支持度过于小,我们可以认为该规则是偶然事件,不具有数据分析价值。

四、置信度

假设有一条规则:小红->小明, 则这条规则的置信度表示:
小红和小明同时在一起玩耍的次数占小红玩耍次数的比率。
置信度 = (X∪Y)∙count/X.count。

以上,我们知道, 小明和小红有3天在一起玩耍。而小红总共玩耍了4天,所以该规则的置信度就是(3/4)。同样的道理,我们知道规则 小杨->小明 的置信度是(3/3)。

所以,规则的置信度是指,规则的前件和后件组成的项集在整个事务集合中被包含的次数与前件在整个事务集合中被包含的次数的比值。
如果一个规则的置信度是100%,表示 X 发生了,Y 一定发生;反之则不一定,所以 X->Y 的置信度不一定等于 Y->X 的置信度。
如果一个规则的置信度是0%,表示 X 发生了,Y 一定不会发生。反之亦然。
如果一个规则的置信度过于小,那么表示 X 很难可靠的推断出 Y。

五、关于支持度和置信度关系的一些显著结论

  1. 支持度和置信度的分子都是 X和Y同时发生的次数。分母不同,支持度是总的事务数,置信度是X发生的次数。
  2. 设总的事务数一定,支持度越高,表示 X和Y同时发生的次数越多。同样置信度也会越高。支持度的分子加1,相当于置信度的分子分母同时加1,所以置信度会随着支持度的变大而变大。所以刷存在感也是能刷出信任度的。
  3. 显然,两个规则的支持度相等,置信度不一定相等。
    栗子中,虽然小红、小杨分别和小明在一起玩耍的次数一样,但是小红除了和小明一起玩耍外还在小明不在的时候和其他人在一起玩耍了,比如周一单独和小刚私会(使X+1)。而小杨除了和小明玩耍外不再和其他人玩耍(X+0)。 所以,小杨对小明更加专一,更加忠诚(置信度更高)。
  4. 显然,如果规则 X->Y 和 Y->X 的支持度是一样的,但是置信度不一定相同。比如 小杨->小明 和 小明->小杨,支持度都是(3/5) 60%。但是前者的置信度是100%,而后者的置信度只有(3/4) 75%,因为小明在小杨不在的时候在周五和小红小刚等人又单独玩耍了。

PS:小明和小杨。。。

关联规则挖掘的目标: 找出事务集合T中所有支持度和置信度分别高于最小支持度和最小置信度的关联规则,其中最小支持度和最小置信度是用户指定的,通常会视挖掘任务的特性和具体的情况而定。

以上啰嗦一堆,总结起来5句话

  1. 设 I={i1,i2,i3…}是一个项目的集合。
  2. 设 T={t1,t2,t3…}是一个事务的集合,其中每个事务ti都是一个项目集合,且ti⊆I。
  3. 那么关联规则是这样的蕴含关系: X->Y,其中X⊂I,Y⊂I且X∩Y = ∅。 称X为前件,Y为后件。
  4. 规则的支持度 = (X∪Y)∙count/n,其中n是T中事务总数。
  5. 规则的置信度 = (X∪Y)∙count/X.count。

可见数学语言的魅力。