失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【机器学习】数据挖掘算法——关联规则(一) 相关概念 评价指标

【机器学习】数据挖掘算法——关联规则(一) 相关概念 评价指标

时间:2023-01-23 14:39:50

相关推荐

【机器学习】数据挖掘算法——关联规则(一) 相关概念 评价指标

综述:

数据挖掘是指以某种方式分析数据源,从中发现一些潜在的有用的信息,所以数据挖掘又称作知识发现,而关联规则挖掘则是数据挖掘中的一个很重要的课题,顾名思义,它是从数据背后发现事物之间可能存在的关联或者联系。

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

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

一个简单例子

先看一个简单的例子,假如有下面数据集,每一组数据ti表示不同的顾客一次在商场购买的商品的集合:

t1: 牛肉、鸡肉、牛奶t2: 牛肉、奶酪t3: 奶酪、靴子t4: 牛肉、鸡肉、奶酪t5: 牛肉、鸡肉、衣服、奶酪、牛奶t6: 鸡肉、衣服、牛奶t7: 鸡肉、牛奶、衣服

假如有一条规则:牛肉—>鸡肉,那么同时购买牛肉和鸡肉的顾客比例是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。

在数据挖掘中,例如上述例子中的所有商品集合I=I=I={\{{牛肉,鸡肉,牛奶,奶酪,靴子,衣服}\}}称作项目集合,每位顾客一次购买的商品集合tit_iti​称为一个事务,所有的事务T={t1,t2,⋯t7}T=\{t_1,t_2,\cdots t_7\}T={t1​,t2​,⋯t7​}称作事务集合,并且满足tit_iti​是III的真子集。一条关联规则是形如下面的蕴含式:

X→YX\to YX→Y,X,YX,YX,Y满足:X,Y:X,Y:X,Y是III的真子集,并且XXX和YYY的交集为空集。

其中XXX称为前件,YYY称为后件

对于规则X→YX\to YX→Y,根据上面的例子可以知道它的支持度:support=(X,Y).count/T.countsupport=(X,Y).count/T.countsupport=(X,Y).count/T.count置信度:confidence=(X,Y).count/X.countconfidence=(X,Y).count/X.countconfidence=(X,Y).count/X.count其中(X,Y).count(X,Y).count(X,Y).count表示TTT中同时包含XXX和YYY的事务的个数,X.countX.countX.count表示TTT中包含XXX的事务的个数。

关联规则挖掘则是从事务集合中挖掘出满足支持度和置信度最低阈值要求的所有关联规则,这样的关联规则也称强关联规则。

对于支持度和置信度,我们需要正确地去看待这两个衡量指标。一条规则的支持度表示这条规则的可能性大小,如果一个规则的支持度很小,则表明它在事务集合中覆盖范围很小,很有可能是偶然发生的;如果置信度很低,则表明很难根据X推出Y。

根据条件概率公式P(Y∣X)=P(X,Y)/P(X),即P(X,Y)=P(Y∣X)∗P(X)P(Y|X)=P(X,Y)/P(X),即P(X,Y)=P(Y|X)*P(X)P(Y∣X)=P(X,Y)/P(X),即P(X,Y)=P(Y∣X)∗P(X)

P(Y∣X)P(Y|X)P(Y∣X)代表着置信度,P(X,Y)P(X,Y)P(X,Y)代表着支持度,所以对于任何一条关联规则置信度总是大于等于支持度的。并且当支持度很高时,此时的置信度肯定很高,它所表达的意义就不是那么有用了。

这里要注意的是支持度和置信度只是两个参考值而已,并不是绝对的,也就是说假如一条关联规则的支持度和置信度很高时,不代表这个规则之间就一定存在某种关联。举个最简单的例子,假如XXX和YYY是最近的两个比较热门的商品,大家去商场都要买,比如某款手机和某款衣服,都是最新款的,深受大家的喜爱,那么这条关联规则的支持度和置信度都很高,但是它们之间没有必然的联系。然而当置信度很高时,支持度仍然具有参考价值,因为当P(Y∣X)P(Y|X)P(Y∣X)很高时,可能P(X)P(X)P(X)很低,此时P(X,Y)P(X,Y)P(X,Y)也许会很低。

为了解决这样的问题,在下文中也提出了其他的评价指标。

参考文章:/dolphin0520/archive//10/29/2733356.html

相关概念综述:

这里借用一个引例来介绍关联规则挖掘。

定义一:设I={i1,i2,…,im},是m个不同的项目的集合,每个ik称为一个项目。项目的集合I称为项集。其元素的个数称为项集的长度,长度为k的项集称为k-项集。引例中每个商品就是一个项目,项集为I={bread, beer, cake,cream, milk, tea},I的长度为6。

定义二:每笔交易T是项集I的一个子集。对应每一个交易有一个唯一标识交易号,记作TID。交易全体构成了交易数据库D,|D|等于D中交易的个数。引例中包含10笔交易,因此|D|=10。

定义三:对于项集X,必有X⊆T。记 X.countX.countX.count 为交易集D中包含X的交易的数量,则项集X的支持度为:

support(X)=X.count∣D∣support(X)=\frac{X.{count}}{|D|}support(X)=∣D∣X.count​

引例中X={bread, milk}出现在T1,T2,T5,T9和T10中,所以支持度为0.5。

定义四:最小支持度是项集的最小支持阀值,记为SUPmin,代表了用户关心的关联规则的最低重要性。支持度不小于SUPmin 的项集称为频繁集,长度为k的频繁集称为k-频繁集。如果设定SUPmin为0.3,引例中{bread, milk}的支持度是0.5,所以是2-频繁集。

定义五:关联规则是一个蕴含式:

R:X⇒YR: X \Rightarrow YR:X⇒Y

其中X⊂I,Y⊂I,并且X∩Y=∅。表示项集X在某一交易中出现,则导致Y以某一概率也会出现。用户关心的关联规则,可以用两个标准来衡量:支持度和可信度。

定义六:关联规则R的支持度是交易集同时包含X和Y的交易数与|D|之比。即:

support(X⇒Y)=(X∩Y).count∣D∣support(X\Rightarrow Y)=\frac{(X\cap Y).count}{|D|}support(X⇒Y)=∣D∣(X∩Y).count​

支持度反映了X、Y同时出现的概率。关联规则的支持度等于频繁集的支持度。

定义七:对于关联规则R,可信度是指包含X和Y的交易数与包含X的交易数之比。即:

confidence(X⇒Y)=support(X⇒Y)support(X)confidence(X\Rightarrow Y)=\frac{support(X\Rightarrow Y)}{support(X)}confidence(X⇒Y)=support(X)support(X⇒Y)​

可信度反映了如果交易中包含X,则交易包含Y的概率。一般来说,只有支持度和可信度较高的关联规则才是用户感兴趣的。

定义八:设定关联规则的最小支持度和最小可信度为SUPminSUP_{min}SUPmin​和CONFminCONF_{min}CONFmin​。规则R的支持度和可信度均不小于SUPminSUP_{min}SUPmin​和CONFminCONF_{min}CONFmin​,则称为强关联规则。关联规则挖掘的目的就是找出强关联规则,从而指导商家的决策。

这八个定义包含了关联规则相关的几个重要基本概念,关联规则挖掘主要有两个问题:

找出交易数据库中所有大于或等于用户指定的最小支持度的频繁项集。利用频繁项集生成所需要的关联规则,根据用户设定的最小可信度筛选出强关联规则。

参考文章:/OpenNaive/article/details/7047823

幸存者偏差

二战期间,盟军需要对战斗机进行装甲加厚,以提高生还率,但由于军费有限,只能进行局部升级。那么问题来了,究竟哪个部位最关键,最值得把装甲加厚来抵御敌方炮火呢?人们众口不一,最后一致决定采用统计调查的方式来解决,即:仔细检查每一驾战斗机返回时受到的损伤程度,计算出飞机整体的受弹状况,然后根据大数据分析决定。

不久,统计数据很快出炉:盟军飞机普遍受弹最严重的地方是机翼,有的几乎被打成了筛子;相反,受弹最轻的地方是驾驶舱及尾部发动机,许多飞机的驾驶舱甚至连擦伤都没有。

正当所有人拿着这份确凿无疑的报告准备给机翼加厚装甲时,统计学家Abraham Wald阻拦了他们,同时提出了一个完全相反的方案:加厚驾驶舱与尾部。理由非常简单:这两个位置中弹的飞机,都没有回来。换言之,它们是一份沉默的数据——“死人不会说话”。

最后,盟军高层纷纷听取了这个建议,加固了驾驶舱与尾部,果然空中战场局势得以好转,驾驶员生还率也大大提高。事实证明,这是一个无比英明的措施。

这个事例也被称作“幸存者偏差”(Survivorship bias)。它是一种典型的由于模型不当,导致的“数据说谎”。

注:Abraham

Wald,1902~1950,生于奥匈帝国,维也纳大学博士。1938年为躲避纳粹,移民美国,哥伦比亚大学教授。Herman

Chernoff的导师。其子Robert M. Wald,为著名理论物理学家,芝加哥大学教授,黑洞理论的提出者之一。

关联规则评价

“数据说谎”的问题很普遍。再看这样一个例子,我们分析一个购物篮数据中购买游戏光碟和购买影片光碟之间的关联关系。交易数据集共有10,000条记录,如表1所示:

假设我们设置得最小支持度为30%,最小自信度为60%。从上面的表中,可以得到:

support(买游戏光碟→买影片光碟)=4000/10000=40%support(买游戏光碟\to 买影片光碟)=4000/10000=40\%support(买游戏光碟→买影片光碟)=4000/10000=40%

confidence(买游戏光碟→买影片光碟)=4000/6000=66%confidence(买游戏光碟\to 买影片光碟)=4000/6000=66\%confidence(买游戏光碟→买影片光碟)=4000/6000=66%

这条规则的支持度和自信度都满足要求,因此我们很兴奋,我们找到了一条强规则,于是我们建议超市把影片光碟和游戏光碟放在一起,可以提高销量。

可是我们想想,一个喜欢的玩游戏的人会有时间看影片么,这个规则是不是有问题,事实上这条规则误导了我们。在整个数据集中买影片光碟的概率p(买影片)=7500/10000=75%,而买游戏的人也买影片的概率只有66%,66%<75%恰恰说明了买游戏光碟抑制了影片光碟的购买,也就是说买了游戏光碟的人更倾向于不买影片光碟,这才是符合现实的。

从上面的例子我们看到,支持度和自信度并不总能成功滤掉那些我们不感兴趣的规则,因此我们需要一些新的评价标准,下面介绍几种评价标准:

相关性系数

相关性系数的英文名是Lift,这就是一个单词,而不是缩写。

通俗解释:提升度反映了“物品集XXX的出现”对物品集YYY的出现概率发生了多大的变化。

lift(X⇒Y)=supp(X∪Y)supp(X)×supp(Y)\mathrm{lift}(X\Rightarrow Y) = \frac{ \mathrm{supp}(X \cup Y)}{ \mathrm{supp}(X) \times \mathrm{supp}(Y) }lift(X⇒Y)=supp(X)×supp(Y)supp(X∪Y)​

lift(X⇒Y){&gt;1,正相关=1,独立&lt;1,负相关\mathrm{lift}(X\Rightarrow Y)\begin{cases}&gt;1, &amp; 正相关 \\ =1, &amp; 独立 \\ &lt;1, &amp; 负相关 \\ \end{cases} lift(X⇒Y)⎩⎪⎨⎪⎧​>1,=1,<1,​正相关独立负相关​

实际运用中,正相关和负相关都是我们需要关注的,而独立往往是我们不需要的。显然:

lift(X⇒Y)=lift(Y⇒X)\mathrm{lift}(X\Rightarrow Y)=\mathrm{lift}(Y\Rightarrow X) lift(X⇒Y)=lift(Y⇒X)

确信度

Conviction的定义如下:

conv(X⇒Y)=1−supp(Y)1−conf(X⇒Y)\mathrm{conv}(X\Rightarrow Y) =\frac{ 1 - \mathrm{supp}(Y) }{ 1 - \mathrm{conf}(X\Rightarrow Y)}conv(X⇒Y)=1−conf(X⇒Y)1−supp(Y)​

它的值越大,表明X、Y的独立性越小。

卡方系数

卡方系数是与卡方分布有关的一个指标。参见:

/wiki/Chi-squared_distribution

χ2=∑i=1n(Oi−Ei)2Ei\chi^2 = \sum_{i=1}^n \frac{(O_i - E_i)^2}{E_i}χ2=i=1∑n​Ei​(Oi​−Ei​)2​

注:上式最早是Pearson给出的。

公式中的QiQ_iQi​表示数据的实际值,EiE_iEi​表示期望值,不理解没关系,我们看一个例子就明白了。

表2的括号中表示的是期望值。以第1行第1列的4500为例,其计算方法为:750010000×600010000×10000\frac{7500}{10000} \times \frac{6000}{10000} \times 10000100007500​×100006000​×10000。

经计算可得表2的卡方系数为555.6。基于置信水平和自由度

(r−1)∗(c−1)=(行数−1)∗(列数−1)=1(r-1)*(c-1)=(行数-1)*(列数-1)=1(r−1)∗(c−1)=(行数−1)∗(列数−1)=1,查表得到自信度为(1-0.001)的值为6.63。

555.6>6.63,因此拒绝A、B独立的假设,即认为A、B是相关的,而

E(买影片,买游戏)=4500&gt;4000E(买影片,买游戏)=4500&gt;4000E(买影片,买游戏)=4500>4000

因此认为A、B呈负相关。

全自信度

all_confidence(A,B)=P(A∩B)max{P(A),P(B)}=min{P(B∣A),P(A∣B)}=min{confidence(A→B),confidence(B→A)}all\_confidence(A,B)=\frac{P(A\cap B)}{max\{P(A),P(B)\}}\\=min\{P(B|A),P(A|B)\}=min\{confidence(A\to B),confidence(B\to A)\} all_confidence(A,B)=max{P(A),P(B)}P(A∩B)​=min{P(B∣A),P(A∣B)}=min{confidence(A→B),confidence(B→A)}

对于前面的例子,

all_confidence(买游戏,买影片)=min{confidence(买游戏—&gt;买影片),confidence(买影片—&gt;买游戏)}=min{66%,53.3%}=53.3%all\_confidence(买游戏,买影片)=min\{confidence(买游戏—&gt;买影片),confidence(买影片—&gt;买游戏)\}=min\{66\%,53.3\%\}=53.3\% all_confidence(买游戏,买影片)=min{confidence(买游戏—>买影片),confidence(买影片—>买游戏)}=min{66%,53.3%}=53.3%

可以看出全自信度不失为一个好的衡量标准。

最大自信度

最大自信度则与全自信度相反。

max_confidence(A,B)=max{confidence(A→B),confidence(B→A)}max\_confidence(A,B)=max\{confidence(A\to B),confidence(B\to A)\}max_confidence(A,B)=max{confidence(A→B),confidence(B→A)}

Kulc

Kulc系数就是对两个自信度做一个平均处理:

kulc(A,B)=confidence(A→B)+confidence(B→A)2kulc(A,B)=\frac{confidence(A\to B)+confidence(B\to A)}{2}kulc(A,B)=2confidence(A→B)+confidence(B→A)​

kulc系数是一个很好的度量标准,稍后的对比我们会看到。

cosine距离

cosine(A,B)=P(A∩B)sqrt(P(A)∗P(B))=sqrt(P(A∣B)∗P(B∣A))=sqrt(confidence(A→B)∗confidence(B→A))cosine(A,B)=\frac{P(A\cap B)}{sqrt(P(A)*P(B))}=sqrt(P(A|B)*P(B|A))\\=sqrt(confidence(A\to B)*confidence(B\to A))cosine(A,B)=sqrt(P(A)∗P(B))P(A∩B)​=sqrt(P(A∣B)∗P(B∣A))=sqrt(confidence(A→B)∗confidence(B→A))

Leverage

Leverage(A,B)=P(A∩B)−P(A)P(B)Leverage(A,B) = P(A\cap B)-P(A)P(B)Leverage(A,B)=P(A∩B)−P(A)P(B)

不平衡因子

imbalance ratio的定义:

IR(A,B)=∣support(A)−support(B)∣(support(A)+support(B)−support(A∩B))IR(A,B)=\frac{|support(A)-support(B)|}{(support(A)+support(B)-support(A\cap B))} IR(A,B)=(support(A)+support(B)−support(A∩B))∣support(A)−support(B)∣​

评价指标间的比较

这里有这么多的评价标准,究竟哪些好,哪些能够准确反应事实,我们来看一组对比。

上表中,M表示购买了牛奶、C表示购买了咖啡,M表示不购买牛奶,C表示不购买咖啡,下面来看6个不同的数据集,各个度量标准的值

我们先来看前面四个数据集D1-D4,从后面四列可以看出,D1,D2中milk与coffee是正相关的,而D3是负相关,D4中是不相关的,大家可能觉得,D2的lift约等于1应该是不相关的,事实上对比D1你会发现,lift受MC的影响很大,而实际上我们买牛奶和咖啡的相关性不应该取决于不买牛奶和不买咖啡的交易记录,这正是lift和卡方的劣势,容易受到数据记录大小的影响。而全自信度、最大自信度、Kulc、cosine与MC无关,它们不受数据记录大小影响。卡方和lift还把D3判别为正相关,而实际上他们应该是负相关,M=100+1000=1100,如果这1100中有超过550的购买coffee那么就认为是正相关,而我们看到MC=100<550,可以认为是负相关的。

上面我们分析了全自信度、最大自信度、Kulc、cosine与空值无关,但这几个中哪一个更好呢?我们看后面四个数据集D4-D6,all_conf与cosine得出相同的结果,即D4中milk与coffee是独立的,D5、D6是负相关的,D5中support(C→M)=0.91support(C\to M)=0.91support(C→M)=0.91而support(M→C)=0.09support(M\to C)=0.09support(M→C)=0.09,这样的关系,简单的认为是负相关或者正相关都不妥,Kulc做平均处理倒很好,平滑后认为它们是无关的,我们再引入一个不平衡因子IR(imbalance ratio):

IR(A,B)=∣support(A)−support(B)∣(support(A)+support(B)−support(A∩B))IR(A,B)=\frac{|support(A)-support(B)|}{(support(A)+support(B)-support(A\cap B))} IR(A,B)=(support(A)+support(B)−support(A∩B))∣support(A)−support(B)∣​

D4总IR(C,M)=0,非常平衡,D5中IR(C,M)=0.89,不平衡,而D6中IR(C,M)=0.99极度不平衡,我们应该看到Kulc值虽然相同但是平衡度不一样,在实际中应该意识到不平衡的可能,根据业务作出判断,因此这里我们认为Kulc结合不平衡因子的是较好的评价方法。

另外weka中还使用 Conviction和Leverage。Leverage是不受空值影响,而Conviction是受空值影响的。

总结

本文介绍了9个关联规则评价的准则,其中全自信度、最大自信度、Kulc、cosine,Leverage是不受空值影响的,这在处理大数据集是优势更加明显,因为大数据中想MC这样的空记录更多,根据分析我们推荐使用kulc准则和不平衡因子结合的方法。

参考文章:/fengfenggirl/p/associate_measure.html

如果觉得《【机器学习】数据挖掘算法——关联规则(一) 相关概念 评价指标》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。