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)

在這裡插入圖片描述
舉個例子:

1.頻繁模式判斷

首先由於模式acdf在資料庫中出現2次,所以模式acdf支援度為:
ξ=25=0.4\xi=\frac{2}{5}=0.4
歸納一下就是,
ξ=\xi=\frac{某個模式出現在資料庫中次數}{整個資料庫中模式的總個數}

acdf滿足最小支援度要求,因此模式acdf是頻繁模式。由於沒有其他頻繁模式含有acdf,故模式acdf是最大頻繁模式.

2.關聯模式的判斷

在模式acdf中最大支援度專案c的支援度是5**(出現了5次),所以模式***acdf***的***all-confidence***是:
α=25=0.4&lt;η=0.5\alpha=\frac{2}{5}=0.4&lt;\eta=0.5
小於最小all-confidence,因此模式acdf不是關聯模式。

由於模式adf在資料庫中出現了2次,所以模式adf支援度也滿足要求,即為頻繁模式,且模式adf中最大支援度專案f的支援度是4,所以模式adf的all-confidence是α=24\alpha=\frac{2}{4},滿足最小all-confidence,因此模式adf是頻繁的關聯模式。
總結一下怎麼判斷關聯模式:
η=\eta=\frac{某個模式出現在資料庫中次數}{其中某個最大元素的支援度}

3.最大頻繁關聯模式的判斷

由於包含模式adf的頻繁模式只有acdf,而acdf不是最大頻繁關聯模式,所以模式adf是最大頻繁關聯模式。

關聯和相關的定義區分

其實遇到這個情況但時候我也很頭大,啥叫關聯,啥又是相關。簡單的說,就是有兩件產品A、B。如果一位顧客,買了A產品又去買B產品的概率特別大,那就說明A和B這兩個產品的他們是關聯的。舉個例子來說就是,你網上搶到了一個小米MIX3,買了這個手機你很愛惜,你肯定要買手機殼,而且買手機殼的概率真的非常的高。那就說明這兩款產品是關聯的。事實上他們是不是關聯的,手機和手機殼。這個不言而喻吧。用數學的語言來表示就是
P(B/A)ABP(B/A)發生的概率非常高 ,即在A發生的條件下B發生的概率特別高
那什麼又是相關呢?
就是說一個顧客是否購買B嚴重的影響他時候購買A,舉個例子,我現在要買一本python的書,一本是A書,一本是B書