2.2.1. Luật kết hợp
Cho một tập mục I = {i1, i2, …, in}, mỗi phần tử thuộc I được gọi là một mục. Mục còn được gọi là thuộc tính và I cũng được gọi là tập các thuộc tính. Cho một CSDL giao dịch T = {t1, t2, …, tm}, trong đó mỗi tj là một giao dịch (transaction – còn được gọi là bản ghi - record) và là một tập con thuộc I.
Cho X là một tập con các thuộc tính (X ⊆ I), lúc đó X được gọi là tập mục (itemset). Số lượng các thuộc tính (số mục) trong X được gọi là độ dài hay lực lượng (card) của tập mục X. Nếu X có lực lượng là k thì X được gọi là k-tập mục.
Sau đây là một ví dụ về CSDL (dạng giao dịch): I = {A, C, D, T, W}, T={1, 2, 3, 4, 5, 6} với thông tin về các giao dịch cho ở bảng sau:
Định danh giao tác(TID) Tập mục (itemset)
1 {A, B, D, E} 2 {B, C E} 3 {A, B D, E} 4 {A, B, C E} 5 {A, B, C, D, E} 6 { B, C, D } Bảng 2.1. Ví dụ về một CSDL dạng giao dịch Định nghĩa 2.1 (Luật kết hợp)
Luật kết hợp là một biểu thức có dạng X → Y, trong đó X, Y ⊆ I, X, Y ≠∅
và X ∩ Y = ∅ [21].
Định nghĩa 2.2 (Độ hỗ trợ của một tập mục)
Độ hỗ trợ (support) của một tập mục X được ký hiệu supp(X) – là phần trăm số giao dịch trong CSDL chứa X, tức supp(X) = card(X)/card(T) [21].
Định nghĩa 2.3 (Độ hỗ trợ và độ tin cậy của luật kết hợp)
Độ hỗ trợ (support) và độ tin cậy (confident) là hai thước đo cho tính tin cậy và mức độ chính xác của luật [21].
Độ hỗ trợ đo tính tin cậy của luật bằng tỷ lệ giao dịch có chứa (X ∪ Y) trong tập T. Độ hỗ trợ của luật X → Y, ký hiệu supp(X → Y) và được tính bằng:
supp(X→Y) = supp(X ∪Y)
Độ tin cậy đo mức độ chính xác của luật bằng tỷ lệ tập giao dịch có chứa (X∪Y) so với tập giao dịch có chứa X. Độ tin cậy của luật X→Y, ký hiệu conf(X→Y) và được tính bằng:
conf(X→Y) = supp(X ∪Y)/supp(X)
Từ định nghĩa ta có: 0 ≤ supp(X→Y) ≤ 1 và 0 ≤ conf(X→Y) ≤ 1. Theo quan niệm xác suất, độ hỗ trợ là xác suất xuất hiện tập mục X∪Y, còn độ tin cậy là xác suất có điều kiện xuất hiện Y khi đã xuất hiện X.
Luật kết hợp X→Y được coi là một “tri thức” (“mẫu có giá trị”) nếu xảy ra đồng thời: supp(X→Y) ≥ minsup và conf(X→Y) ≥ minconf, với minsup và minconf là hai ngưỡng cho trước.
Một số tính chất của luật kết hợp:
• Không có phép hợp các luật kết hợp: Nếu X → Z và Y → Z thì không có nghĩa là X∪Y → Z đúng. Xét trường hợp X∩Y = ∅, các giao tác trong T hỗ trợ Z nếu và chỉ nếu chúng hỗ trợ hoặc X, hoặc Y, khi đó độ hỗ trợ của X∪Y bằng 0 nên luật X∪Y → Z có độ tin cậy là 0%.
• Phép tách luật: Nếu X∪Y → Z thì X → Z và Y → Z chưa chắc chắn xảy ra. Ví dụ trường hợp Z có mặt trong một giao tác khi và chỉ khi cả hai X và Y cũng có mặt, tức là supp(X∪Y) = supp(Z). Nếu độ hỗ trợ của X và Y đủ lớn hơn supp(X∪Y), tức là supp(X) > supp(X∪Y) và supp(Y) > supp(X∪Y) thì hai luật riêng biệt sẽ không đủ độ tin cậy. Tuy nhiên đảo lại: X → Y ∪ Z thì X → Y và X → Z
• Các luật kết hợp không có tính bắc cầu: Nếu X → Y và Y → Z thì chúng ta không thể suy ra X → Z
Định nghĩa 2.4 (Tập phổ biến)
Một tập mục X được gọi là tập phổ biến nếu độ hỗ trợ của nó lớn hơn hoặc bằng một ngưỡng minsup được xác định bởi người sử dụng: supp(X) ≥ minsup.
Bảng sau đây sẽ liệt kê tất cả những tập mục phổ biến (frequent-itemset) trong CSDL cho ở bảng 2.1 với giá trị minsup bằng 50%.
Một số tính chất của tập phổ biến
• Nếu A ⊆ B, với A, B là các tập mục thì supp(A) ≥ supp(B). Điều này là rõ ràng vì tất cả các giao tác trong T hỗ trợ B thì cũng hỗ trợ A.
• Một tập chứa một tập không phổ biến thì cũng là tập không phổ biến. Nếu A ⊆ B, với A, B là các tập mục thì supp(A) ≥ supp(B) (theo tính chất 1) mà supp(A) < minsup thì suy ra supp(B) < minsup.
• Các tập con của một tập phổ biến cũng là các tập phổ biến. Nếu tập B là một tập phổ biến trong T, tức là supp(B) ≥ minsup, mọi tập con A của B cũng là phổ biến trong T bởi vì supp(A) ≥ supp(B) ≥ minsup theo tính chất 1. Trường hợp đặc biệt, nếu tập A = {i1, i2, …, in} thì mọi tập con có (m-1) mục của nó cũng là phổ biến. Nhưng ngược lại không đúng.
Một số tác giả đã chỉ ra một số hạn chế của độ hỗ trợ và độ tin cậy để đánh giá các luật kết hợp [14]. Để tránh một số những hạn chế đó và để đảm bảo rằng các luật phát hiện được là có ích và chính xác, một cách tiếp cận mới được đề xuất trong [14].
Các tập mục phổ biến Độ hỗ trợ (supp) tương ứng
B 100% (6/6)
E, BE 83% (5/6)
A, C, D, AB, AE, BC, BD, ABE 67% (4/6)
AD, CE, DE, ABD, ADE, BCE, BDE 50% (3/6)
Định nghĩa 2.5 (Nhân tố chắc chắn)
Nhân tố chắc chắn của một luật kết hợp mờ X → Y là giá trị:
Giả thiết rằng nếu supp(Y) = 1 thì CF(X→Y) = 1 và nếu supp(Y) = 0 thì CF(X→Y) = -1.
Nhân tố chắc chắn có giá trị trong [-1, 1]. Mệnh đề sau đây là một tính chất thú vị trong [14]:
Mệnh đề 1: conf(X → Y) = 1 nếu và chỉ nếu CF(X → Y) = 1
Tính chất này đảm bảo rằng nhân tố chắc chắn của một luật kết hợp mờ đạt được giá trị tối đa của nó là 1, khi và chỉ khi luật đó là hoàn toàn chính xác.
2.2.2. Phát biểu bài toán khai phá luật kết hợp
Bài toán khai phá luật kết hợp (ở dạng đơn giản nhất) đặt ra như sau: Cho một CSDL T, độ hỗ trợ tối thiểu minsup, độ tin cậy tối thiểu minconf. Hãy tìm tất cả các luật kết hợp có dạng X → Y thỏa mãn: supp(X∪Y) ≥ minsup và conf(X→Y) ≥ minconf.
Các thuật toán khai phá luật kết hợp đầu tiên được phát triển bởi Agrawal và đồng nghiệp [25]. Các thuật toán này thu được các luật mạnh (strong rules) từ các tập phổ biến có độ hỗ trợ lớn hơn minsup [21].
Thuật toán nổi tiếng nhất APriori, được dựa trên một quan sát đơn giản nhưng quan trọng về các tập phổ biến, tính chất Apriori nhấn mạnh là: "Tất cả các tập con của một tập mục phổ biến cũng là một tập mục phổ biến". Từ đó, thuật toán được thiết kế để bắt đầu quá trình lặp đi lặp lại từ các tập mục phổ biến có chứa một mục (thuộc tính) duy nhất.
Mặc dù mô hình KPDL này có liên quan đến CSDL giao dịch nhị phân, nhưng rất dễ dàng khái quát nó để chứa các cấu trúc dữ liệu phức tạp hơn mà các khái niệm về mục và tập mục là những khái niệm trừu tượng có thể biểu diễn cho các đối tượng và tập hợp các đối tượng tương ứng nói chung. Sau các
− → − − → = → ) Y ( p sup ) Y ( p sup ) Y X ( conf ) Y ( p sup 1 ) Y ( p sup ) Y X ( conf ) Y X ( CF
nếu conf (X→Y) > supp(Y) nếu conf (X→Y) ≤ supp(Y)
bài báo đầu tiên của Agrawal, rất nhiều công trình nghiên cứu đã được dành cho chủ đề này và một số tình huống khác nhau đã được khám phá. Nhiều bài báo đã được dành để phát triển các thuật toán khai phá các luật kết hợp. Các thuật toán ban đầu đã được điều chỉnh, sửa đổi hoặc cải tiến bởi nhiều tác giả với mục đích giải quyết các tình huống khác nhau có thể xuất hiện trong KPDL. Các thuật toán hiệu quả đầu tiên như AIS, Apriori và AprioriTid, SETM, OCD, và DHP đã được tiếp tục với những phát triển gần đây như DIC, CARMA, TBAR, và FP- Growth.
Hầu hết các thuật toán được đề xuất để khai phá luật kết hợp thường được chia thành hai pha [5] [23] [27]:
• Pha 1: Tìm tất cả các tập mục phổ biến từ CSDL, tức là tìm tất cả các tập mục X thỏa mãn supp(X) ≥ minsup. Đây là pha tốn khá nhiều thời gian của CPU (CPU-bound) và thời gian vào ra ổ đĩa (I/O-bound).
• Pha 2: Sinh các luật tin cậy từ các tập phổ biến đã tìm thấy ở pha 1. Pha này tương đối đơn giản và tốn kém ít thời gian so với pha trên. Nếu X là một tập phổ biến thì luật kết hợp được sinh từ X có dạng
X’→ X\X’
trong đó X’ là tập con khác rỗng của X, X\X’ là hiệu của hai tập hợp
Ví dụ, với tập phổ biến ABE có độ tin cậy 67% ở bảng 2.2 và minconf = 70% thì chúng ta có thể sinh các luật kết hợp sau đây:
Luật kết hợp Độ tin cậy conf ≥ minconf ? A→BE (conf = supp(ABE)/supp(A) = 100%) Có
B→AE (conf = supp(ABE)/supp(B) = 67%) Không
E →AB (conf = 80%) Có
AB → E (conf = 100%) Có
AE → B (conf = 100%) Có
BE → A (conf = 80%) Có
2.3. Luật kết hợp nhị phân
Luật kết hợp nhị phân là hướng nghiên cứu đầu tiên của luật kết hợp. Hầu hết các nghiên cứu ở thời kỳ đầu về luật kết hợp đều liên quan đến luật kết hợp nhị phân. Trong dạng luật kết hợp này, các mục chỉ được quan tâm là có hay không xuất hiện trong giao dịch của CSDL chứ không quan tâm về “mức độ” xuất hiện. Thuật toán tiêu biểu nhất khai phá dạng luật này là thuật toán Apriori và các biến thể của nó [28].
Cho I = {i1, i2, ... , in} là một tập các thuộc tính nhị phân, được gọi là các mục. T là một CSDL giao dịch. Mỗi giao dịch t được biểu diễn như là một vector nhị phân, với t[k] = 1 nếu t chứa ik, và t[k] = 0 nếu ngược lại. Cho X là một tập của một số thuộc tính trong I. Ta nói rằng một giao dịch t thỏa mãn X nếu tất cả các ik∈ X, t[k] = 1.
Thuật toán Apriori
Thuật toán Apriori là một thuật toán điển hình tìm luật kết hợp. Thuật toán dựa theo tính chất Apriori phát biểu rằng: “tập con bất kỳ của một tập phổ biến cũng là một tập phổ biến”, tính chất này hiển nhiên đúng. Nội dung quan trọng nhất của thuật toán Apriori là tìm ra được tất cả các tập phổ biến trong T. Trong thuật toán, các tên mục i1, i2, …, in (n=|T|) được sắp xếp theo một thứ tự nhất định (thường được đánh chỉ số 1, 2, … , n). Thuật toán hoạt động theo quy tắc quy hoạch động, nghĩa là từ các tập Fi = {ci|ci tập phổ biến,|ci| = i} gồm mọi tập mục phổ biến có độ dài i với 1 ≤ i ≤ k, đi tìm tập Fk+1 gồm mọi tập mục phổ biến có độ dài k+1.
Đầu tiên Apriori duyệt CSDL và tìm kiếm các tập phổ biến kích thước là 1 bằng cách tính toán cho mỗi thuộc tính và lựa chọn những thuộc tính thoả mãn yêu cầu về độ hỗ trợ tối thiểu. Sau đó lặp lại ba bước sau đây và đưa ra tất cả các tập phổ biến.
1. Tạo Ck+1 - các ứng viên của các tập phổ biến có kích thước k+1 từ các tập phổ biến kích thước k.
2. Duyệt CSDL và tính độ hỗ trợ của mỗi ứng viên của các tập phổ biến. 3. Thêm các tập phổ biến thỏa mãn yêu cầu về độ hỗ trợ tối thiểu vào Fk+1.
Mô tả thuật toán như sau:
Input: - CSDL giao dịch T = {t|t giao dịch} - Độ hỗ trợ tối thiểu minsup >0 Output: Tập tất cả các tập phổ biến Thuật toán:
0. mincount = minsup * |T|;
1. F1 = {các tập phổ biến có độ dài là 1}; 2. for (k=1; Fk≠ ∅; k++ ) do begin
3. Ck+1 = apriori-gen(Fk); //sinh mọi ứng viên độ dài k+1 4. for t∈ D do begin
5. Ct = {c ∈ Ck+1 | c ⊆ t}; //mọi ứng viên chứa trong t 6. for c ∈ Ct do 7. c.count ++; 8. end 9. Fk+1 = {c ∈ Ck+1 | c.count ≥ mincount}; 10. end 11. Answer ∪k Fk;
Thủ tục con apriori-gen có nhiệm vụ sinh ra các tập mục ứng viên có độ dài k+1 từ Fk (các tập phổ biến có độ dài k) được thi hành qua 2 bước chính như sau:
• Bước nối: Sinh các tập mục Rk+1 là ứng viên tập phổ biến có độ dài k+1 bằng cách kết hợp hai tập phổ biến Pk và Qk có độ dài k và trùng nhau ở k-1 mục đầu tiên:
Rk+1 = Pk ∪ Qk = {i1, i2, …, ik-1, ik, ik’ } với
Pk = {i1, i2, …, ik-1, ik} và Qk = {i1, i2, …, ik-1, ik’} Trong đó i1 ≤ i2 ≤ …≤ ik-1 ≤ ik ≤ ik’ .
• Bước tỉa: Giữ lại tất cả các Rk+1 thỏa mãn tính chất Apriori (∀X ⊆ Rk+1
và |X| = k → X ∈ Fk ), nghĩa là đã loại (tỉa) bớt đi mọi ứng viên Rk+1
Trong mỗi bước k, thuật toán Apriori đều phải duyệt CSDL T. Khởi động, duyệt T để có được F1. Các bước k sau đó, duyệt T để tính số lượng giao dịch t thoả mãn từng ứng viên c của Ck+1 (mỗi giao dịch t chỉ xem xét một lần cho mọi ứng viên c)
Kết quả của thuật toán Apriori là tập F = F1 ∪ F2 ∪ … ∪ Fk, trong đó k là số được xác định qua vòng lặp từ 2 đến 10 của thuật toán.
Sau đó, ∀c ∈ F đóng vai trò như X ∪ Y của luật kết hợp X → Y thực hiện việc tách c thành 2 tập mục con rời nhau X và Y (c = X+Y) và tính độ tin cậy conf(X → Y) = supp(c)/supp(X) = c.count/X.count.
Từ khi bài toán phát hiện luật kết hợp được giới thiệu, nhiều thuật toán đã được đề xuất để tìm luật kết hợp trong các CSDL lớn với các thuộc tính nhị phân. Tuy nhiên, luật kết hợp nhị phân hạn chế miền ứng dụng, bởi nó chỉ áp dụng cho thuộc tính nhị phân, trong khi đó dữ liệu thực tế thường chứa dữ liệu số, loại dữ liệu không thể xử lý được trực tiếp bằng thuật toán khai phá nhị phân cổ điển [35].
2.4. Luật kết hợp có thuộc tính số 2.4.1. Luật kết hợp có thuộc tính số 2.4.1. Luật kết hợp có thuộc tính số
Phần trước đã cung cấp tổng quan về luật kết hợp nhị phân, trong đó các mục chỉ có thể được biểu diễn bởi các giá trị Boolean. Trong thực tế, CSDL không chỉ chứa các thuộc tính nhị phân, mà còn chứa các thuộc tính số và hạng mục mà không thể được khai phá bằng các kỹ thuật cổ điển. Phát hiện các luật có loại thuộc tính như vậy được gọi là bài toán luật kết hợp có thuộc tính số. Các miền giá trị của một giao dịch là một tập con các số thực chứ không phải là {0,1}.
Để xử lý dữ liệu số, luật kết hợp có thuộc tính số đã được đề xuất như là một mở rộng của luật kết hợp nhị phân, trong đó các thuộc tính nhị phân có thể được coi là một trường hợp đặc biệt của các thuộc tính hạng mục.
Khai phá luật kết hợp với thuộc tính số và thuộc tính hạng mục (quantitative and categorical association rule) là một trong những hướng tiếp cận quan trọng trong lĩnh vực khai phá luật kết hợp (sẽ được đề cập ở mục 2.5). Dạng luật này được đề xuất nghiên cứu lần đầu tiên trong [27].
Bảng dữ liệu sau đây minh họa một CSDL bao gồm các thuộc tính số (quantitative), và thuộc tính hạng mục (categorical).
Ngày gọi Giờ bắt đầu Thời gian đàm thoại Phương thức gọi(1,0) Loại cước (1,2,3,4,5,6) Cước cuộc gọi 01/07 10:25:48 00:00:47 1(nhân công) 3(Di động) 712 07/07 09:45:31 00:17:06 1 1(Nội hạt) 3436 16/07 15:40:43 00:00:10 0(tự động) 4(DV1080) 636 16/07 15:41:23 00:09:25 1 1 1818 16/07 15:42:25 00:01:36 1 2 1454 23/07 06:52:37 00:02:44 1 1 2485 26/07 07:29:57 00:00:55 1 1 833 28/07 07:08:30 00:03:14 1 3 3527 29/07 06:30:00 00:00:15 0 4 820 30/07 11:42:45 00:01:10 1 1 350 30/07 14:12:48 00:03:25 1 3 3768
Bảng 2.4. CSDL chi tiết của 9 cuộc gọi điện thoại
Trong CSDL trên: Thời gian đàm thoại và Giờ bắt đầu gọi là thuộc tính số, Loại cước là thuộc tính hạng mục. Với CSDL này, chúng ta có thể rút ra một số luật kết hợp sau:
<Giờ bắt đầu: 07:00:00 ..22:59:59 > AND <Thời gian đàm thoại: 00:00:30 .. 00:20:00> AND <Phương thức gọi: Nhân công> → <Loại cước: Nội hạt>, với độ hỗ trợ 55.5% (5/9) và độ tin cậy 83.3% (5/6).
Hướng tiếp cận được đề xuất trong [27] nhằm tìm kiếm luật kết hợp dạng nêu trên bằng cách phân khoảng miền giá trị của các thuộc tính số và thuộc tính hạng mục để chuyển tất cả về thuộc tính nhị phân, sau đó áp dụng các thuật toán điển hình khi phá luật kết hợp nhị phân trước đây.
2.4.2. Các phương pháp rời rạc hóa
Các thuật toán khai phá luật kết hợp nhị phân [23] [28] chỉ có thể áp dụng trên những CSDL quan hệ chỉ có thuộc tính nhị phân hoặc CSDL dạng giao dịch như trong bảng 2.1. Chúng không thể áp dụng trực tiếp với các CSDL có thuộc