1.現實需求:購物籃分析
超市經理想知道顧客的購物習慣,如顧客在一次購物時會同時購買哪些商品,也就是要發現不同商品之間的關聯,典型案例是“尿布與啤酒”。
關聯規則挖掘的目標是發現數據項集之間的關聯關係或相關關係。
2.關聯規則的基本概念
定義1:項與項集
項:數據庫中不可分割的最小單位信息,用i表示,如商品中的尿布、啤酒等。
項集:項的集合,用下式表示
I中項目個數爲k,則稱集合I爲k-項集,如商品組合{尿布,啤酒,牛奶}。
定義2:事務
設 是所有項構成的集合,可以稱爲全項集,而I的子集對應一個事務,如顧客買了{尿布,啤酒},這個子項集對應一個事務。
定義3:項集的頻數
包含某項集的事務數量稱爲該項集的頻數(支持度計數)。
定義4:關聯規則
形如 的表達式,X、Y是I的真子集,且滿足X∩Y=∅ 。
X爲規則的前提,Y爲規則的結果,表示X中出現的項出現時,Y中的項也跟着出現的規律。如顧客購買了尿布和啤酒,尿布⟹ 啤酒存在的關聯規則。
定義5:關聯規則的支持度
反映了X和Y中所含的項在事務集中同時出現的頻率。
定義6:關聯規則的置信度
置信度反映包含X的事務中,出現Y的條件概率。
定義7:最小支持度與最小置信度
用戶爲了達到一定要求,關聯規則需要滿足指定的支持度和置信度閾值。
當 、 分別大於等於各自閾值時,認爲關聯規則 是有趣的。
這兩個閾值稱爲最小支持度閾值(min_sup)、最小置信度閾值(min_conf)。
min_sup描述了關聯規則的最低重要程度,min_conf規定了關聯規則必須滿足的最低可靠性。
定義8:頻繁項集
項集 ,給定最小支持度min_sup,如果項集U的支持度
稱U爲頻繁項集,否則爲非頻繁項集。
定義9:強關聯規則
稱 爲強關聯規則,否則爲弱關聯規則。
關聯規則中最重要的參數是:支持度、置信度。
3.關聯規則的挖掘過程
總的來講,關聯規則的挖掘過程分兩步:
- 第一步,找出所有的頻繁項集;
- 第二步,由頻繁項集產生強關聯規則。
實現過程結合具體實例來講解。
下表爲數據庫事務列表D,在數據庫中,有9筆商品交易(即9項事務),每個交易都用不同的標識符TID代表。
數據庫事務列表D
交易(事務TID) |
商品ID的交易集合(項集) |
T100 |
I1, I2, I5 |
T200 |
I2, I4 |
T300 |
I2, I3 |
T400 |
I1, I2, I4 |
T500 |
I1, I3 |
T600 |
I2, I3 |
T700 |
I1, I3 |
T800 |
I1, I2, I3, I5 |
T900 |
I1, I2, I3 |
仔細觀察,會發現:
- 所有的項包括:I1, I2, I3, I4, I5;
- 交易集合中的項是按字典順序存放的,這一點很重要,可以減少很多麻煩,提高算法的效率。
同時,我們假設最小支持度計數爲2,即min_sup=2。
⑴第一次掃描數據集D(初始化掃描)
①得到所有項(1-項集)的支持度計數;
候選1-項集C1
C1 |
|
項集 |
支持度計數 |
{I1} |
6 |
{I2} |
7 |
{I3} |
6 |
{I4} |
2 |
{I5} |
2 |
支持度計數就是該項集在9個事務中出現的次數(該項集爲各事務項集的子集)。
②各支持度計數與最小支持度計數比較,得到頻繁1-項集L1。
頻繁1-項集L1
L1 |
|
項集 |
支持度計數 |
{I1} |
6 |
{I2} |
7 |
{I3} |
6 |
{I4} |
2 |
{I5} |
2 |
⑵第二次掃描
主要目的是找到頻繁2-項集。
①L1執行連接操作L1⋈L1,產生候選2-項集C2'。
連接操作就是L1中的各項集按照字典順序進行組合,且每個新組合項集的項個數比原先多1個。L1連接操作形成的候選項集C2’如下表:
C2’ |
項集 |
{I1, I2} |
{I1, I3} |
{I1, I4} |
{I1, I5} |
{I2, I3} |
{I2, I4} |
{I2, I5} |
{I3, I4} |
{I3, I5} |
{I4, I5} |
②對C2'進行剪枝操作:這一步的目的是壓縮C2’,減少計算量,最終得到候選2-項集C2。
剪枝操作的理論基礎是所謂的Apriori性質(先驗性質):
任何非頻繁的(k-1)項集都不可能是頻繁k項集的子集。
也就是說,如果一個候選k項集的(k-1)項子集不在L(k-1)中,則該候選k項集不可能是頻繁的,從而可以從候選k項集Ck中刪除。
在這裏,對C2’中各項集的1項子集,判斷是否在頻繁1-項集L1中,很顯然都在,所以C2中沒有項集在剪枝步中被刪除。
計算剪枝後的項集C2及其支持度:
C2 |
|
項集 |
支持度計數 |
{I1, I2} |
4 |
{I1, I3} |
4 |
{I1, I4} |
1 |
{I1, I5} |
2 |
{I2, I3} |
4 |
{I2, I4} |
2 |
{I2, I5} |
2 |
{I3, I4} |
0 |
{I3, I5} |
1 |
{I4, I5} |
0 |
③C2各項集支持度計數與最小支持度計數比較,刪除小於最小支持度計數的項集,得到頻繁2-項集L2。
L2 |
|
項集 |
支持度計數 |
{I1, I2} |
4 |
{I1, I3} |
4 |
{I1, I5} |
2 |
{I2, I3} |
4 |
{I2, I4} |
2 |
{I2, I5} |
2 |
⑶第三次掃描
主要目的是獲得頻繁3-項集。
①連接操作:L2⋈L2,產生候選3-項集C3’。
C3’ |
項集 |
{I1, I2, I3} |
{I1, I2, I5} |
{I1, I3, I5} |
{I2, I3, I4} |
{I2, I3, I5} |
{I2, I4, I5} |
②剪枝操作:使用先驗性質,檢驗各候選3-項集的所有2項子集是否爲2-頻繁項集。經檢查,C3’中{I1, I3, I5}、{I2, I3, I4}、{I2, I3, I5}、{I2, I4, I5}不滿足先驗性質,刪除後得到項集C3,並計算剩下項集的支持度計數。
C3 |
|
項集 |
支持度計數 |
{I1, I2, I3} |
2 |
{I1, I2, I5} |
2 |
③C3各項集支持度計數與最小支持度計數比較,得到頻繁3-項集L3。
L3 |
|
項集 |
支持度計數 |
{I1, I2, I3} |
2 |
{I1, I2, I5} |
2 |
⑷第四次掃描
①連接操作:
②剪枝操作:連接產生的項集其子集{I2, I3, I5}不是頻繁項集,所以 被刪除,C4=∅ 。於是算法終止,找出了所有的頻繁項集L3。
總結一下,挖掘頻繁項集的過程:
1.初始化掃描
2.循環掃描——連接、剪枝
3.直至候選項集爲空集,程序終止。