2.3.1. Giới thiệu thuật toán
HUI-Miner là thuật toán khai phá tập mục lợi ích cao trong một cơ sở dữ liệu giao tác được đề xuất bởi nhóm tác giả Mengchi Liu và Junfeng Qu và năm 2012 [8].
Thuật toán HUI-Miner là một trong những thuật toán hiệu quả cho khai phá tập mục lợi ích cao. Một số đóng góp của thuật toán này là:
- Thuật toán đề xuất cấu trúc dữ liệu mới lấy tên là utility-list, lưu tập mục và thông tin về lợi ích của tập mục đó.
- Thuật toán HUI-Miner không sinh ra nhiều các tập ứng viên, xây dựng cấu trúc utility-list từ một cơ sở dữ liệu sau đó khai phá tập mục lợi ích cao từ
utility-list này.
2.3.2 Cấu trúc của utility-list 2.3.2.1 Khởi tạo utility-list 2.3.2.1 Khởi tạo utility-list
Trong thuật toán HUI-Miner, mỗi tập mục có một utility-list. Chức năng của các utility-list là lưu giữ các thông tin hữu ích về một cơ sở dữ liệu được xây dựng bởi hai lần duyệt cơ sở dữ liệu.
Đầu tiên, duyệt CSDL để tính lợi ích theo giao tác (TWU) của các mục dữ liệu. Nếu lợi ích theo giao tác của mục nào nhỏ hơn ngưỡng minutil cho
trước thì mục đó sẽ bị loại trong quá trình khai phá sau này. Đối với các mục dữ liệu có lợi ích theo giao tác lớn hơn ngưỡng minutil cho trước, nó sẽ được sắp xếp theo thứ tự lợi ích theo giao tác tăng dần.
Bảng 2.3: Bảng giao tác
Tid Transaction Count
T1 {b,c,d,g} {1,2,1,1} T2 {a,b,c,d,e} {4,1,3,1,1} T3 {a,c,d} {4,2,1} T4 {c,e,f} {2,1,1} T5 {a,b,d,e} {5,2,1,2} T6 {a,b,c,f} {3,4,1,2} T7 {d,g} {1,5} Bảng 2.4: Bảng lợi ích Item a b c d e f g Utility 1 2 1 5 4 3 1
Ta tính được lợi ích theo giao tác của các mục dữ liệu là:
Itemset {a} {b} {c} {d} {e} {f} {g}
Twu 69 68 66 71 49 27 10
Với ngưỡng cho trước là 30 thì các mục f và g sẽ bị loại bỏ. Các mục còn lại sẽ được sắp xếp lại theo thứ tự lợi ích theo giao tác tăng dần là:
e <c <b <a <d.
Định nghĩa 2.11: Giao tác được sửa đổi là giao tác có tính chất sau:
+ Tất cả các mục có lợi ích theo giao tác nhỏ hơn một ngưỡng minutil
cho trước đã bị xóa khỏi giao tác.
+ Các mục còn lại được sắp xếp tăng dần theo lợi ích theo giao tác của nó.
Cơ sở dữ liệu trong bảng 2.5 liệt kê các giao tác đã sửa đổi có nguồn gốc từ cơ sở dữ liệu trong bảng 2.3.
Bảng 2.5 Dữ liệu sau khi duyệt CSDL
Tid Item Util. Item Util. item Util. item Util. item Util. TU
T1 c 2 b 2 d 5 9 T2 e 4 c 3 b 2 a 4 d 5 18 T3 c 2 a 4 d 5 11 T4 e 4 c 2 6 T5 e 8 b 4 a 5 d 5 22 T6 c 1 b 8 a 3 12 T7 d 5 5
Từ đây ta có qui ước: Một giao tác được coi là đã sửa đổi thì tất cả các mục trong tập phổ biến đều được sắp xếp thứ tự tăng dần theo lợi ích theo giao tác.
Định nghĩa 2.12: Cho một tập mục X và một giao T với X ⊆ T, tập hợp tất cả các mục dữ liệu sau X trong T được ký hiệu là T/X.
Ví dụ: trong bảng 2.5: T2/{eb}={ad}và T2/{c} = {bad}.
Định nghĩa 2.13: Lợi ích còn lại của tập mục X trong giao tác T ký hiệu là
ru(X,T), là tổng tất cả các lợi ích của các mục trong T/X trong T, khi đó: ru(X, T)=∑i∈ (T/X)u(i,T).
Mỗi phần tử trong utility-list của tập mục X chứa 3 trường: tid, iutil và
rutil.
- Trường tid : cho biết giao tác T chứa X
- Trường iutil : là lợi ích của X trong T, tức là u(X,T)
Hình 2.2: utility-list ban đầu
Duyệt cơ sở dữ liệu lần 2, thuật toán khởi tạo utility-list như hình 2.2 Ví dụ: Xét utility-list của tập mục c.
Trong T1, u({c},T1)= 2, ru({c},T1) = u(b,T1) + u(d,T1) = 2+5 = 7
Trong T2, u({c},T2)=3, ru({c},T2)=u(b,T2)+u(a,T2)+u(d,T2)=2+4+5=11
2.3.2.2 Utility-list của 2-tập mục
Không cần phải duyệt lại cơ sở dữ liệu, utility-list của 2-tập mục {x,y} được xây dựng bởi giao của utility-list của {x} và của {y}. Thuật toán xác định các giao tác chung bằng cách so sánh trường tid trong hai utility-lits.
Ví dụ, so sánh các giao tác trong utility-lits của {e} và của {c} trong hình 2.2 được thể hiện trong hình 2.3 (a).
Hình 2.3: Utility-list của 2- tập mục
Đối với mỗi giao tác T chung, thuật toán sẽ tạo ra một phần tử E và thêm nó vào utility-list {x,y}. Trường tid của E là tid của T, trường iutil của E là tổng của iutil kết hợp với T trong utility-list của {x} và {y}.
Giả sử x là trước y thì rutil của E là rutil kết hợp với T trong utility-list {y}.
Hình 2.3(b) mô tả utility-list 2-tập mục của các tập mục với tập {e} là tiền tố.
Ví dụ: để xây dựng utility-list của tập {eb}, thuật toán lấy giao các utility- list của {e} là: {<2, 4, 14>, <4, 4, 2>, <5, 8 14>} và của {b} là:
{<1, 2, 5>, <2, 2, 9>, <5, 4, 10>, <6, 8, 3>}, kết quả là: {<2, 6, 9>, <5, 12, 10>}.
Ta có thể quan sát từ trong cơ sở dữ liệu bảng 2.5, tập {eb} chỉ xuất hiện trong giao tác T2 và T5. Trong T2, u({eb},T2)= u(e,T2)+u(b,T2)= 2+4= 6, và ru({eb},T2)= u(a,T2)+u(d,T2)= 4+5= 9. Tương tự như vậy, trong T5, lợi ích của
{eb} là 8 + 4 = 12, và lợi ích còn lại của {eb} là 5 + 5 = 10.
2.3.2.3 Utility-list của k-tập mục (k ≥ 3)
Để xây dựng utility-list của k-tập mục {i1… i(k-1) ik} với k ≥ 3, chúng ta có thể lấy giao utility-list {i1 ... i(k-2) i(k-1)} với utility-list {i1 ... i(k-2) ik} như chúng ta đã xây dựng các utility-list của 2-tập mục.
Ví dụ: để xây dựng các utility-list {eba}, chúng ta lấy giao nhau utility-
list của {eb} và utility-list của {ea} trong hình 2.3(b). Kết quả utility-list được
mô tả trong hình 2.4(a). Tuy nhiên lợi ích của các tập mục trong T2 và T5 là 10 và 17 chứ không phải là 14 và 25.
a) Kết quả lấy giao trực tiếp b) Các utility-list đúng Hình 2.4: Utility-list của 3-tập mục
Thuật toán xây dựng cấu trúc utility-list
Algorithm 1:Construct Algorithm
Input: P. UL, the utility-list of itemset P; Px.UL, the utility-list of itemset Px ; Py. UL, the utility-list of itemset Py.
Output: Pxy. UL, the utility-list of itemset Pxy.
1.Pxy. UL = NULL;
2.foreach element Ex G Px. ULdo
3. ifEyGPy.UL and Ex.tid==Ey.tidthen 4. ifP.UL is not empty then
5. search such element EP.ULthat E.tid==Ex.tid ;
6. Exy=<Ex.tid,Ex.iutil + Ey.iuti -E.iutil, Ey.rutil >;
7. else
8. Exy=<Ex.tid, Ex.iutil + Ey.iutil, Ey.rutil>;
9. end
10. append Exy to Pxy.UL;
11. end 12.end
Lý do của việc tính toán sai lợi ích của tập mục {eba}(Hình 2.4(a)) trong T2 là do tổng lợi ích {eb} và {ea} trong T2 đều chứa lợi ích của {e}(lợi ích của {e} được cộng 2 lần). Do đó để tính toán các lợi ích của { i1 ... i(k-2)i(k-1) ik} trong T ta dùng công thức:
u({i1...i(k-2)i(k -1)ik},T)= u({i1...i(k-2)i(k-1)},T) + u({i1...i(k-2)ik},T) - u({i1...i(k-2)},T).
2.3.3 Khai phá tập mục lợi ích cao 2.3.3.1 Không gian tìm kiếm 2.3.3.1 Không gian tìm kiếm
Cho một tập các mục I = {i1, i2, i3, ..., in} giả sử i1<i2<... <in, một cây liệt kê biểu diễn cho tất cả các tập mục được xây dựng như sau:
Bước 1, tạo ra gốc.
Bước 2, tạo ra n nút con của nút gốc biểu diễn cho n 1-tập mục tương ứng;
Bước 3, đối với một nút biểu diễn cho tập mục {is ... ie} với 1 ≤ s ≤ e ≤ <n, tạo ra (n - e) nút con biểu diễn cho các tập mục:
{is ... iei(e + 1)}, {is ... iei(e + 2)}, ..., {is ... iein}.
Bước thứ ba là thực hiện lặp lại cho đến khi tất cả các nút lá được tạo ra. Ví dụ, cho I = {e, c, b, a, d} và e <c <b <a <d, một cây liệt kê cho tất cả các tập mục của I được mô tả trong hình 2.5.
Định nghĩa 2.14. Cho một cây liệt kê, một tập mục biểu diễn bởi một nút được
gọi là phần mở rộng của tập mục biểu diễn bởi nút gốc của nút đó. Đối với một tập mục có chứa k mục, mở rộng của nó có chứa (k + i) mục được gọi là i- mở rộng của tập mục này.
Tính chất: Nếu X' là một mở rộng của X thì (X'-X) = (X' / X).
Điều này là hiển nhiên vì bất kỳ mở rộng nào của X cũng là một sự kết hợp của X với các mục dữ liệu đứng sau X.
d
e c b a
ec eb ea ed cb ca cd ba bd ad
ecb eca ecd eba ebd ead cba cbd cad bad
ecba ecbd ecad ebad cbad
ecbad
0
Item order: e<c<b<a<d
Ví dụ, trong hình 2.5, tập mục {eba} và {ebd} là 1-mở rộng của {eb}, và {ebad} là 2- mở rộng của {eb}. Bắt đầu từ gốc của một cây liệt kê, cho một tập mục, HUI-Miner kiểm tra đầu tiên tất cả 1- mở rộng của nó bằng cách xây dựng các utility-list của chúng. Sau khi xác định và xuất các tập mục lợi ích cao từ các mở rộng, HUI- Miner xử lý tiếp theo cách đệ quy các mở rộng.
2.3.3.2 Chiến lược tỉa
Bổ đề 2.1: Cho utility-list của tập mục X, nếu tổng của tất cả các iutils và rutils
trong utility-list nhỏ hơn ngưỡng minutil cho trước, thì bất kỳ mở rộng X' nào của X cũng không phải là tập mục lợi ích cao.
Chứng minh: Cho giao tác t, t ⊇ X’.
X’ là mở rộng của X nên : (X’ - X) = (X’/X) X⊂X’⊆ t => (X’/X) ⊆ (t/X)
u(X’,t) = u(X,t) + u((X’ - X),t) = u(X,t) + u((X’/X,t)) = u(X,t) + ∑𝑖∈(𝑋′/𝑋)𝑢(𝑖, 𝑡)
≤ u(X,t) + ∑𝑖∈(𝑡/𝑋)𝑢(𝑖, 𝑡) = u(X,t) + ru(X,t);
Giả sử id(t) biểu diễn tid của giao tác t, X.tids biểu diễn tập tid trong utility-list của X, và X'.tids biểu diễn tập tid trong utility-list của X ', khi đó:
X⊂X’ => X’.tids ⊆ X.tids
u(X’) = ∑𝑖𝑑(𝑡)∈𝑋′.𝑡𝑖𝑑𝑠𝑢(𝑋′, 𝑡)
≤ ∑𝑖𝑑(𝑡)∈𝑋′.𝑡𝑖𝑑𝑠(𝑢(𝑋, 𝑡) + 𝑟𝑢(𝑋, 𝑡))
≤ ∑𝑖𝑑(𝑡)∈𝑋.𝑡𝑖𝑑𝑠(𝑢(𝑋, 𝑡) + 𝑟𝑢(𝑋, 𝑡))
< minutil.
Ví dụ: hãy xem xét các utility-list trong hình 2.3(b), {ec} được tỉa vì tổng của tất cả các iutils và rutils trong utility-list của nó là 24 nhỏ hơn minutil cho trước
là 30. Vì vậy, không cần phải kiểm tra các mở rộng của tập mục{ec} (có tất cả 7 mở rộng của { ec }, xem hình 2.5).
2.3.3.3 Thuật toán HUI-Miner Algorithm 2: HUI-Miner Algorithm
Input: P.UL, tập utility-list của tập mục P;
ULs, tập utility-list của P’ 1-mở rộng; Minutil ngưỡng lợi ích tối thiểu.
Output: Tập mục lợi ích cao với P là tiền tố 1 foreach utility-list X in ULs do
2 if SUM(X.iutils) ≥ minutil then
3 output the extension associated with X;
4 end
5 if SUM(X.iutils)+SUM(X.rutils)≥minutil then
6 exULs = NULL;
7 foreach utility-list Y after X in ULs do
8 exULs = exULs+Construct(P.UL, X, Y );
9 end
10 HUI-Miner(X, exULs, minutil);
11 end
12 end
Tổng lợi ích và lợi ích còn lại của một tập mục trong utility-list được tính bằng cách duyệt các utility-list. Để tránh duyệt utility-list nhiều lần, trong quá trình xây dựng một utility-list, HUI-Minner tích lũy đồng thời iutils và runtils trong utility-list. Các tập mục đại diện cho tất cả các nút con của một nút trong cây liệt kê có tập mục tiền tố giống nhau. Vì vậy, với một 1 mở rộng, phần mở rộng của nó có thể được tách ra từ mục tiền tố của nó. Ví dụ, các utility-list trong hình 2.4(b) được thực hiện như ta thấy trong hình 2.6. Dòng đầu tiên trong
một utility-list các phần mở rộng: tập mục tiền tố và tổng lợi ích, tổng lợi ích còn lại được lưu trữ một cách độc lập.
a 27 10 2 5 10 17 5 5 Hình 2.6: utility-list thực hiện d 28 0 2 5 11 17 0 0 Extended item Sum of iutils Sum of rutils
Chương III:CHƯƠNG TRÌNH THỰC NGHIỆM ỨNG DỤNG 3.1 Bài toán phát hiện nhóm mặt hàng mang lại lợi nhuận cao trên tập dữ liệu bán hàng của siêu thị Yên Bái.
Tại Siêu thị Anh Mỹ, tỉnh Yên Bái, có tổng số hơn 1.000 mặt hàng được bày bán trên hai sàn nhà với diện tích 1500 m2 trên đường Nguyễn Thái Học– TP. Yên Bái – Tỉnh Yên Bái. Hằng ngày số lượt người mua hàng rất nhiều, nhà quản lý Siêu thị sử dụng phần mền Quản lý bán hàng tại quầy giao tác để quản lý các mặt hàng được nhập về, mặt hàng được bán ra hằng ngày, các hoá đơn chứng từ kế toán…
Khách hàng có thể tự do lựa chọn mặt hàng cần mua theo tên hàng hoá, đơn giá đã có in sẵn trên các mặt hàng và đặt vào trong giỏ hàng (xe đẩy). Khi chọn xong hàng hoá, khách hàng đẩy xe đến bộ phận thu ngân. Các hàng hoá được cập nhật vào hệ thống tính toán thông qua máy đọc mã vạch. Các tính toán tổng cộng trên hoá đơn được thực hiện tự động và được lưu vào trong CSDL.
Trên hoá đơn có các thông tin về hàng hoá như: mã hàng, tên hàng, đơn vị tính, số lượng, đơn giá, giá trước thuế VAT, % thuế VAT, tiền thuế VAT, thành tiền đã có thuế VAT,…
Với cách quản lý khách hàng như trên, dữ liệu bán hàng của siêu thị chứa đầy đủ các thông tin cần thiết để có thể tổng kết đánh giá tình hình kinh doanh như: sức mua của khách hàng, các mặt hàng nào bán chạy, doanh số,…Từ đó có thể có các chiến lược kinh doanh cho phù hợp.
Bài toán đặt ra là: Từ dữ liệu bán hàng đã có, tìm ra các mặt hàng được khách hàng mua cùng nhau mang lại lợi nhuận cao (chính là các tập mục lợi ích cao), kết quả tìm được sẽ hỗ trợ giúp cho việc kinh doanh hiệu quả hơn.
3.2 Mô tả dữ liệu
Trong quý I năm 2016, CSDL giao tác của Siêu thị là rất lớn, trên 10.000 giao tác với 800 mặt hàng được bán ra. Để thực nghiệm khai phá tập mục lợi ích cao, dữ liệu thực nghiệm trích chọn 1.000 giao tác với 9 mặt hàng thiết yếu hàng ngày. Bảng 3.1 biểu diễn một phần dữ liệu bán hàng của một ngày trong quý I năm 2016 đã được trích chọn.
Bảng 3.1: Dữ liệu đã trích chọn để khai phá
TID Các mặt hàng trong giao tác
1 Dầu ăn Simply Đậu nành 1 Lít (5); Bánh Choco-Pie Orion 12p (4); Mì Hảo Hảo tôm chua cay 75g (40); Bột canh I – ốt Hải Châu 190g (10);
2 Nước mắm Chin Su Nam Ngư 750ml (10); Mì chính Ajinomoto 400g (5); Sữa tiệt trùng Vinamilk, công thức ADM+, thùng 48 hộp x 110ml/Vinamilk (1); Bột canh I – ốt Hải Châu 190g (20). 3 Nước mắm Chin Su Nam Ngư 750ml (10); Bột canh I – ốt Hải
Châu 190g (10); Bột giặt Omo Comfort 3kg (2).
4 Nước mắm Chin Su Nam Ngư 750ml (10); Sữa tiệt trùng Vinamilk, công thức ADM+, thùng 48 hộp x 110ml/Vinamilk (2); Bánh Choco-Pie Orion 12p (4); Mì Hảo Hảo tôm chua cay 75g (20); Dầu ăn Simply Đậu nành 1 Lít (5); Bột giặt Omo Comfort 3kg (1); Bột canh I – ốt Hải Châu 190g (15).
5 Bột giặt Omo Comfort 3kg (3); Sữa tiệt trùng Vinamilk, công thức ADM+, thùng 48 hộp x 110ml/Vinamilk (2); Mì chính Ajinomoto 400g (4); Nước rửa chén, bát Sunlight chanh 800g (3); Nước mắm Chin Su Nam Ngư 750ml (15); Dầu ăn Simply Đậu nành 1 Lít (10).
6 Nước mắm Chin Su Nam Ngư 750ml (8); Mì Hảo Hảo tôm chua cay 75g (30); Bột canh I – ốt Hải Châu 190g (20); Bột giặt Omo Comfort 3kg (4); Sữa tiệt trùng Vinamilk, công thức ADM+, thùng 48 hộp x 110ml/Vinamilk (4); Dầu ăn Simply Đậu nành 1 Lít (6);
7 Mì Hảo Hảo tôm chua cay 75g (30); Dầu ăn Simply Đậu nành 1 Lít (4); Nước mắm Chin Su Nam Ngư 750ml (20).
8 Nước rửa chén, bát Sunlight chanh 800g (6); Bột giặt Omo
Comfort 3kg (2); Nước mắm Chin Su Nam Ngư 750ml (12); Dầu ăn Simply Đậu nành 1 Lít (3); Bột canh I – ốt Hải Châu 190g (10).
9 Nước mắm Chin Su Nam Ngư 750ml (15); Bột giặt Omo
Comfort 3kg (1); Dầu ăn Simply Đậu nành 1 Lít (5); Bột canh I – ốt Hải Châu 190g (20); Mì Hảo Hảo tôm chua cay 75g (30). 10 Nước mắm Chin Su Nam Ngư 750ml (15); Bột giặt Omo
Comfort 3kg (1); Dầu ăn Simply Đậu nành 1 Lít (5).
Bảng 3.2: Bảng lợi ích các mặt hàng
Tên các mặt hàng
Lợi nhuận ( x1000VNĐ/đơn
vị)
Dầu ăn Simply Đậu nành 1 Lít 5
Nước rửa chén, bát Sunlight chanh 800g 6
Nước mắm Chin Su Nam Ngư 750ml 5
Sữa tiệt trùng Vinamilk, công thức ADM+, thùng 48
hộp x 110ml/Vinamilk 20
Bột giặt Omo Comfort 3kg 15
Mì chính Ajinomoto 400g 4
Mì Hảo Hảo tôm chua cay 75g 5
Bột canh I – ốt Hải Châu 190g 1
Chuyển đổi dữ liệu:
Để chuẩn bị dữ liệu cho khai phá, các mặt hàng được mã hóa bởi tập số