关联规则挖掘-Apriori算法

关联规则的目的在于在一个数据集中找出项之间的关系,也称之为购物蓝分析 (market basket analysis)。例如,购买鞋的顾客,有10%的可能也会买袜子,60%的买面包的顾客,也会买牛奶。这其中最有名的例子就是"尿布和啤酒"的故事了。

关联规则的应用场合。在商业销售上,关联规则可用于交叉销售,以得到更大的收入;在保险业务方面,如果出现了不常见的索赔要求组合,则可能为欺诈,需要作进一步的调查。在医疗方面,可找出可能的治疗组合;在银行方面,对顾客进行分析,可以推荐感兴趣的服务等等。

Apriori algorithm是关联规则里一项基本算法。由Rakesh Agrawal 在 1994 年提出的,详细的介绍请猛击这里《Fast Algorithms for Mining Association Rules 》。

首先我们来看,什么是规则?规则形如"如果…那么…(If…Then…)",前者为条件,后者为结果。例如一个顾客,如果买了可乐,那么他也会购买果汁。

如何来度量一个规则是否够好?有两个量,置信度(Confidence)和支持度(Support)。假设有如下表的购买记录。

顾客 项目
1 orange juice, coke
2 milk, orange juice, window cleaner
3 orange juice, detergent
4 orange juice, detergent, coke
5 window cleaner

将上表整理一下,得到如下的一个2维表


Orange Win Cl Milk Coke Detergent
Orange 4 1 1 2 2
WinCl 1 2 1 0 0
Milk 1 1 1 0 0
Coke 2 0 0 2 1
Detergent 1 0 0 0 2

上表中横栏和纵栏的数字表示同时购买这两种商品的交易条数。如购买有Orange的交易数为4,而同时购买Orange和Coke的交易数为2。

置信度表示了这条规则有多大程度上值得可信。设条件的项的集合为A,结果的集合为B。置信度计算在A中,同时也含有B的概率。即 Confidence(A==>B)=P(B|A)。例 如计算"如果Orange则Coke"的置信度。由于在含有Orange的4条交易中,仅有2条交易含有Coke.其置信度为0.5。

支持度计算在所有的交易集中,既有A又有B的概率。例如在5条记录中,既有Orange又有Coke的记录有2条。则此条规则的支持度为 2/5=0.4。现在这条规则可表述为,如果一个顾客购买了Orange,则有50%的可能购买Coke。而这样的情况(即买了Orange会再买 Coke)会有40%的可能发生。

再来考虑下述情况。

支持度
A 0.45
B 0.42
C 0.4
A and B 0.25
A and C 0.2
B and C 0.15
A,B,and C 0.05

可得到下述规则

规则 置信度
If B and C then A0.05/0.15*100%=33.33%
If A and C then B0.05/0.20*100%=25%
If A and B then C0.05/0.25*100%=20%

上述的三条规则,哪一条规则有用呢?

对于规则" If B and C then A",同时购买B和C的人中,有33.33%会购买A。而单项A的支持度有0.45,也就是说在所有交易中,会有45%的人购买A.看来使用这条规则来进行推荐,还不如不推荐,随机对顾客进荐好了。

为此引入另外一个量,即提升度(Lift),以度量此规则是否可用。描述的是相对于不用规则,使用规则可以提高多少。有用的规则的提升度大 于1。计算方式为Lift(A==>B)=Confidence(A==>B)/Support(B)=Support(A==>B) /(Support(A)*Support(B))。在上例中,Lift(If B and C The A)=0.05/(0.15*0.45)=0.74。而Lift(If A then B)=0.25/(0.45*0.42)=1.32。也就是说对买了A的人进行推荐B,购买概率是随机推荐B的1.32倍。

如何产生规则呢。可以分两步走。

首先找出频繁集(frequent itemset)。所谓频繁集指满足最小支持度或置信度的集合。其次从频繁集中找出强规则(strong rules)。强规则指既满足最小支持度又满足最小置信度的规则。

我们来看如何产生频繁集。

这其中有一个定理。即频繁集的子集也一定是频繁集。比如,如果{A,B,C}是一个3项的频繁集,则其子集{A,B},{B,C},{A,C}也一定是2项的频繁集。为方便,可以把含有k项的集合称之为k-itemsets.

下面以迭代的方式 找出频繁集。首先找出1-itemsets的频繁集,然后使用这个1-itemsets,进行组合,找出2-itemsets的频繁集。如此下去,直到不 再满足最小支持度或置信度的条件为止。这其中重要的两步骤分别是连接(join)和剪枝(prune).即从(k-1)-itemsets中的项进行组 合,产生备选集(Candidate itemsets)。再从备选集中,将不符合最小支持度或置信度的项删去。例如

Frequent 2-itemsets
Candidate 3-itemsets
Frqquent 3-itemsets
I1,I2==>I1,I2,I4==>I1,I2,I4
I1,I4
I2,I3,I4

I2,I3



I2,I4



下面我们再来看一个详细的例子。

设最小支持度为2,以Ck 表示k-itemsets备选集,以Lk 表示k-itemsets频繁集。

ID Items
Itemset Sup. count
Itemset
Itemset
100I1,I2,I5
I16
I1
I1,I2
200I2,I4==>C1:I27==>L1:I2==>C2 I1,I3
300I2,I3
I36
I3
I1,I4
400I1,I2,I4
I42
I4
I1,I5
500I1,I3
I52
I5
I2,I3
600I2,I3





I2,I4
700I1,I3





I2,I5
800I1,I2,I3,I5





I3,I4
900I1,I2,I3





I3,I5








I4,I5

对C2 进行扫描,计算支持度。

Itemset Sup. count
Itemset
Itemset Sup. count
Itemset
I1,I24==> L2:I1,I2==> C3I1,I2,I32==> L3:I1,I2,I3
I1,I34
I1,I3
I1,I2,I52
I1,I2,I5
I1,I41
I1,I5




I1,I52
I2,I3




I2,I34
I2,I4




I2,I42
I2,I5




I2,I52






I3,I40






I3,I51






I4,I50






对 于频繁集中的每一项k-itemset,可以产生非空子集,对每一个子集,可以得到满足最小置信度的规则了。例如考虑{I1,I2,I5}。其子集有 {I1,I2}, {I1,I5}, {I2,I5}, {I1}, {I2}, {I5}。可以产生规则,{I1,I2} => {I5} (50%), {I1,I5} => {I2} (100%), {I2,I5} =>{I1} (100%),{I1} => {I2,I5} (33%), {I2} =>{I1,I5} (29%), {I5} =>{I1,I2} (100%)。

也 不是每个数据集都有产生强规则。例如"Thinkpad notebook" 和"Canon printer"一起可能很难产生有效规则。因为恰好一起买这两个牌子的产品的顾客太少。但不妨将Thinkpad notebook放到Notebook这一层次上考虑,而Canon printer放到printer这一去层次上考虑。这样的话,一起买notebook和printer的顾客就较多了。也即Multilevel association rules。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值