1. 程式人生 > >頻繁模式和關聯規則原理與簡述

頻繁模式和關聯規則原理與簡述

頻繁模式和關聯規則:

“啤酒與尿布”故事:

這是一個幾乎被舉爛的例子,“啤酒與尿布”的故事產生於20世紀90年代的美國沃爾瑪超市中,沃爾瑪的超市管理人員分析銷售資料時發現了一個令人難於理解的現象:在某些特定的情況下,“啤酒”與“尿布”兩件看上去毫無關係的商品會經常出現在同一個購物籃中,這種獨特的銷售現象引起了管理人員的注意,經過後續調查發現,這種現象出現在年輕的父親身上。 在美國有嬰兒的家庭中,一般是母親在家中照看嬰兒,年輕的父親前去超市購買尿布。父親在購買尿布的同時,往往會順便為自己購買啤酒,這樣就會出現啤酒與尿布這兩件看上去不相干的商品經常會出現在同一個購物籃的現象。如果這個年輕的父親在賣場只能買到兩件商品之一,則他很有可能會放棄購物而到另一家商店,直到可以一次同時買到啤酒與尿布為止。沃爾瑪發現了這一獨特的現象,開始在賣場嘗試將啤酒與尿布擺放在相同的區域,讓年輕的父親可以同時找到這兩件商品,並很快地完成購物;而沃爾瑪超市也可以讓這些客戶一次購買兩件商品、而不是一件,從而獲得了很好的商品銷售收入,這就是“啤酒與尿布”故事的由來。 當然“啤酒與尿布”的故事必須具有技術方面的支援。1993年美國學者Agrawal 提出通過分析購物籃中的商品集合,從而找出商品之間關聯關係的關聯演算法,並根據商品之間的關係,找出客戶的購買行為。艾格拉沃從數學及計算機演算法角度提出了商品關聯關係的計算方法——A prior演算法。沃爾瑪從上個世紀90年代嘗試將Aprior演算法引入到POS機資料分析中,並獲得了成功,於是產生了“啤酒與尿布”的故事。


頻繁項集基本概念:

頻繁模式主要作用是尋找到資料集中頻繁出現的項集、序列或子結構。

1.項集(itemset):

最基本的模式是項集,它是指若干個項的集合。如上圖,{Beer,Nuts,Diaper}就是一個項集。


2.K-項集(K-itemset):

包含K個項的項集

3.資料集:

典型的資料集是事物的集合,每一個事物是一個非空項集,並擁有一個標識TID。如上圖,上圖就是一個數據集。

4.絕對支援度(Absolute Support):

資料集中包含項集X的事物數。如上圖,含Beer的TID為10,20,30,因此絕對支援度就是3。

5.相對支援度(Relative Support):

項集X的絕對支援度與資料集事物總數的比值。如上圖,Beer的絕對支援度為3,相對支援度為60%。

6.頻繁項集(Frequent Itemset):

項集X的支援度超過最小支援度閥值(min_sup)時,稱X為頻繁項集。min_sup大部分情況下由需求而定,如上圖,如果min_sup=50%,則Beer為頻繁項集,如果min_sup=70%,則Beer不是頻繁項集。

關聯規則(Association Rules):

光是知道頻繁項集,並不能帶來什麼,因此我們需要引入關聯規則的概念。


1.支援度(Support):

可以理解為上方的相對支援度。通常需要一個最小支援度閥值(min_sup)或者其他相應的篩選規則(比如,銷量最高的前20個)來進行篩選。

2.置信度(Confidence):

反映了規則的確定性。置信度是一個事物在包含X的同時也包含Y的條件概率。置信度作用於多個項的項集,因此所有置信度都是單項的,也就是X->Y與Y->X的置信度不同。如上圖,{Beer,Diaper}這個項集的絕對支援度是3,Beer->Diaper的置信度為3/3(Beer的絕對支援度)=100%,而Diaper->Beer的置信度為3/4(Diaper的絕對支援度)=75%。同樣,置信度也會有最小置信度閾值。 同時滿足最小支援度閾值和最小置信度閾值的規則稱為強規則
一般而言,關聯規則的挖掘分為兩步:
1.找出所有頻繁項集,即候選規則
2. 對所有候選規則計算置信度,找出其中的強規則

3.提升值(Lift):

以度量此規則是否可用。描述的是相對於不用規則,使用規則可以提高多少。 lift(A->B) = P(AB)/(P(A)P(B))
lift > 1  則不是偶然現象,有較強的關聯度。 lift<=1 的規則不做參考

頻繁項集的壓縮:

頻繁項集裡存在著較多的冗餘,因此人們又引入了頻繁閉項集和最大頻繁集的概念。


1.頻繁閉項集(Closed Patterns):

當項集X是頻繁項集,且資料集D中不存在X的真超集Y,使得X和Y的支援度相等,則X是閉頻繁項集。閉頻繁項集的表示是無失真壓縮,不會丟失支援度的資訊。通過閉頻繁項集可以反推出所有的頻繁項集以及相應的支援度。
完全看不懂吧,還是來舉個栗子(( ̄︶ ̄)↗)。 因為項集{Beer,Diaper}出現在TID為10,20,30的事務中,所以{Beer,Diaper}的絕對支援度為3。而{Beer,Diaper}的直接超集:{Beer,Nuts,Diaper},{Beer,Coffee,Diaper},{Beer,Diaper,Eggs}的支援度計數分別為1,1,1,都不等於{Beer,Diaper}的支援度計數3,所以{Beer,Diaper}為閉項集,如果其支援度超過閾值,則{Beer,Diaper}為閉頻繁項集。

2.最大頻繁項集(Max-Patterns):

當項集X是頻繁項集,且資料集D中不存在X的真超集Y,使得Y是頻繁項集,則X是最大頻繁項集。極大頻繁項集的表示是有失真壓縮,失去了頻繁項集的支援度資訊,我們可以根據極大頻繁項集判斷任意項集是否是頻繁的,但無法得到相應的支援度。
理論什麼的看著就頭大,還是來舉個栗子吧~(~ ̄▽ ̄)~。 如果,{Beer,Nuts,Diaper}大於最小閥值(別看支援度什麼的都很低,但是閥值是人定的,講不定就大於閥值呢。),那{Beer,Nuts,Diaper}就是個最大頻繁項集,因為沒有包含{Beer,Nuts,Diaper}並且比它更大的集合了。


頻繁項集挖掘演算法:

1.Apriori :(Agrawal & [email protected]’94)
2.Eclat (Zaki, Parthasarathy, Ogihara, Li @KDD’97)
3.FP-Growth (Han, Pei, Yin @SIGMOD’00)