【机器学习】数据挖掘算法——关联规则(一),相关概念,评价指标
綜述:
數據挖掘是指以某種方式分析數據源,從中發現一些潛在的有用的信息,所以數據挖掘又稱作知識發現,而關聯規則挖掘則是數據挖掘中的一個很重要的課題,顧名思義,它是從數據背后發現事物之間可能存在的關聯或者聯系。
關聯規則的目的在于在一個數據集中找出項之間的關系,也稱之為購物藍分析 (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)也許會很低。
為了解決這樣的問題,在下文中也提出了其他的評價指標。
參考文章:http://www.cnblogs.com/dolphin0520/archive/2012/10/29/2733356.html
相關概念綜述:
這里借用一個引例來介紹關聯規則挖掘。
| T1 | bread, cream, milk, tea | T6 | bread, tea |
| T2 | bread, cream, milk | T7 | beer, milk, tea |
| T3 | cake, milk | T8 | bread, tea |
| T4 | milk, tea | T9 | bread, cream, milk, tea |
| T5 | bread, cake, milk | T10 | bread, milk, tea |
定義一:設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?,則稱為強關聯規則。關聯規則挖掘的目的就是找出強關聯規則,從而指導商家的決策。
這八個定義包含了關聯規則相關的幾個重要基本概念,關聯規則挖掘主要有兩個問題:
參考文章:https://blog.csdn.net/OpenNaive/article/details/7047823
幸存者偏差
二戰期間,盟軍需要對戰斗機進行裝甲加厚,以提高生還率,但由于軍費有限,只能進行局部升級。那么問題來了,究竟哪個部位最關鍵,最值得把裝甲加厚來抵御敵方炮火呢?人們眾口不一,最后一致決定采用統計調查的方式來解決,即:仔細檢查每一駕戰斗機返回時受到的損傷程度,計算出飛機整體的受彈狀況,然后根據大數據分析決定。
不久,統計數據很快出爐:盟軍飛機普遍受彈最嚴重的地方是機翼,有的幾乎被打成了篩子;相反,受彈最輕的地方是駕駛艙及尾部發動機,許多飛機的駕駛艙甚至連擦傷都沒有。
正當所有人拿著這份確鑿無疑的報告準備給機翼加厚裝甲時,統計學家Abraham Wald阻攔了他們,同時提出了一個完全相反的方案:加厚駕駛艙與尾部。理由非常簡單:這兩個位置中彈的飛機,都沒有回來。換言之,它們是一份沉默的數據——“死人不會說話”。
最后,盟軍高層紛紛聽取了這個建議,加固了駕駛艙與尾部,果然空中戰場局勢得以好轉,駕駛員生還率也大大提高。事實證明,這是一個無比英明的措施。
這個事例也被稱作“幸存者偏差”(Survivorship bias)。它是一種典型的由于模型不當,導致的“數據說謊”。
注:Abraham
Wald,1902~1950,生于奧匈帝國,維也納大學博士。1938年為躲避納粹,移民美國,哥倫比亞大學教授。Herman
Chernoff的導師。其子Robert M. Wald,為著名理論物理學家,芝加哥大學教授,黑洞理論的提出者之一。
關聯規則評價
“數據說謊”的問題很普遍。再看這樣一個例子,我們分析一個購物籃數據中購買游戲光碟和購買影片光碟之間的關聯關系。交易數據集共有10,000條記錄,如表1所示:
| 買電影 | 4000 | 3500 | 7500 |
| 不買電影 | 2000 | 500 | 2500 |
| 列總計 | 6000 | 4000 | 10000 |
假設我們設置得最小支持度為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){>1,正相關=1,獨立<1,負相關\mathrm{lift}(X\Rightarrow Y)\begin{cases}>1, & 正相關 \\ =1, & 獨立 \\ <1, & 負相關 \\ \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的獨立性越小。
卡方系數
卡方系數是與卡方分布有關的一個指標。參見:
https://en.wikipedia.org/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?表示期望值,不理解沒關系,我們看一個例子就明白了。
| 買電影 | 4000(4500) | 3500(3000) | 7500 |
| 不買電影 | 2000(1500) | 500(1000) | 2500 |
| 列總計 | 6000 | 4000 | 10000 |
表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>4000E(買影片,買游戲)=4500>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(買游戲—>買影片),confidence(買影片—>買游戲)}=min{66%,53.3%}=53.3%all\_confidence(買游戲,買影片)=min\{confidence(買游戲—>買影片),confidence(買影片—>買游戲)\}=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)∣?
評價指標間的比較
這里有這么多的評價標準,究竟哪些好,哪些能夠準確反應事實,我們來看一組對比。
| coffee | MC | MC | C |
| coffee | MC | MC | C |
| 列總計 | M | M | total |
上表中,M表示購買了牛奶、C表示購買了咖啡, M 表示不購買牛奶,C 表示不購買咖啡,下面來看6個不同的數據集,各個度量標準的值
| D1 | 10000 | 1000 | 1000 | 100000 | 112000 | 0.91 | 0.91 | 90557 | 9.26 | 0.91 | 0.91 | 0.91 | 0.91 |
| D2 | 10000 | 1000 | 1000 | 100 | 12100 | 0.91 | 0.91 | 0 | 1.00 | 0.91 | 0.91 | 0.91 | 0.91 |
| D3 | 100 | 1000 | 1000 | 100000 | 102100 | 0.09 | 0.09 | 670 | 8.44 | 0.09 | 0.09 | 0.09 | 0.09 |
| D4 | 1000 | 1000 | 1000 | 100000 | 103000 | 0.50 | 0.50 | 24740 | 25.75 | 0.50 | 0.50 | 0.50 | 0.50 |
| D5 | 1000 | 100 | 10000 | 100000 | 111100 | 0.91 | 0.09 | 8173 | 9.18 | 0.09 | 0.91 | 0.50 | 0.29 |
| D6 | 1000 | 10 | 100000 | 100000 | 201010 | 0.99 | 0.01 | 965 | 1.97 | 0.01 | 0.99 | 0.50 | 0.10 |
我們先來看前面四個數據集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準則和不平衡因子結合的方法。
參考文章:https://www.cnblogs.com/fengfenggirl/p/associate_measure.html
總結
以上是生活随笔為你收集整理的【机器学习】数据挖掘算法——关联规则(一),相关概念,评价指标的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习】主元分析(PCA)以及与SV
- 下一篇: 【机器学习】数据挖掘算法——关联规则(二