Mục dữ liệu Lợi nhuận ($/đơn vị) A 3 B 5 C 1 D 3 E 5 Bảng 18. Bảng lợi ích các mục dữ liệu
Giá trị khách quan của mục B tại giao tác T02 là o(B,T02) = 12, giá trị chủ
quan của B là s(B) = 5
Lợi ích của mục dữ liệu trong giao tác được đánh giá thông qua hàm 2 biến
Định nghĩa 2.10: Ký hiệu x là giá trị khách quan, y là giá trị chủ quan của mục dữ liệu. Một hàm 2 biến f(x,y): R×RR, đơn điệu tăng theo x và theo y,
được gọi là hàm lợi ích
Thông thường hàm lợi ích được xác định như sau: f(x,y) = x×y
Định nghĩa 2.11: Cho hàm lợi ích f(x,y). Lợi ích của mục ip tại thao tác T, ký hiệu u(ip,Tq) là giá trị của hàm f(x,y) tại o(ip,Tq) và s(ip), tức là u(ip,Tq) = f(o(ip,Tq), s(ip)).
Định nghĩa 2.12: Cho tập mục X chứa trong giao tác Tq. Lợi ích của tập mục X tại giao tác Tq, ký hiệu u(X,Tq), là tổng lợi ích của tất cả các mục ip thuộc X tại giao tác Tq, tức là u(X, Tq) = ∑ ∈X i q p p T i u( , ) với X ⊆Tq.
Định nghĩa 2.13: Lợi ích của tập mục X trong cơ sở dữ liệu DB, ký hiệu
u(X), là tổng lợi ích của tập mục tại X tại các giao tác thuộc dbx, tức là:
∑ ∑ ∑ ∈ ∈ ∈ = = x q db q x p T T db i X q p q u i T T X u X u( ) ( , ) ( , ).
Ví dụ, trong cơ sở dữ liệu bảng trên u(B,T02) = 12.5 = 60. Xét X = {B, D}, u(X, T02) = u(B, T02) + u(D,T02) = 12.5+2.3=66, có 2 giao tác T02 và T07 chứa tập mục X.
Định nghĩa 2.14: (transaction utility): Lợi ích của giao tác Tq, ký hiệu
tu(Tq), là tổng lợi ích của tất cả các mục dữ liệu trong giao tác. Tức là
∑ ∈ = q p T i q p q u i T T tu ( ) ( , )
Ví dụ, trong cơ sở dữ liệu bảng trên, tu(T02) = 12.5+2.3+1.5=71.
Định nghĩa 2.15: Ngưỡng lợi ích tối thiểu, ký hiệu δ, là phần trăm của tổng lợi ích của toàn bộ cơ sở dữ liệu.
Từ ngưỡng lợi ích tối thiểu δ, có thể tính giá trị lợi ích tối thiểu minutil như
sau: minutil = δ{ tuT@
`|}
Ví dụ, cơ sở dữ liệu bảng trên có tổng lợi ích là 398, nếu δ= 30% thì giá trị
lợi ích tối thiểu là minutil = 30% * 398 = 119,4.
Để tiện trình bày ở các phần sau, luận văn sử dụng các giá trị lợi ích tối thiểu minutil thay cho ngưỡng phần trăm δ.
Định nghĩa 2.16: Cho ngưỡng lợi ích minutil (>0) và xét tập mục X. X
được gọi là tập mục lợi ích cao nếu u(X) ≥ minutil. Trường hợp ngược lại, X
được gọi là tập mục lợi ích thấp.
Định nghĩa 2.17: Cho cơ sở dữ liệu giao tác DB và ràng buộc lợi ích minutil, khai phá tập mục lợi ích cao là tìm tập mục lợi ích HU chứa tất cả các tập mục lợi ích cao, tức là tập HU = {X|X⊆I, u(X) ≥ minutil}
Nhận xét:
- Ràng buộc lợi ích không có tính chất phản đơn điệu, ví dụ trong cơ sở dữ
liệu trên, ta có u(BC) = 62 < 72 = u(BCE), trong khi đó u(BC) = 62 > 0 = u(BCD)
- Có thể coi khai phá tập mục cổ phần cao là trường hợp đặc biệt của khai phá tập mục lợi ích cao khi tất cả các mục dữ liệu đều có giá trị chủ quan bằng 1. Nếu giá trị các mục dữ liệu trong các giao tác là 0 hoặc 1 và tất cả các giá trị
chủ quan bằng 1 thì ta gặp lại mô hình dữ liệu của khai phá tập mục thường xuyên.
- Về mặt ngữ nghĩa, tập mục lợi ích cao khác với tập mục thường xuyên, dù có khai phá trên tập dữ liệu nhị phân với ngưỡng lợi ích minutil bằng ngưỡng
độ hỗ trợ minsup thì kết quả khai phá cũng khác nhau, các tập mục tìm được có ý nghĩa khác nhau. Như vậy, phát triển mở rộng bài toán khai phá tập mục thường xuyên thành bài toán khai phá tập mục cổ phần cao và khai phá tập mục lợi ích cao không đơn thuần là mở rộng dữ liệu mà là thay đổi nhiệm vụ khai phá, khai phá với nhiệm vụ mới và kết quả các tập mục tìm được có các ứng dụng mới.
II.3.2. Khai phá tập mục lợi ích cao
Cho cơ sở dữ liệu giao tác và bảng lợi ích, ngưỡng lợi ích minutil, nếu giá trị ip trong mỗi giao tác được thay thành o(ip, Tq) * s(ip) thì nhiệm vụ khai phá lợi ích cao trở thành khai phá cổ phần cao với min_lmv = minutil.
TID A B C D E T01 0 60 2 0 10 T02 0 60 0 6 5 T03 6 0 1 0 5 T04 3 0 0 6 5 T05 0 0 4 0 10 T06 3 10 0 0 0 T07 0 100 0 6 5 T08 9 0 25 18 5 T09 3 10 0 0 0 T10 0 0 16 0 5
Tính chất toán học của ràng buộc lợi ích. Ký hiệu
- Xk là k-tập mục (tập mục có k mục phân biệt)
- Lk-1 là tập tất cả các tập con có k-1 mục của tập Xk, tức là: Lk-1 = {Xk-1| Xk-1 ⊂ Xk}
Định nghĩa 2.18: Hàm lợi ích không âm là hàm f(x,y): (R,R)R+, ở đó R là tập số thực, R+ là tập số thực không âm
Chú ý: hàm f1(x,y) với miền giá trị [-n,m] với n≥0,m≥0 có thể chuyển đổi thành hàm không âm bằng cách thêm n vào tất cả các giá trị của hàm. Cũng như
vậy hàm không dương f2(x,y) ≤ 0 có thể chuyển đổi thành hàm không âm bằng cách lấy giá trị tuyệt đối của nó. Do vậy kết quả nhận được cho hàm không âm cũng có thể áp dụng cho các hàm f1 và f2
Định lý 2.4: (cận trên của lợi ích). Cho k-tập mục với Xk, u(Xk) là lợi ích của Xk tính trên hàm lợi ích không âm. Khi đó
1 ) ( ) u(X 1 1 1 k − ≤ ∑ − − ∈ − k X u k k L X k
Định lý này là một tính chất quan trọng của ràng buộc lợi ích, nó cho biết lợi ích của k-tập mục Xkđược giới hạn bởi lợi ích của tất cả các tập mục con có (k-1) mục của nó.
Các thuật toán khai phá tập mục lợi ích cao như Umining, UminingH sử
dụng tính chất trên để tỉa các tập ứng viên.
Y. Liu đưa ra khái niệm lợi ích của một tập mục tính theo lợi ích của các giao tác chứa nó, gọi là lợi ích TWU.
Định nghĩa 2.19: (Transaction Weighted Utility - TWU) Lợi ích TWU của tập mục X, ký hiệu twu(X), là tổng lợi ích của tất cả các giao tác chứa X trong cơ sở dữ liệu, tức là
~() = ()
∈∧ ⊆
Nhận xét:
Vì u(X,Tq) ≤ tu(Tq) nên u(X) ≤ twu(X). Có thể coi twu(X) như là cận trên của u(X). Với ngưỡng lợi ích minutil, nếu X là tập mục lợi ích cao thì X cũng là tập mục lợi ích TWU cao. Ngược lại nếu X là tập mục lợi ích TWU thấp thì X cũng là tập mục lợi ích thấp.
Trong [6] Y. Liu đã chứng minh:
- Ràng buộc lợi ích TWU có tính chất phản đơn điệu, tức là: Mọi tập mục cha của tập mục lợi ích TWU thấp cũng là tập mục lợi ích thấp. Do vậy, nếu X là tập mục mục lợi ích TWU thấp, twu(X) < minutil, thì tập X và mọi tập cha của X đều là tập mục lợi ích thấp và có thể loại bỏ chúng trong quá trình khai phá tập mục lợi ích cao.
- Tập các tập mục lợi ích cao chứa trong tập các tập mục lợi ích TWU cao.
Điều này có nghĩa là, nếu ta tìm được tập các tập mục lợi ích TWU cao thì ta chỉ cần tìm các tập mục lợi ích cao trong tập đó.
Do tập mục lợi ích TWU cao có tính chất phản đơn điệu nên có thể sử
dụng các phương pháp khai phá của tập mục thường xuyên để tìm các tập mục lợi ích cao. Tác giả sử dụng ý tưởng của thuật toán FSM để khai phá tập mục lợi ích cao với tính chất phản đơn điệu của tập mục lợi ích TWU cao.
Thuật toán FSM đã được trình bày ở phần trước, dưới đây là một dạng của thuật toán FSM thay vì sử dụng hàm tới hạn CF(X) để tỉa các tập ứng viên thì thuật toán này sử dụng tính chất tập mục lợi ích TWU thấp để tỉa các tập ứng viên.
II.3.3. Thuật toán khai phá tập mục lợi ích cao
Dựa trên ý tưởng của thuật toán FSM, thay phương pháp tỉa các ứng viên không thỏa mãn điều kiện ta có thuật toán khai pháp tập mục lợi ích cao. Hàm Apriori-join dùng để sinh tập ứng viên Ck dựa trên tập mục Lk-1
Apriori-join
(1) For (each (k-1)-tập mục l1∈ Lk-1
(2) For(each(k-1)-tập mục l2∈ Lk-1) do
(3) if(l1[1] = l2[1] and l1[2] = l2[2] and … and l1[k-2] = l2[k-2] and l1[k-1] < l2[k-1]) then
(4) Ck ← { l1[1], l1[2], …, l1[k-2], l1[k-1], l2[k-1]}; //Kết nạp k-tập mục mới vào Ck
II.3.4. Mô tả thuật toán
k:=1, F1:=∅, C1:=I;
for each T ∈ DB //duyệt cơ sở dữ liệu DB
tính giá trị u((ip) và twu(ip) của các mục ip trong C1; for each ip∈C1
if u(ip) ≥ min_util then HS1:=HS1∪{ip}
else if twu(ip)<min_util then C1:=C1\{ip};
RC1:=C1; repeat
Begin
For each Xp, Xq∈RCk-1
Ck:=Apriori_join(Xp, Xq);
For each T∈DB // duyệt Cơ sở dữ liệu DB
Tính giá trị của u(X) và twu(X) của các ứng viên X trong Ck; For each X∈Ck If u(X)≥min_util HSk:= HSk∪ {X} Else if twu(X)<min_util Ck:= Ck-{X}; RCk:=Ck; End Until Ck=∅; Return HS= ∪HSk;
Dựa trên thuật toán FSM khai phá các tập mục cổ phần cao. Thuật toán FSM sử dụng hàm tới hạn CF(X) để tỉa bớt các tập ứng viên có ngưỡng cổ phần thấp hơn minShare cho trước thì thuật toán này sử dụng hàm twu(X) để tỉa bớt các tập ứng viên có lợi ích thấp hơn lợi ích minuitl cho trước.
Ngoài ra có rất nhiều thuật toán khai phá tập mục lợi ích cao hiệu quả hơn bằng thuật toán này sử dụng phương pháp khai phá dữ liệu dựa trên thuật toán FP-Growth đã được trình bày ở Chương I.
III.CÀI ĐẶT ỨNG DỤNG THỬ NGHIỆM KHAI PHÁ TẬP MỤC LỢI ÍCH CAO PHÁ TẬP MỤC LỢI ÍCH CAO
Kết quả thực hiện thuật toán khai phá tập mục lợi ích cao sử dụng thuật toán trình bày trong mục khai phá tập mục lợi ích cao dựa trên ý tưởng của thuật toán FSM. Thuật toán được cài đặt bằng Visual Studio 2008, ngôn ngữ cài đặt là C#. Kết quả được thực hiện trên máy có cấu hình Pentium Core 2 Duo E7500, 2GB DDR3 SDRAM, hệ điều hành Windows 7. Dữ liệu chạy chương trình được sinh ngẫu nhiên với số lượng bản ghi và số lượng mục dữ liệu tùy ý. Dữ liệu được lưu trong file Excel nằm trong thư mục Database của chương trình.
Một số kết quả giao diện chạy chương trình
File Excel chứa dữ liệu gồm 4 sheets có tên tương ứng là HUI, Utility, Profit, twu.
Giao diện 1. Sheet HUI, dữ liệu được sinh bởi chương trình
Giao diện chương trình chính
Giao diện 3. Giao diện chương trình chính
Trong giao diện chương trình chính có nút Generator để sinh dữ liệu vào sheet HUI, nút Run để thực hiện chương trình với dữ liệu đã được sinh vào sheet HUI trong file Excel và ngưỡng lợi ích được nhập.
Giao diện 4. Kết quả thực hiện với ngưỡng lợi ích 30%
Trong phần kết quả, ta nhìn thấy có một giá trịđứng trước ký tự “$”, đó là giá trị minutil được tính theo định nghĩa trong mục khai phá dữ liệu lợi ích cao trong chương II.
Chuỗi ký tự tiếp theo là các tập mục thường xuyên lợi ích cao với ngưỡng lợi ích 30%. Các tập mục này được ngăn cách nhau bởi dấu “,” còn ký tự “-” để
tách các mục dữ liệu trong tập mục.
Với cơ sở dữ liệu giao tác và bảng lợi ích, dựa vào thuật toán khai phá tập mục lợi ích cao như sau:
k = 1;
C1 = {I1, I2, I3, I4, I5}
u(I1) = (11 + 7 + 7 + 7)*3 = 96; u(I2) = (18 + 7 + 8) * 4 = 132; u(I3) = (10 + 18 + 2) * 5 = 150; u(I4) = (2 + 2 + 18) * 1 = 22; u(I5) = (11 + 9 + 6 + 5) * 2 = 62; tu(T0) = 11*3 + 18*4 + 10*5 + 2*1 + 11*2 = 179; tu(T1) = 7*3 + 7*4 + 18*5 + 2*1 + 9*2 = 159;
tu(T2) = 7*3 + 6*2 = 33;
tu(T3) = 7*3 + 8*4 + 2*5 = 63; tu(T4) = 18*1 + 5*2 = 28;
minutil = 30*(179 + 159 + 33 + 63 + 28) / 100 = 138,6
twu(I1) = tu(T0) + tu(T1) + tu(T2) + tu(T3) = 179 + 159 + 33 + 63 = 434 twu(I2) = tu(T0) + tu(T1) + tu(T3) = 179 + 159 + 63 = 401
twu(I3) = tu(T0) + tu(T1) + tu(T3) = 179 + 159 + 63 = 401 twu(I4) = tu(T0) + tu(T1) + tu(T4) = 179 + 159 + 28 = 366
twu(I5) = = tu(T0) + tu(T1) + tu(T3) + tu(T4) = 179 + 159 + 63 + 28 = 399
Vì tất cả các twu(Ip) > minutil nên không loại bỏ mục nào trong Ck
Ta thấy u(I3) = 150 > minutil = 138,6 nên {I3} là 1-tập mục lợi ích cao, còn lại các tập mục I1, I2, I4, I5 có lợi ích < minutil nên không phải là tập mục lợi ích cao.
Xét tiếp với k= 2
Sinh tập ứng viên trong Ck bằng cách dùng thuật toán Apriori_join để nối 2 tập mục Lk-1 với nhau khi có k-2 tập mục đầu tiên bằng nhau, ta được
C2 = {I1-I2, I1-I3, I1-I4, I1-I5, I2-I3, I2-I4, I2-I5, I3-I4, I3-I5, I4-I5} u(I1-I2) = (11 + 7 + 7)*3 + (18 + 7 + 8)*4 = 207
u(I1-I3) = (11 + 7 + 7)*3 + (10 + 18 + 2)*5 = 225
u(I1-I4) = (11 + 7)*3 + (2 + 2)*1 = 58
u(I1-I5) = (11 + 7 + 7)*3 + (11 + 9 + 6)*2 = 127 u(I2-I3) = (18 + 7 + 8)*4 + (10 + 18 + 2)*5 = 282
u(I2-I4) = (18 + 7)*4 + (2 + 2)*1 = 104
u(I2-I5) = (18 + 7)*4 + (11 + 9)*2 = 140 u(I3-I4) = (10 + 18)*5 + (2 + 2)*1 = 144 u(I3-I5) = (10 + 18)*5 + (11 + 9)*2 = 180
u(I4-I5) = (2 + 2)*1 + (11 + 9)*2 = 44 twu(I1-I2) = tu(T0) + tu(T1) + tu(T3) = 401
twu(I1-I3) = tu(T0) + tu(T1) + tu(T3) = 401 twu(I1-I4) = tu(T0) + tu(T1) = 338
twu(I1-I5) = tu(T0) + tu(T1) + tu(T3) = 401
twu(I2-I3) = tu(T0) + tu(T1) + tu(T3) = 401 twu(I2-I4) = tu(T0) + tu(T1) = 338
twu(I2-I5) = tu(T0) + tu(T1) = 338 twu(I3-I4) = tu(T0) + tu(T1) = 338 twu(I3-I5) = tu(T0) + tu(T1) = 338
twu(I4-I5) = tu(T0) + tu(T1) + u(T4) = 361
Trong tất cả 2-tập mục thuộc C2 không có tập mục nào có twu(X) < minutil nên ta không tỉa tập ứng viên nào.
Các tập mục {I1-I2}, {I1-I3}, {I2-I3}, {I2-I5}, {I3-I4}, {I3-I5} có u(X) > minutil nên các 2-tập mục này là tập mục lợi ích cao.
k=3
C3 = {I1-I2-I3, I1-I2-I4, I1-I2-I5, I1-I3-I4, I1-I3-I5, I1-I4-I5, I2-I3-I4, I2- I3-I5, I3-I4-I5}
u(I1-I2-I3) = (11 + 7 + 7)*3 + (18 + 7 + 8)*4 + (10 + 18 + 2)*5 = 357 u(I1-I2-I4) = (11 + 7)*3 + (18 + 7)*4 + (2 + 2)*1 = 158 u(I1-I2-I5) = (11 + 7)*3 + (18 + 7)*4 + (11 + 9)*2 = 194 u(I1-I3-I4) = (11 + 7)*3 + (10 + 18)*5 + (2 + 2)*1 = 198 u(I1-I3-I5) = (11 + 7)*3 + (10 + 18)*5 + (11 + 9)*2 = 234 u(I1-I4-I5) = (11 + 7)*3 + (2 + 2)*1 + (11 + 9)*2 = 98 u(I2-I3-I4) = (18 + 7)*4 + (10 + 18)*5 + (2 + 2)*1 = 244 u(I2-I3-I5) = (18 + 7)*4 + (10 + 18)*5 + (11 + 9)*2 = 280 u(I3-I4-I5) = (10 + 18)*5 + (2 + 2)*1 + (11 + 9)*2 = 184
twu(I1-I2-I3) = tu(T0) + tu(T1) + tu(T3) = 401 twu(I1-I2-I4) = tu(T0) + tu(T1) = 338
twu(I1-I2-I5) = tu(T0) + tu(T1) = 338 twu(I1-I3-I4) = tu(T0) + tu(T1) = 338 twu(I1-I3-I5) = tu(T0) + tu(T1) = 338
twu(I1-I4-I5) = tu(T0) + tu(T1) = 338 twu(I2-I3-I4) = tu(T0) + tu(T1) = 338
twu(I2-I3-I5) = tu(T0) + tu(T1) = 338 twu(I3-I4-I5) = tu(T0) + tu(T1) = 338
Các tập mục trong C3 đều có twu(X) > minutil = 138,6 nên không loại bỏ
Các tập mục trong C3 chỉ có tập mục {I1-I4-I5} có u(X) = 98 < minutil = 138,6 nên tập {I1-I4-I5} không phải là tập mục lợi ích cao. Ngoài ra tất cả các tập mục còn lại trong C3đều là tập mục lợi ích cao.
k=4
C4 = {I1-I2-I3-I4, I1-I2-I3-I5, I1-I2-I4-I5, I1-I3-I4-I5, I2-I3-I4-I5}
u(I1-I2-I3-I4) = (11 + 7)*3 + (18 + 7)*4 + (10 + 18)*5 + (2 + 2)*1 = 298
u(I1-I2-I3-I5) = (11 + 7)*3 + (18 + 7)*4 + (10 + 18)*5 + (11 + 9)*2 = 334 u(I1-I3-I4-I5) = (11 + 7)*3 + (10 + 18)*5 + (2 + 2)*1 + (11 + 9)*2 = 238 u(I2-I3-I4-I5) = (18 + 7)*4 + (10 + 18)*5 + (2 + 2)*1 + (11 + 9)*2 = 288
twu(I1-I2-I3-I4) = tu(T0) + tu(T1) = 338 twu(I1-I2-I3-I5) = tu(T0) + tu(T1) = 338
twu(I1-I3-I4-I5) = tu(T0) + tu(T1) = 338 twu(I2-I3-I4-I5) = tu(T0) + tu(T1) = 338
Tất cả các 4-tập mục trong C4 đều có twu(X) > minutil nên không có tập mục nào bị tỉa.
Tất cả các 4-tập mục trong C4đều có u(X) > minutil nên đều là tập mục lợi ích cao.
k = 5
C5 = {I1-I2-I3-I4-I5} u(I1-I2-I3-I4-I5) =
(11+7)*3 + (18 + 7)*4 + (10 + 18)*5 + (2 + 2)*1 + (11 + 9)*2 = 342 twu(I1-I2-I3-I4-I5) = tu(T0) + tu(T1) = 338
k = 6
C6 = ∅ thuật toán dừng.
Kết hợp tất cả các tập mục lợi ích cao lại ta có kết quả đạt được
High Utility Frequent ItemSets = {I3} ∪ {I1,I2} ∪ {I1,I3} ∪ {I2,I3} ∪
{I2,I5} ∪ {I3,I4} ∪ {I3,I5} ∪ {I1,I2,I3} ∪ {I1,I2,I4} ∪ {I1,I2,I5} ∪ {I1,I3,I4}
∪ {I1,I3,I5} ∪ {I2,I3,I4} ∪ {I2,I3,I5} ∪ {I3,I4,I5} ∪ {I1,I2,I3,I4} ∪
{I1,I2,I3,I5} ∪ {I1,I2,I4,I5} ∪ {I1,I3,I4,I5} ∪ {I2,I3,I4,I5} ∪ {I1,I2,I3,I4,I5}
Nhìn vào giao diện 4. Kết quả trong hiển thị trong TextBox hoàn toàn trùng khớp với dữ liệu đã cho.
Do thời gian có hạn nên tác giả chưa cài đặt được thuật toán khai pháp tập mục thường xuyên cổ phần cao và thuật toán khai phá tập mục thường xuyên. Trong luận văn này mới chỉ chương trình ứng dụng được cài đặt bằng thuật toán chưa hiệu quả bằng các thuật toán áp dụng cấu trúc cây COFI-tree đã trình bày trong chương I. Tác giả hy vọng thời gian sau này có thể nghiên cứu để cải tiến các thuật toán khai phá tập mục thường xuyên hiệu quả hơn.