在一家超市里,有一个有趣的现象:尿布和啤酒赫然摆在一起出售。但是这个奇怪的举措却使尿布和啤酒的销量双双增加了。这不是一个笑话,而是发生在美国沃尔玛连锁店超市的真实案例,并一直为商家所津津乐道。这是数据挖掘算法关联规则在实际中的成功应用案例,那么关联规则算法的理论根基又是什么呢?
这就是关联规则的思想,即如果顾客购买一部分商品,那么他有多大可能购买其它商品?
什么是关联规则,能简单通俗解释一下吗?可以。
假设下面是商场5位顾客的购买交易记录:
交易记录 | 商品(代号) |
1 | 牛奶(A)、面包(B)、饼干(C)、橙汁(D) |
2 | 面包(B)、饼干(C)、汽水(E)、泡面(F) |
3 | 牛奶(A)、饼干(C)、水果(G) |
4 | 牛奶(A)、面包(B)、橙汁(D)、泡面(F)、水果(G) |
5 | 饼干(C)、汽水(E)、水果(G) |
示例数据
代号是从前往后取的,这只是一个标签几号,怎么贴标签都行!当然了,这些数据实际的数据库存储应该是每行一个用户对应一个商品的存储方式,这样有助于数据的存储与读取和后面的数据计算矩阵的生成。
当然了,计算机处理数据时,首先需要将这个不规则的表进行规则化——生成一个交易记录~商品代号的表格,才能进行进一步的计算!
构造过程是这样的:
1、获取所有商品;
2、取一个用户,如果该用户购买了商品,对应位置赋值1.否则0;
3、直到为所有用户构造了相应的商品购买向量,得到一个二维0~1二元数据表格(取值0/1),结束。
示例数据二元数据表:
交易记录 | 牛奶(A) | 面包(B) | 饼干(C) | 橙汁(D) | 汽水(E) | 泡面(F) | 水果(G) |
1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
2 | 0 | 1 | 1 | 0 | 1 | 1 | 0 |
3 | 1 | 0 | 1 | 0 | 0 | 0 | 1 |
4 | 1 | 1 | 0 | 1 | 0 | 1 | 1 |
5 | 0 | 0 | 1 | 0 | 1 | 0 | 1 |
第一个用户购买了A、B、C、D四种商品,故对应位置为1,其它位置为0,其它交易二元向量的生成方法类似,这些交易二元向量组成了一个二元数据表。
观察这个表,我们发现好像购买牛奶(A)与面包(B)同时出现概率较大,有两次,面包(B)与饼干(C)也出现了两次。而牛奶(A)与汽水(E)没有一次同时出现过,它们之间没有直接关联!
交易记录 | 牛奶(A) | 面包(B) | 饼干(C) | 橙汁(D) | 汽水(E) | 泡面(F) | 水果(G) |
1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
2 | 0 | 1 | 1 | 0 | 1 | 1 | 0 |
3 | 1 | 0 | 1 | 0 | 0 | 0 | 1 |
4 | 1 | 1 | 0 | 1 | 0 | 1 | 1 |
5 | 0 | 0 | 1 | 0 | 1 | 0 | 1 |
牛奶与面包
交易记录 | 牛奶(A) | 面包(B) | 饼干(C) | 橙汁(D) | 汽水(E) | 泡面(F) | 水果(G) |
1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
2 | 0 | 1 | 1 | 0 | 1 | 1 | 0 |
3 | 1 | 0 | 1 | 0 | 0 | 0 | 1 |
4 | 1 | 1 | 0 | 1 | 0 | 1 | 1 |
5 | 0 | 0 | 1 | 0 | 1 | 0 | 1 |
牛奶与汽水
聪明的我们是不是就有什么想法,牛奶与面包搭在一起卖是不是更好,好像它们搭在一起吃挺好,牛奶与汽水好像就属于两种差异很大的东西了,交易中没有同时被购买过。
那么,它们相互之间又有怎样的联系呢?这个关系又是怎样衡量的呢,就像学生在老师眼中的排名是用成绩衡量的一样吧。所以就有了关联规则的一套衡量指标、规则。
衡量规则
关联规则利用支持度、置信度和增益三个衡量指标来分别表示其显著性、正确性和价值。通过最小支持度和置信度作为对应门槛,然后才能进行下一步的增益价值的评估。
什么意思呢?不懂。
试想一下,评价年级三好学生,每个班级的倒数第一也能参加评比吗,原则上是可以的,但是————有希望吗!一般会从每个班评选几个最优秀的————门槛。这就相当于最下支持度和置信度的作用。再比如说,一个组织只需要几个人参加比赛,首先需要筛选出几个最优希望、优秀的成员(这就是门槛)参加,然后进行最终的比赛,有句话说得好,参加比赛你有你的权利,人人都能参加,参不参加是一回事,获不获奖就是一回事了。
扯远了,言归正传。下面给出官方对于那三个概念的定义。
假设我们要衡量购买(X)也会购买(Y),X==>Y的概率,那么需要通过定义计算相应的几个衡量指标。
支持度:支持度衡量前提项目(X)与结果项目(Y)一起出现的概率,支持度会把一些显著性小的去掉,相当于经过一个筛选,把精华留下来,对于用户~商品二元表格就表示,商品同时出现概率。这个概率太小就没有意义了。比如,有1000条购买记录,I商品与J商品同时出现过一次,这就没有必要考虑I与Y的置信度和增益价值了。有两个菇凉,一个约十次出来了9次,一个约十次出来了一次,该考虑哪个,相信你智商没有问题,就是这个意思。
比如,这里牛奶(A)与面包同时出现了两次,一共有5次购买行为,那么顾客同时购买牛奶(A)与面包(B)的概率就是
如果,我们规定这个支持度概率必须达到0.5,那么牛奶与面包直接关联性就被枪毙了!
置信度:置信度衡量衡量前提项目(X)出现的形况下,结果项目(Y)才有就会出现的条件概率。比如,你不约女神出来,她怎么知道呢,何谈约10次能成功几次呢,只有约了,才会有可能产生赴约次数这个量!
这里,五次交易记录中牛奶(A )出现了3次,其中这3次中,面包出现了2次,
交易记录 | 牛奶(A) | 面包(B) | 饼干(C) | 橙汁(D) | 汽水(E) | 泡面(F) | 水果(G) |
1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
3 | 1 | 0 | 1 | 0 | 0 | 0 | 1 |
4 | 1 | 1 | 0 | 1 | 0 | 1 | 1 |
那么,购买牛奶(A)的条件下购买面包(B)的概率(置信度)为:
实际上就是牛奶与面包同时出现概率(2/5)再除以牛奶出现概率(3/5)这一个条件概率。
增益:增益衡量用于比较置信度与结果项目Y单独发生时两者大小,怎么比较大小,有一种方法是两者相除。如果大于一,表明前者较大,即X发生条件下Y发送概率变大。
那么,这里购买牛奶(A)的情况下购买面包(B)的概率2/3,与单独购买面包的概率(3/5)比值为
显然牛奶==>面包就是一个有效的信息,因为牛奶出现的条件下,面包出现的概率比面包单独出现的概率大。
Apriori算法
为了便于理解,没有写的那么严格数学化。类似A===>B的关联规则,A为条件项目,B为结果项目,那么:
1、计算出单一项目集,即每种条件项目的在5条记录中出现的概率,比如如果这里最小支持度记为0.5,那么,单一项目集{A,B,C,D,E,F,G},删除小于最小支持度后就是{A,B,C,G},其它出现次数小于3次。
2、同理,计算2,3,4,...项目集,比如2-项目集就是形如(X,Y)===>C的形式,然后与最小支持度比较删除小于最小支持度的;
3、经过前两步后,留下了大于最小支持度0.5的项目集,下面就计算对应置信度,还是根据前面介绍的X==>Y的计算形式,就是X(可能是多个条件,比如(X1,X2,...)===>>Y的形式)发生条件下Y发生概率与Y单独发生的概率的比值是否大于一。
4、挑选出增益值大于1的关联规则,即可。
这就是关联规则的基本原理,就到这里文章太长可能看着都累,后面将会介绍关联规则的一些特点、实际数据处理方法的一些具体应用。选择用R来做,为什么,R语言有一些现成的包,其实明白原理后自己用Python写一个也未尝不可以,但是数据量不是特别大的情况下用R来做或许方便些。
然后,(计算机操作)如果想要学习R语言基础与高级编程,点击【阅读原文】领取【全额优惠券】后,直接购买可以全额抵消,免费获得,机会不再来。