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ố tự nhiên (tức là ánh xạ tập mặt hàng sang tập số tự nhiên - đánh thứ tự các mục dữ liệu từ 1 đến hết). Bảng 3.3 mô tả việc mã hóa các mặt hàng
Bảng 3.3 Mã hóa các mặt hàng
Mã của mặt
hàng Tên mặt hàng
1 Dầu ăn Simply Đậu nành 1 Lít
2 Nước rửa chén, bát Sunlight chanh 800g 3 Nước mắm Chin Su Nam Ngư 750ml
4 Sữa tiệt trùng Vinamilk, công thức ADM+, thùng 48 hộp x 110ml/Vinamilk
5 Bột giặt Omo Comfort 3kg 6 Bánh Choco-Pie Orion 12p 7 Mì chính Ajinomoto 400g 8 Mì Hảo Hảo tôm chua cay 75g 9 Bột canh I – ốt Hải Châu 190g
Tiếp đến, dữ liệu được tiền xử lý đưa về dạng Text, ghi trên tệp data.txt. Mỗi giao tác được mô tả thành một dòng text trong tệp CSDL.TXT như sau: Mã của các mặt hàng là số thứ tự các cột, các mã cách nhau một dấu cách, trên mỗi dòng, ứng với cột mã hàng ghi số lượng hàng bán được hoặc 0 nếu giao tác không có mặt hàng đó. Hình 3.1 là tệp data.txt biểu diễn dữ liệu trong bảng 3.1
Hình 3.1: Dữ liệu đã mã hóa chuẩn bị cho khai phá
Tệp CSDL.TXT biểu diễn dữ liệu đã tiền xử lý, chuẩn bị cho khai phá tập mục lợi ích cao. Kết quả khai phá sẽ được ánh xạ ngược lại để xác định tên các mặt hàng. Đi cùng với tệp CSDL.TXT là tệp Utable.TXT biểu diễn dữ liệu trong bảng 3.2 bảng lợi ích các mặt hàng.
Hình 3.2: Bảng lợi ích
Các số thể hiện trong tệp Utable.TXT là số lợi nhuận ( x1000vnđ/đơn vị) khi bán được của các mặt hàng tại bảng 3.2 bảng lợi ích các mặt hàng.
3.3 Xây dựng chương trình
Chương trình được xây dựng trên cơ sở cài đặt thực nghiệm thuật toán HUI-Mine để tìm tập mục lợi ích cao, có tham khảo mã nguồn mở. Chương trình sử dụng ngôn ngữ Java và cài đặt trên môi trường hệ điều hành Windows 7. Máy tính thực nghiệm có cấu hình tối thiểu như sau:
- Tốc độ CPU: 2.0GHz
- Dung lượng bộ nhớ RAM: 1GB - Không gian trống trên ổ cứng: 1GB
-Đã đặt Java (http://download.oracle.com/otn-pub/java/).
Chương trình được thiết kế giao diện tương đối thân thiện và trực quan đối với người sử dụng. Để khởi động chương trình, nhấp đúp vào biểu tượng SourceDataMining.jar trong thư mục \SourceDataMining\dist của chương trình. Sau khi khởi động, giao diện của chương trình như hình 3.3
Giao diện cho phép người dùng chọn tệp dữ liệu đầu vào (tệp CSDL.txt), chọn tệp giá trị mặt hàng đầu vào (tệp UTable.txt), chọn tệp để ghi dữ liệu đầu ra (output.txt), nhập ngưỡng lợi ích tối thiểu, xuất ra dạng form hoặc hiển thị dạng file.
3.4 Thực nghiệm khai phá tìm tập mục lợi ích cao.
Với CSDL đã được mã hóa hình 3.1 và bảng lợi ích hình 3.2, dữ liệu được xử lý và tính toán. Chọn tệp đầu ra và nhập ngưỡng tối thiểu. Chọn dạng hiển thị và bấm chạy chương trình. Kết quả được hiển thị dưới dạng form hoặc dạng file. Giả sử nhập ngưỡng lợi ích tối thiểu là 500 kêt quả hiện ra như sau:
Hình 3.4: Hiển thị dạng file:
Giải thích các phần kết quả khai phá trong màn hình giao diện hình 3.4 : - Nhóm mặt hàng : là các mặt hàng mang lại lợi nhuận cao. Nếu lấy ánh xạ ngược trở lại ta sẽ được tên các mặt hàng tương ứng.
- UTIL: là giá trị lợi ích của nhóm mặt hàng.
3.5 Ý nghĩa của kết quả thực nghiệm
Từ kho dữ liệu bán hàng của siêu thị Yên Bái với các mặt hàng được mã hóa thành các số tự nhiên. Chương trình tìm ra được nhóm mặt hàng mang lại lợi nhuận cao, từ đó hỗ trợ tốt cho các nhà quản lý siêu thị trong việc tổ chức kinh doanh.
Ví dụ với ngưỡng 500 ở trên, có nghĩa là chương trình sẽ đưa ra các nhóm mặt hàng có lợi nhuận lớn hơn hoặc bằng 500.000VND.
Sau khi ánh xạ ngược ta tìm đc nhóm các mặt hàng mang lại lợi nhuận cao bao theo ngưỡng 500 bao gồm { Sữa tiệt trùng Vinamilk, công thức ADM+, thùng 48hộpx110ml/Vinamilk, Mì Hảo Hảo tôm chua cay 75g, Bột canh I – ốt Hải Châu 190g,Bột giặt Omo Comfort 3kg, Dầu ăn Simply Đậu nành 1 Lít}.
Dựa vào kết quả trên, nhà quản lý kinh doanh có cái nhìn sâu hơn, tổng quát hơn về các mặt hàng được khách hàng lựa chọn để mua cùng nhau. Từ đó đưa ra kế hoạch, chiến lược phát triển tập trung nhiều hơn vào các nhóm mặt hàng đang mang lại lợi nhuận cao và đưa ra các chính sách ưu đãi để mở rộng thêm các nhóm mặt hàng tiềm năng này.
KẾT LUẬN 1. Những kết quả chính của luận văn
Luận văn tập trung vào bài toán tìm tập mục lợi ích cao và tìm hiểu một số thuật toán hiệu quả khai phá tập mục lợi ích cao. Luận văn đã đạt được những kết quả chính là:
- Tìm hiểu tổng quan về khai phá dữ liệu, đi sâu tìm hiểu bài toán khai phá tập mục phổ biến: các khái niệm, hai thuật toán điển hình Apriori và FP- Growth.
- Tìm hiểu một mở rộng của bài toán khai phá tập mục phổ biến là khai phá tập mục lợi ích cao: các khái niệm, phát biểu bài toán. Luận văn đi sâu tìm hiểu hai thuật toán điển hình theo hai cách tiếp cận khác nhau là thuật toán Hai pha (Two - Phase) và thuật toán HUI-Minner.
Thuật toán Hai pha thực hiện khai phá theo cách giống như thuật toán Apriori, đó là sinh ra các tập mục ứng viên rồi duyệt cơ sở dữ liệu để kiểm tra lợi ích theo giao tác của nó. Sau khi tìm được tập các tập mục lợi ích cao theo giao tác, thuật toán duyệt lại cơ sở dữ liệu 1 lần để xác định các tập mục lợi ích cao trong tập này.
Thuật toán HUI-Minner có nhiều ưu điểm hơn, khắc phục được những hạn chế của thuật toán Hai pha. Thuật toán sử dụng cấu trúc dữ liệu mới lấy tên là utility-list, xây dựng cấu trúc utility-list từ cơ sở dữ liệu với 2 lần duyệt, sau đó khai phá tập mục lợi ích cao từ các utility-list này.
- Xây dựng chương trình thực nghiệm dùng thuật toán HUI-Minner để tìm nhóm các mặt hàng mang lại lợi nhuận cao từ dữ liệu bán hàng của siêu thị.
2. Hướng nghiên cứu tiếp theo
Một số hướng phát triển của luận văn như là:
- Tiếp tục nghiên cứu sâu hơn các thuật toán khai phá tập mục lợi ích cao như FHM, FHM+…là các thuật toán cải tiến, mở rộng của thuật toán HUI- Minner.
- Tìm hiểu các phương pháp khai phá tập mục lợi ích cao trên cở sở dữ liệu gia tăng.
TÀI LIỆU THAM KHẢO
Tiếng Việt
[1] Vũ Đức Thi, Nguyễn Huy Đức (2008), “Thuật toán hiệu quả khai phá tập mục lợi ích cao trên cấu trúc dữ liệu cây”, Tạp chí Tin học và Điều khiển học, 24(3), tr. 204-216.
[2] Nguyễn Huy Đức (2009), “Khai phá tập mục cổ phần cao và lợi ích cao trong cơ sở dữ liệu”. Luận án tiến sĩ toán học, Viện Công nghệ Thông tin, Hà Nội 2009.
Tiếng Anh
[3] Agrawal R, Imielinski T, and Swami A.N (1993), “Mining association rules between sets of items in large databases”. In Proceedings of