Giới thiệu
Quy tắc liên kết là những câu lệnh if/then được sử dụng để khám phá những mối quan hệ thú vị giữa các dữ liệu dường như không liên quan trong các cơ sở dữ liệu lớn hoặc kho thông tin khác. Chúng được áp dụng rộng rãi trong việc tìm ra sự thường xuyên giữa các sản phẩm được mua tại siêu thị. Ví dụ về một quy tắc liên kết có thể là: "Nếu một khách hàng mua bánh mì, có 70% khả năng họ cũng sẽ mua phô mai."
Vậy, quy tắc là gì?
Quy tắc là một ký hiệu cơ bản thể hiện mặt hàng nào hoặc các mặt hàng nào thường được mua cùng với mặt hàng khác. Một quy tắc liên kết có hai phần: LHS (Phần bên trái) và RHS (Phần bên phải). Cấu trúc của quy tắc là:
itemset A => itemset B hoặc {bánh mì, trứng} => {sữa}.
Điều này có nghĩa là các mặt hàng ở bên phải thường được mua cùng với các mặt hàng ở bên trái. Các quy tắc liên kết được sử dụng trong nhiều hoạt động như:
- Định giá sản phẩm
- Bố trí sản phẩm
- Khai thác dữ liệu sử dụng web
- Phát hiện xâm nhập
- Phân tích giỏ hàng
Làm thế nào để đo lường sức mạnh của một quy tắc?
Khi đã biết quy tắc là gì, câu hỏi tiếp theo là “Làm thế nào để chúng ta đo lường sức mạnh của một quy tắc?”. Ba chỉ số chính để quyết định sức mạnh của một quy tắc là:
- Support (Hỗ trợ): Hỗ trợ được tính bằng cách chia số lượng giao dịch có cả A và B cho tổng số giao dịch.
- Confidence (Độ tin cậy): Độ tin cậy thể hiện khả năng mặt hàng B được mua khi mặt hàng A được mua.
- Lift (Tăng cường): Lift thể hiện khả năng mặt hàng B được mua khi mặt hàng A được mua, đồng thời xem xét độ phổ biến của chúng. Khi lift tăng, khả năng A và B xảy ra cùng nhau cũng tăng.
Thuật toán Apriori
Thuật toán Apriori được sử dụng để tìm các quy tắc mà chúng ta đã thảo luận ở trên. Thuật toán hoạt động theo cách tiếp cận lặp lại. Đây được gọi là tìm kiếm theo cấp độ, nơi các k-itemsets được sử dụng để khám phá các k+1 itemsets. Các bước chính của thuật toán bao gồm:
- Tạo tập hợp itemsets thường xuyên có độ dài bằng một. Bước này được lặp lại cho đến khi không còn itemsets thường xuyên mới nào có thể được xác định.
- Bắt đầu tạo ra các ứng cử viên độ dài k+1 từ các itemsets thường xuyên có độ dài k.
- Cắt tỉa các itemsets ứng cử viên chứa các tập con có độ dài k không thường xuyên.
- Đếm số lượng hỗ trợ của từng ứng cử viên bằng cách quét cơ sở dữ liệu.
- Loại bỏ các ứng cử viên không thường xuyên, chỉ giữ lại các ứng cử viên thường xuyên.
Dưới đây là sơ đồ luồng của các bước đã đề cập ở trên:
Nghiên cứu tình huống
Hãy xem xét một số dữ liệu được sinh ra từ hệ thống POS (điểm bán hàng) của một siêu thị. Bạn có thể tải xuống từ đây hoặc tải tập dữ liệu ‘Groceries’ từ gói arules trong R. Sự khác biệt duy nhất giữa các phương pháp này là dữ liệu trong gói arules đã ở dạng ma trận thưa. Trong khi đó, dữ liệu tải xuống ở định dạng như dưới đây:
Mỗi hàng đại diện cho một giao dịch. Giao dịch đầu tiên chứa:
- Trái cây họ cam quýt
- Bánh mì nửa hoàn thành
- Bơ
- Súp sẵn
Dữ liệu này cần được chuyển đổi thành ma trận thưa như dưới đây:
Trong bảng trên, mỗi hàng đại diện cho một giao dịch, và mỗi cột đại diện cho một mặt hàng. Nếu có một giao dịch liên quan đến một mặt hàng, ô đó sẽ được biểu diễn bằng 1, nếu không thì sẽ là 0.
Chúng ta hãy bắt đầu bằng cách gọi các thư viện cần thiết để thực hiện phân tích giỏ hàng:
R
require(arules)
require(arulesViz)
Bước tiếp theo là đọc dữ liệu giao dịch:
R
gr <- read.transactions(file.choose(), sep = ",")
Bây giờ, sau khi dữ liệu đã được tải lên, hãy xem tóm tắt dữ liệu:
R
summary(gr)
Kết quả sẽ cho biết số lượng giao dịch và số lượng mặt hàng độc nhất. Các mặt hàng phổ biến nhất cũng sẽ được đề cập trong tóm tắt. Bạn có thể sử dụng lệnh inspect để xem các giao dịch cụ thể:
R
inspect(gr[1:15])
Tính toán tần suất của các mặt hàng
Để kiểm tra tần suất của bất kỳ mặt hàng nào trong 169 mặt hàng, bạn có thể sử dụng lệnh itemFrequency:
R
itemFrequency(gr[,1:4])
Tần suất cũng có thể được biểu diễn dưới dạng biểu đồ:
R
itemFrequencyPlot(gr, support = .10)
itemFrequencyPlot(gr, support = .15)
Định nghĩa quy tắc
Bây giờ chúng ta đã có ý tưởng về dữ liệu, chúng ta tiến hành tạo ra các quy tắc. Quy tắc được hình thành bằng cách xác định mức độ hỗ trợ và độ tin cậy tối thiểu:
R
rules <- apriori(gr, parameter = list(supp = 0.005, conf = 0.20, minlen = 2))
Sau khi quy tắc được hình thành, bạn có thể xem một số quy tắc được tạo ra bằng cách sử dụng lệnh inspect:
R
inspect(rules[1:10])
Lời khuyên tốt nhất
- Lựa chọn các mức hỗ trợ và độ tin cậy hợp lý: Đảm bảo rằng các giá trị này phản ánh đúng sự thường xuyên của các mặt hàng trong dữ liệu của bạn.
- Kiểm tra và tinh chỉnh các quy tắc: Sử dụng các tiêu chí khác nhau để phân tích và tìm ra quy tắc tốt nhất cho nhu cầu của bạn.
Những cạm bẫy phổ biến
- Tham số không chính xác: Đặt giá trị hỗ trợ hoặc độ tin cậy quá cao có thể dẫn đến việc không tìm thấy quy tắc nào.
- Dữ liệu không đầy đủ: Nếu dữ liệu không đủ đại diện cho thực tế, kết quả phân tích sẽ không chính xác.
Mẹo hiệu suất
- Tối ưu hóa quy trình xử lý dữ liệu: Sử dụng các kỹ thuật như phân phối dữ liệu để cải thiện hiệu suất khi xử lý các tập dữ liệu lớn.
- Sử dụng các công cụ phân tích mạnh mẽ: Các thư viện như arulesViz có thể giúp bạn hình dung dữ liệu và quy tắc một cách hiệu quả hơn.
Giải quyết sự cố
- Kiểm tra các quy tắc: Nếu không thấy quy tắc nào, hãy kiểm tra lại dữ liệu và đảm bảo rằng các tham số được thiết lập đúng.
- Đánh giá chất lượng quy tắc: Sử dụng các chỉ số như lift và confidence để đánh giá tính hữu ích của các quy tắc được tạo ra.
Kết luận
Như đã thảo luận trong bài viết, các quy tắc liên kết được sử dụng rộng rãi trong nhiều lĩnh vực. Chúng ta cũng đã thấy cách phân tích giỏ hàng có thể được thực hiện với sự trợ giúp của thuật toán Apriori. Điều này rất hữu ích trong việc đưa ra các gợi ý sản phẩm cho khách hàng. Hãy bắt đầu khai thác dữ liệu của riêng bạn ngay hôm nay để tối ưu hóa chiến lược kinh doanh!
Câu hỏi thường gặp
1. Quy tắc liên kết là gì?
Quy tắc liên kết là những câu lệnh if/then dùng để khám phá các mối quan hệ giữa các mặt hàng trong dữ liệu.
2. Làm thế nào để đo lường sức mạnh của một quy tắc?
Bạn có thể đo lường sức mạnh của quy tắc bằng các chỉ số như Support, Confidence và Lift.
3. Thuật toán Apriori là gì?
Apriori là một thuật toán được sử dụng để tìm các quy tắc liên kết trong tập dữ liệu bằng cách sử dụng phương pháp lặp lại.