参考:
https://www.cnblogs.com/hdu-cpd/p/5987904.html
https://www.jianshu.com/p/dc053deb94f2
什么是关联规则:
所谓数据挖掘就是以某种方式分析源数据,从中发现一些潜在的有用的信息,即数据挖掘又可以称作知识发现。
顾名思义,关联规则就是发现数据背后存在的某种规则或者联系。
举个简单的例子:通过调研超市顾客购买的东西,可以发现30%的顾客会同时购买床单和枕套,而在购买床单的顾客中有80%的人购买了枕套,这就存在一种隐含的关系:床单→枕套,也就是说购买床单的顾客会有很大可能购买枕套。
概念:
项目:交易数据库中的一个字段,对超市的交易来说一般是指一次交易中的一个物品,如:牛奶
事务:某个客户在一次交易中,发生的所有项目的集合:如{牛奶,面包,啤酒}
项集:包含若干个项目的集合(一次事务中的),一般会大于0个
支持度:项集{X,Y}在总项集中出现的概率。
频繁项集:某个项集的支持度大于设定阈值(人为设定或者根据数据分布和经验来设定),即称这个项集为频繁项集。
置信度:在先决条件X发生的条件下,由关联规则{X->Y }推出Y的概率。
提升度:表示含有X的条件下同时含有Y的概率,与无论含不含X含有Y的概率之比。
支持度和提升度示例:
假如有一条规则:牛肉—>鸡肉,那么同时购买牛肉和鸡肉的顾客比例是3/7,而购买牛肉的顾客当中也购买了鸡肉的顾客比例是3/4。这两个比例参数是很重要的衡量指标,它们在关联规则中称作支持度(support)和置信度(confidence)。
对于规则:牛肉—>鸡肉,
它的支持度为3/7,表示在所有顾客当中有3/7同时购买牛肉和鸡肉,其反应了同时购买牛肉和鸡肉的顾客在所有顾客当中的覆盖范围;
它的置信度为3/4,表示在买了牛肉的顾客当中有3/4的人买了鸡肉,其反应了可预测的程度,即顾客买了牛肉的话有多大可能性买鸡肉。
上面这副图:
S表示所有的顾客,而A表示买了牛肉的顾客,B表示买了鸡肉的顾客,C表示既买了牛肉又买了鸡肉的顾客。那么C.count/S.count=3/7,C.count/A.count=3/4。
提升度示例:
10000个超市订单(10000个事务),其中购买三元牛奶(A事务)的6000个,购买伊利牛奶(B事务)的7500个,4000个同时包含两者。
那么通过上面支持度的计算方法我们可以计算出:
三元牛奶(A事务)和伊利牛奶(B事务)的支持度为:P(A&B)=4000/10000=0.4.
三元牛奶(A事务)对伊利牛奶(B事务)的置信度为:包含A的事务中同时包含B的占包含A的事务比例。4000/6000=0.67,说明在购买三元牛奶后,有0.67的用户去购买伊利牛奶。
伊利牛奶(B事务)对三元牛奶(A事务)的置信度为:包含B的事务中同时包含A的占包含B的事务比例。4000/7500=0.53,说明在购买三元牛奶后,有0.53的用户去购买伊利牛奶。
上面我们可以看到A事务对B事务的置信度为0.67,看似相当高,但是其实这是一个误导,为什么这么说?
因为在没有任何条件下,B事务的出现的比例是0.75,而出现A事务,且同时出现B事务的比例是0.67,也就是说设置了A事务出现这个条件,B事务出现的比例反而降低了。这说明A事务和B事务是排斥的。
我们把0.67/0.75的比值作为提升度,即P(B|A)/P(B),称之为A条件对B事务的提升度,即有A作为前提,对B出现的概率有什么样的影响,如果提升度=1说明A和B没有任何关联,如果<1,说明A事务和B事务是排斥的,>1,我们认为A和B是有关联的
计算频繁项集:
根据频繁项集的自己也必须频繁,可以从1-项集开始进行筛选。