原文連結:http://blog.csdn.net/qq675927952/article/details/6707704
http://blog.csdn.net/pupingpp/article/details/8264734
關聯規則的目的在於在一個資料集中找出項之間的關係,也稱之為購物藍分析 (market basketanalysis)。例如,購買鞋的顧客,有10%的可能也會買襪子,60%的買麵包的顧客,也會買牛奶。這其中最有名的例子就是"尿布和啤酒"的故事了。
關聯規則的應用場合。在商業銷售上,關聯規則可用於交叉銷售,以得到更大的收入;在保險業務方面,如果出現了不常見的索賠要求組合,則可能為欺詐,需要作進一步的調查。在醫學方面,可找出可能的治療組合;在銀行方面,對顧客進行分析,可以推薦感興趣的服務等等。
Apriori algorithm是關聯規則裡一項基本演算法。由Rakesh Agrawal 在 1994年提出的,詳細的介紹請猛擊這裡《Fast Algorithms for Mining Association Rules》。
首先我們來看,什麼是規則。規則形如"如果…那麼…(If…Then…)",前者為條件,後者為結果。例如一個顧客,如果買了可樂,那麼他也會購買果汁。
如何來度量一個規則是否夠好。有兩個量,信賴度(Confidence)和支援度(Support)。假設有如下表的購買記錄。
| 顧客 |
項目 |
| 1 |
orangejuice, coke |
| 2 |
milk,orange juice, window cleaner |
| 3 |
orangejuice, detergent |
| 4 |
orangejuice, detergent, coke |
| 5 |
windowcleaner |
將上表整理一下,得到如下的一個2維表
| |
Orange |
WinCl |
Milk |
Coke |
Detergent |
| Orange |
4 |
1 |
1 |
2 |
2 |
| WinCl |
1 |
2 |
1 |
0 |
0 |
| Milk |
1 |
1 |
1 |
0 |
0 |
| Coke |
2 |
0 |
0 |
2 |
1 |
| Detergent |
1 |
0 |
0 |
0 |
2 |
上表中橫欄和縱欄的數字表示同時購買這兩種商品的交易條數。如購買有Orange的交易數為4,而同時購買Orange和Coke的交易數為2。
信賴度表示了這條規則有多大程度上值得可信。設條件的項的集合為A,結果的集合為B。信賴度計算在A中,同時也含有B的機率。即Confidence(A==>B)=P(B|A)。例如計算"如果Orange則Coke"的信賴度。由於在含有Orange的4條交易中,僅有2條交易含有Coke.其信賴度為0.5。
支援度計算在所有的交易集中,既有A又有B的機率。例如在5條記錄中,既有Orange又有Coke的記錄有2條。則此條規則的支援度為2/5=0.4。現在這條規則可表述為,如果一個顧客購買了Orange,則有50%的可能購買Coke。而這樣的情況(即買了Orange會再買Coke)會有40%的可能發生。
再來考慮下述情況。
| 項 |
支援度 |
| A |
0.45 |
| B |
0.42 |
| C |
0.4 |
| A andB |
0.25 |
| A andC |
0.2 |
| B andC |
0.15 |
| A,B,andC |
0.05 |
可得到下述規則
| 規則 |
信賴度 |
| If B and C thenA |
0.05/0.15*100%=33.33% |
| If A and C thenB |
0.05/0.20*100%=25% |
| If A and B thenC |
0.05/0.25*100%=20% |
上述的三條規則,哪一條規則有用呢。
對於規則" If B and CthenA",同時購買B和C的人中,有33.33%會購買A。而單項A的支援度有0.45,也就是說在所有交易中,會有45%的人購買A.看來使用這條規則來進行推薦,還不如不推薦,隨機對顧客進薦好了。
為此引入另外一個量,即提升度(Lift),以度量此規則是否可用。描述的是相對於不用規則,使用規則可以提高多少。有用的規則的提升度大於1。計算方式為Lift(A==>B)=Confidence(A==>B)/Support(B)=Support(A==>B)/(Support(A)*Support(B))。在上例中,Lift(IfB and C The A)=0.05/(0.15*0.45)=0.74。而Lift(If A thenB)=0.25/(0.45*0.42)=1.32。也就是說對買了A的人進行推薦B,購買機率是隨機推薦B的1.32倍。lift(A->B) = P(AB)/(P(A)P(B))
如何產生規則呢。可以分兩步走。
首先找出頻繁集(frequentitemset)。所謂頻繁集指滿足最小支援度或信賴度的集合。其次從頻繁集中找出強規則(strongrules)。強規則指既滿足最小支援度又滿足最小信賴度的規則。
我們來看如何產生頻繁集。
這其中有一個定理。即頻繁集的子集也一定是頻繁集。比如,如果{A,B,C}是一個3項的頻繁集,則其子集{A,B},{B,C},{A,C}也一定是2項的頻繁集。為方便,可以把含有k項的集合稱之為k-itemsets.
下面以迭代的方式找出頻繁集。首先找出1-itemsets的頻繁集,然後使用這個1-itemsets,進行組合,找出2-itemsets的頻繁集。如此下去,直到不再滿足最小支援度或信賴度的條件為止。這其中重要的兩步驟分別是串連(join 串連的規則就是:兩個第K級的頻繁項要是可以串連形成第K+1級候選頻繁項,若且唯若:兩個第K級頻繁項的前K-1項都相同,只是第K項不同。。) 和剪枝(prune).即從(k-1)-itemsets中的項進行組合,產生備選集(Candidateitemsets)。再從備選集中,將不符合最小支援度或信賴度的項刪去。例如
| Frequent2-itemsets |
|
Candidate3-itemsets |
|
Frqquent3-itemsets |
| I1,I2 |
==> |
I1,I2,I4 |
==> |
I1,I2,I4 |
| I1,I4 |
|
I2,I3,I4 |
|
|
| I2,I3 |
|
|
|
|
| I2,I4 |
|
|
|
|
下面我們再來看一個詳細的例子。
設最小支援度為2,以Ck表示k-itemsets備選集,以Lk表示k-itemsets頻繁集。
| ID |
Items |
|
Itemset |
Sup.count |
|
Itemset |
|
|