2.2.4. Thuật toán Krimp
Một trong những vấn đề lớn trong khai phá mẫu là sự bùng nổ của số lượng kết quả. Ràng buộc chặt chẽ chỉ tiết lộ được các tri thức chung, trong khi các ràng buộc lỏng lẻo dẫn đến sự bùng nổ về số lượng mẫu trả về. Đối với việc khai phá mẫu đã được áp dụng thành công trong nhiều bài toán khác nhau của khai phá dữ liệu. Tuy nhiên, kết quả khai phá vẫn còn một số mặt hạn chế như:
- Vấn đề dư thừa của mẫu đã trích ra. - Mẫu trích ra bị trùng lắp.
- Một số mẫu tối nghĩa.
Và để khắc phục những mặt hạn chế trên, ý tưởng dựa trên nguyên lý mô tả chiều dài tối thiểu (MDL - minimum description length) được đề xuất nhằm khai phá mẫu tuần tự nén đối với cơ sở dữ liệu.
Nguyên tắc MDL bao gồm tập hợp các mẫu tốt nhất - tập hợp được nén cơ sở dữ liệu tốt nhất. Nguyên tắc MDL cung cấp cho chúng ta một cách trực quan để cân bằng sự phức tạp của cơ sở dữ liệu nén và mã hóa.
Mặc dù MDL loại bỏ sự cần thiết cho các tham số do người dùng xác định, nhưng nó có kèm theo vấn đề: chỉ phỏng đoán, không có thuật toán bảo đảm. Tuy nhiên, thử nghiệm của nhóm tác giả Jilles Vreeken- Matthijs van Leeuwen- Arno Siebes hiển thị rằng các phỏng đoán này làm giảm đáng kể số lượng các tập hợp.
33 Bây giờ chúng ta có các thành phần cho phiên bản cơ bản của thuật toán nén[5]:
- Bắt đầu với bảng mã tiêu chuẩn ST;
- Thêm từng giá trị từ tập các ứng viên itemsets F. Với mỗi lần lấy itemset đó là tối đa thứ tự ứng cử viên tiêu chuẩn w.r.t. Chuyển đổi cơ sở dữ liệu bằng cách sử dụng thuật toán Standard Cover Order. Nếu kết quả mã hóa cung cấp kích thước nén nhỏ hơn, hãy giữ lại giá trị đó. Nếu không, loại bỏ nó.
Lược đồ cơ bản này được chính thức hóa như thuật toán Krimp, được đưa ra ở thuật toán Krimp. Dành cho lựa chọn tên: 'krimp' là tiếng Hà Lan để 'thu nhỏ'. Quá trình lựa chọn mẫu Krimp được minh họa trong Hình 2.3.
Krimp lấy làm đầu vào một cơ sở dữ liệu D và một nhóm ứng cử viên F. Kết quả là bảng mã tốt nhất thuật toán đã thấy, w.r.t - Vấn đề đặt mã hóa tối thiểu.
Bây giờ, có vẻ như mỗi lần lặp của Krimp chỉ có thể làm giảm việc sử dụng itemset trong CT. Vì, nếu F1 ∩ F2 = ∅ và F2 được sử dụng trước F1 bằng hàm chuyển đổi mặc định, việc sử dụng F1 sẽ được giảm xuống (miễn là sự hỗ trợ của F2 không bằng 0). Nếu điều này là đúng, nó không phải là toàn bộ câu chuyện. Bởi vì, những gì sẽ xảy ra nếu chúng ta bây giờ thêm một itemset F3, được sử dụng trước F2 sao cho:
F1 ∩ F3 = ∅ và F2 ∩ F3 ≠ ∅
Việc sử dụng F2 sẽ giảm xuống, trong khi việc sử dụng F1 sẽ tăng trở lại; bởi cùng một trọng số. Vì vậy, xem xét điều này, ngay cả với các yếu tố bảng mã không thể loại bỏ việc sử dụng mà không có hiệu quả. Tuy nhiên, vì không được sử dụng trong mã hóa thực tế, chúng không được tính đến trong khi tính tổng kích thước nén cho giải pháp hiện tại.
Cuối cùng, các itemsets với việc sử dụng bằng 0 có thể được loại bỏ một cách an toàn. Sau khi tất cả, họ không viết mã, vì vậy chúng không phải là một phần của câu trả lời tối ưu bao gồm bộ mã hóa nhỏ nhất.
Thuật toán Krimp[5]:
Input: A transaction database D and a candidate set F, both over a set of items I
Output: A heuristic solution to the Minimal Coding Set Problem, code table CT
1) CT ←Standard Code Table(D)
2) Fo ← F in Standard Candidate Order
3) for all F ∈Fo \ I do
4) CTc ← (CT ∪F) in Standard Cover Order
5) if L(D, CTc) < L(D, CT) then
6) CT ← CTc
34 8) end for
9) return CT
Hình 2.3. Mô hình tổng quan thuật toán Krimp [5]
2.2.5. Thuật toán TopKRules
Việc khai phá luật kết hợp dựa trên việc lựa chọn các ngưỡng (độ tin cậy tối thiểu và độ hỗ trợ tối thiểu) có thể trở nên rất chậm và tạo ra số lượng kết quả cực lớn hoặc tạo ra quá ít kết quả, bỏ qua giá trị thông tin. Thuật toán TopKRules đã được đề xuất bởi Philippe Fournier-Viger, Cheng-Wei Wu và Vincent S. Tseng nhằm khắc phục nhược điểm này [19], trong đó k là số luật kết hợp được tìm thấy và là do người sử dụng đặt. Thuật toán sử dụng phương pháp mới để tạo các luật kết hợp có tên là mở rộng luật và bao gồm một số tối ưu hóa[19].
Thuật toán TopKRules lấy đầu vào một cơ sở dữ liệu giao dịch, một số k của các luật mà người dùng muốn khám phá và độ tin cậy tối thiểu minconf .
Ý tưởng chính của thuật toán là như sau. TopKRules đầu tiên đặt một biến
minsup về 0. Sau đó, thuật toán bắt đầu tìm kiếm các luật (rule). Ngay sau khi một luật được tìm thấy, nó được thêm vào danh sách các luật L được sắp xếp bởi độ hỗ trợ (
support). Danh sách được sử dụng để duy trì cho đến khi Top-K rules được tìm thấy. Với mỗi luật hợp lệ k được tìm thấy, giá trị minsup được tăng lên độ minsup của luật bằng giá trị minsup trong L. Nâng giá trị minsup được sử dụng để cắt bớt không gian tìm kiếm khi tìm kiếm các luật khác. Sau đó, mỗi khi một luật hợp lệ được tìm thấy, luật được chèn vào L, các luật trong L không liên quan minsup nữa sẽ được xóa khỏi L, và minsup được tăng lên giá trị của ít nhất luật thú vị trong L. Thuật toán tiếp tục tìm kiếm các luật khác cho đến khi không có luật nào được tìm thấy, có nghĩa là nó đã tìm thấy các top-k rules.
35 Để tìm kiếm các luật, TopKRules không dựa vào phương pháp hai bước cổ điển để tạo ra các luật vì nó sẽ không hiệu quả như một thuật toán Top-K. Chiến lược được sử dụng bởi TopKRules thay vì tạo ra trước luật bao gồm một mục duy nhất cho trước và một mục duy nhất trong kết quả nhận được. Sau đó, mỗi luật được phát triển đệ quy bằng cách thêm các mục vào phía trước hoặc kết quả có được. Để chọn các mục được thêm vào luật để phát triển nó, TopKRules sẽ quét các giao dịch có chứa luật để tìm các mục đơn lẻ có thể mở rộng sang phần bên trái hoặc phần bên phải - đặt tên hai quy trình cho luật mở rộng trong TopKRules left expansion và right expansion. Các quy trình này được áp dụng đệ quy để khám phá tìm kiếm không gian của các luật kết hợp.
Định nghĩa 1: Một luật mở rộng left expansion là quá trình thêm một mục i ∊ I vào bên trái của một luật X → Y để thu được luật lớn hơn X ∪ { i } → Y.
Định nghĩa 2. Một luật mở rộng right expansion là quá trình thêm một mục i ∊ I sang bên phải của luật X → Y để thu được luật lớn hơn X → Y ∪ { i }.
Tính chất:
- Với i là một item. Đối với các luật r : X → Y và r': X ∪ { i } → Y, supp(r) ≥ supp( r' ).
- Với i là một item. Đối với các luật r : X → Y và r': X → Y ∪ { i }, supp( r ) ≥ supp( r' ).
Thuật toán:
TOPKRULES(T, k, minconf) R := Ø. L := Ø. minsup := 0 [19] 1) scan the database T once to record the tidset of each item.
2) for each pairs of items i, j such that |tids(i)| ×|T| ≥ minsup and |tids(j)| ×|T| ≥
minsup:
3) sup({i}→{j}) := |𝑡𝑖𝑑𝑠(i) ∩ 𝑡𝑖𝑑𝑠(j)|
|𝐓|
4) sup({j}→{i}) := |𝑡𝑖𝑑𝑠(i) ∩ 𝑡𝑖𝑑𝑠(j)|
|𝐓|
5) conf({i}→{j}) := |tids(i) ∩ tids(j)| / |tids(i)|. 5) conf ({i}→{j}) := |𝑡𝑖𝑑𝑠(i) ∩ 𝑡𝑖𝑑𝑠(j)|
|𝑡𝑖𝑑𝑠(i)|
6) conf ({j}→{i}) := |𝑡𝑖𝑑𝑠(i) ∩ 𝑡𝑖𝑑𝑠(j)|
|𝑡𝑖𝑑𝑠(j)|
7) if sup({i}→{j}) ≥ minsup then
8) if conf({i}→{j}) ≥ minconf then SAVE({i}→{j}, L, k, minsup). 9) if conf({j}→{i}) ≥ minconf then SAVE({j}→{i}, L, k, minsup). 10) Set flag expandLR of {i}→{j}to true.
36 12) R := R ∪ {{i}→{j}, {j}→{i}}.
13) end if
14) end for
15) while ∃r∈ R AND sup(r) ≥ minsup do
16) Select the rule rule having the highest support in R 17) if rule.expandLR = true then
18) EXPAND-L(rule, L, R, k, minsup, minconf). 19) EXPAND-R(rule, L, R, k, minsup, minconf). 20) else EXPAND-R(rule, L, R, k, minsup, minconf). 21) REMOVE rule from R.
22) REMOVE from R all rules r ∈ R | sup(r) <minsup. 23) end while
Quy trình SAVE : Với vai trò là tăng giá trị minsup và cập nhật vào danh sách
L khi một luật hợp lệ r được tìm thấy. SAVE(r, R, k, minsup)
1) L := L ∪ {r}. 2) if |L| ≥ k then
3) if sup(r) > minsup then
4) WHILE |L| > k AND ∃s∈ L| sup(s) = minsup, REMOVE s from
L.
5) end if
6) Set minsup to the lowest support of rules in L. 7) end if
Thủ tục EXPAND-R
EXPAND-R(I→J, L, R, k, minsup, minconf)
1) for each tid∈tids(I∩J), scan the transaction tid. For each item c ∈ I appearing in transaction tid that is lexically larger than all items in J, record tid in a variable
tids(I→J∪{c}).
2) for each item c where |𝑡𝑖𝑑𝑠(𝐈→𝐉 ∪ {𝑐})|
|𝐓| ≥ minsup : 3) Set flag expandLR of I→J ∪ {c} to false. 4) R := R ∪ {I→J ∪ {c}}.
5) if |𝑡𝑖𝑑𝑠(𝐈→𝐉 ∪ {𝑐})|
|𝑡𝑖𝑑𝑠(I)| ≥ minconf then 6) SAVE(I→J ∪ {c}, L, k, minsup).
7) end if
37 Thủ tục EXPAND-L
EXPAND-L(I→J, L, R, k, minsup, minconf)
1) for each tid∈tids(I ∩ J), scan the transaction tid. For each item c ∈ J appearing in transaction tid that is lexically larger than all items in I, record tid in a variable tids(I∪{c}→J)
2) for each item c where |𝑡𝑖𝑑𝑠 (𝐈∪{𝑐}→𝐉)|
|𝐓| ≥ minsup : 3) Set flag expandLR of I∪{c} → J to true. 4) tids(I ∪ {c})| = tids(I) ∩ tids(c).
5) SAVE(I ∪{c}→ J, L, k, minsup). 6) if |𝑡𝑖𝑑𝑠 (𝐈∪{𝑐}→𝐉)| |𝑡𝑖𝑑𝑠( 𝐈 ∪ {c})| ≥ minconf then R := R ∪ { I ∪ {c} → J} 7) end if 8) end for
38
CHƯƠNG 3: THỬ NGHIỆM PHÁT HIỆN HÀNH VI MUA SẮM CỦA NGƯỜI DÙNG
3.1. Giới thiệu bài toán
Do khó khăn trong việc thu thập dữ liệu bán lẻ để phân tích đặc trưng hành vi của người tiêu dùng nên thực nghiệm ở luận văn lấy dữ liệu hành vi mua sắm của tổ chức với tập dữ liệu: tập phiếu bán hàng trong năm 2016-2017 của Công ty cổ phần Công nghệ PAC ( Cầu Giấy, Hà Nội).
Tập dữ liệu bao gồm hơn 4242 hóa đơn bán hàng của cửa hàng. Mỗi thông tin hóa đơn xuất hàng bao gồm:
- Thông tin người mua: tên công ty, địa điểm công ty.
- Chi tiết mặt hàng: Số thứ tự (STT), Số lượng, mã hàng hóa
Dữ liệu được lưu trữ trong các file excel, với mỗi sheet là 1 hóa đơn bán hàng.