Tracks
Khai phá luật kết hợp đã trở thành yếu tố thiết yếu đối với các doanh nghiệp muốn hiểu hành vi khách hàng và mô hình mua sắm. Kỹ thuật này xác định các mặt hàng thường được mua cùng nhau, giúp công ty tối ưu hóa trưng bày sản phẩm, khuyến mãi và gợi ý. Phân tích như vậy cải thiện chiến lược kinh doanh bằng cách làm rõ những xu hướng ẩn trong dữ liệu giao dịch.
Thuật toán Apriori là một phương pháp phổ biến để khai phá các luật kết hợp nhờ sự đơn giản và hiệu quả thực tiễn. Không giống các phương pháp phức tạp khác, Apriori dễ hiểu, phù hợp cho người mới bắt đầu và hiệu quả trong các ứng dụng thực tế.
Bài viết này giải thích thuật toán Apriori, minh họa quy trình hoạt động bằng các ví dụ rõ ràng và hướng dẫn bạn cách sử dụng hiệu quả. Nếu bạn muốn thực hành các khái niệm machine learning, hãy xem lộ trình nghề nghiệp Machine Learning Scientist in Python của chúng tôi.
Thuật toán Apriori là gì?
Như bạn sẽ thấy trong Hướng dẫn Khai phá Luật Kết hợp bằng Python, Apriori là thuật toán được thiết kế để trích xuất các tập mục thường xuyên (frequent itemsets) từ cơ sở dữ liệu giao dịch và tạo ra các luật kết hợp. Nó dựa trên nguyên lý: nếu một tập mục là thường xuyên, thì mọi tập con của nó cũng phải thường xuyên. Giả định này giúp giảm số lượng tập mục cần kiểm tra, khiến quy trình hiệu quả hơn.
Tập mục và giao dịch
Một bộ dữ liệu cho Apriori thường gồm các giao dịch, trong đó mỗi giao dịch là một tập các mặt hàng được mua cùng nhau. Ví dụ, dữ liệu bán hàng của siêu thị có thể có các giao dịch như:
- Sữa, Bánh mì, Bơ
- Sữa, Tã, Bia, Bánh mì
- Tã, Bia, Bơ
Mỗi giao dịch này đại diện cho một giỏ hàng được mua trong một lần thanh toán. Khóa học Phân tích Giỏ hàng bằng Python của chúng tôi đi sâu hơn về ứng dụng khái niệm này trong Python.

Support, confidence và lift
Khai phá luật kết hợp dựa trên ba thước đo chính:
Support: Tần suất một mặt hàng xuất hiện trong bộ dữ liệu. Được tính bằng:

Confidence: Khả năng mặt hàng B được mua khi mặt hàng A được mua, được cho bởi:

Lift: Độ mạnh của một luật, đo lường mức độ mặt hàng B có khả năng được mua khi mặt hàng A được mua so với khi mua độc lập:

Giá trị lift lớn hơn 1 cho thấy mối liên hệ dương mạnh giữa các mặt hàng.
Cách hoạt động của Thuật toán Apriori
Hãy cùng tìm hiểu cách thuật toán Apriori hoạt động.

Quy trình từng bước
- Sinh các tập mục ứng viên: Thuật toán bắt đầu bằng cách xác định các mặt hàng riêng lẻ và đếm số lần xuất hiện của chúng để xác định các mặt hàng thường xuyên.
- Cắt tỉa dựa trên ngưỡng support tối thiểu: Các tập mục xuất hiện ít hơn ngưỡng support tối thiểu sẽ bị loại bỏ.
- Sinh các tập mục thường xuyên: Thuật toán tạo các tập mục lớn hơn bằng cách kết hợp các tập mục nhỏ thường xuyên, lặp lại cho đến khi không thể tạo thêm tập mục thường xuyên nào.
- Suy ra các luật kết hợp: Trích xuất luật dựa trên các giá trị confidence và lift để xác định quan hệ có ý nghĩa.
Ví dụ minh họa
Xét một bộ dữ liệu với các giao dịch:
- Sữa, Bánh mì
- Sữa, Bơ
- Sữa, Bánh mì, Bơ
- Bánh mì, Bơ
Với support tối thiểu 50%, thuật toán xác định các tập mục thường xuyên và trích xuất những luật như:
- Sữa → Bánh mì: Confidence: 66,7%
- Bánh mì → Bơ: Confidence: 66,7%
Những luật này giúp doanh nghiệp hiểu hành vi mua sắm và tối ưu hóa tồn kho.
Triển khai Thuật toán Apriori trong Python
Trong phần này, bạn sẽ học cách triển khai thuật toán Apriori bằng Python.
Thiết lập môi trường
Để dùng Apriori trong Python, hãy cài đặt các thư viện cần thiết:
pip install mlxtend pandas
Nạp và chuẩn bị dữ liệu
Bước tiếp theo là nạp gói và chuẩn bị dữ liệu:
import pandas as pd
from mlxtend.frequent_patterns import apriori, association_rules
# Expanded dataset
data = {
'Milk': [1, 1, 0, 1, 0, 1, 0, 1, 1, 0],
'Bread': [1, 0, 1, 1, 1, 0, 1, 0, 1, 1],
'Butter': [0, 1, 1, 1, 1, 1, 0, 1, 1, 0],
'Eggs': [1, 0, 0, 1, 1, 1, 1, 0, 0, 1],
'Cheese': [0, 1, 1, 0, 1, 1, 0, 1, 0, 1],
'Diaper': [0, 1, 0, 1, 0, 1, 1, 1, 0, 0],
'Beer': [1, 0, 1, 0, 1, 0, 1, 0, 1, 1]
}
df = pd.DataFrame(data)
Áp dụng thuật toán Apriori
Tiếp theo, áp dụng thuật toán.
# Generating frequent itemsets
frequent_itemsets = apriori(df, min_support=0.5, use_colnames=True)
Sau đó, chúng ta thu được các luật kết hợp:
# Generating frequent itemsets
frequent_itemsets = apriori(df, min_support=0.5, use_colnames=True)
# Generating association rules
rules = association_rules(frequent_itemsets, metric='confidence', min_threshold=0.6)
print(rules[['antecedents', 'consequents', 'support', 'confidence', 'lift']])
antecedents consequents support confidence lift
0 (Butter) (Milk) 0.5 0.714286 1.190476
1 (Milk) (Butter) 0.5 0.833333 1.190476
2 (Bread) (Eggs) 0.5 0.714286 1.190476
3 (Eggs) (Bread) 0.5 0.833333 1.190476
4 (Bread) (Beer) 0.6 0.857143 1.428571
5 (Beer) (Bread) 0.6 1.000000 1.428571
6 (Butter) (Cheese) 0.5 0.714286 1.190476
7 (Cheese) (Butter) 0.5 0.833333 1.190476
Các giá trị support (0,5 đến 0,6) cho biết các liên kết này xuất hiện trong 50–60% tổng số giao dịch.
Các điểm confidence (0,71 đến 1,0) thể hiện độ tin cậy của các luật, với một số như Bia → Bánh mì là chắc chắn (confidence 100%).
Các giá trị lift (~1,2 đến 1,4) gợi ý mối liên kết vừa phải nhưng có ý nghĩa, cho thấy các cặp mặt hàng này xuất hiện cùng nhau thường xuyên hơn ngẫu nhiên một chút.
Diễn giải kết quả
Để hiểu rõ hơn các luật kết hợp do thuật toán Apriori tạo ra, chúng ta có thể trực quan hóa bằng Matplotlib. Biểu đồ phân tán giúp xem xét mối quan hệ giữa confidence và lift, trong khi biểu đồ nhiệt thể hiện support cho các kết hợp mục khác nhau.
import matplotlib.pyplot as plt
import networkx as nx
# Scatter plot of confidence vs lift
plt.figure(figsize=(8,6))
plt.scatter(rules['confidence'], rules['lift'], alpha=0.7, color='b')
plt.xlabel('Confidence')
plt.ylabel('Lift')
plt.title('Confidence vs Lift in Association Rules')
plt.grid()
plt.show()
# Visualizing association rules as a network graph
G = nx.DiGraph()
for _, row in rules.iterrows():
G.add_edge(tuple(row['antecedents']), tuple(row['consequents']), weight=row['confidence'])
plt.figure(figsize=(10, 6))
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_color='lightblue', edge_color='gray', node_size=3000, font_size=10)
edge_labels = {(tuple(row['antecedents']), tuple(row['consequents'])): f"{row['confidence']:.2f}"
for _, row in rules.iterrows()}
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)
plt.title("Association Rules Network")
plt.show()
Biểu đồ phân tán giúp xác định các luật có mối quan hệ mạnh, trong khi đồ thị mạng biểu diễn trực quan cách các mặt hàng khác nhau liên kết với nhau. Những hiểu biết này hỗ trợ ra quyết định trong bán lẻ, gợi ý sản phẩm và phát hiện gian lận.

Biểu đồ phân tán cho thấy mối quan hệ giữa confidence và lift cho các luật kết hợp được tạo ra. Những quan sát chính gồm:
- Các điểm dữ liệu trải rộng trong khoảng confidence từ 0,7 đến 1,0.
- Các giá trị lift chủ yếu nằm trong khoảng 1,19 đến 1,43, cho thấy các luật được xác định có mức độ liên kết nhất định nhưng không quá mạnh.
- Giá trị confidence 1,0 với lift 1,43 (Bia → Bánh mì) cho thấy bất cứ khi nào bia được mua, bánh mì luôn có trong giao dịch, khiến đây là một luật có độ tin cậy rất cao.

Đồ thị mạng biểu diễn trực quan các liên kết giữa những mặt hàng khác nhau:
- Sữa và Bơ có liên kết mạnh, nghĩa là khách hàng mua một món thường sẽ mua món kia.
- Bánh mì và Trứng có mối quan hệ tương tự, cho thấy một mô hình mua sắm phổ biến.
- Bia và Bánh mì thể hiện confidence mạnh nhất (1,0), nghĩa là trong mọi giao dịch có Bia, Bánh mì luôn xuất hiện.
Ứng dụng của Thuật toán Apriori
Các doanh nghiệp áp dụng rộng rãi thuật toán Apriori để giải quyết nhiều vấn đề. Hãy cùng khám phá dưới đây.
Phân tích giỏ hàng (market basket analysis)
Nhà bán lẻ sử dụng Apriori để phân tích mô hình mua sắm, giúp sắp xếp sản phẩm nhằm khuyến khích mua kèm. Ví dụ, nếu bánh mì và bơ thường xuất hiện cùng nhau, cửa hàng có thể đặt chúng gần nhau để tăng doanh số. Tìm hiểu thêm về phân tích giỏ hàng qua hướng dẫn phân tích giỏ hàng bằng R của chúng tôi.
Hệ thống gợi ý
Các nền tảng trực tuyến dùng Apriori để gợi ý sản phẩm dựa trên các lần mua trước đó. Nếu khách hàng mua một chiếc laptop, gợi ý có thể bao gồm phụ kiện như chuột hoặc bàn phím.
Phát hiện bất thường
Trong phát hiện gian lận, Apriori xác định các giao dịch bất thường bằng cách so sánh với các mẫu kỳ vọng. Nếu một giao dịch thẻ tín dụng sai lệch đáng kể so với các luật đã thiết lập, có thể kích hoạt kiểm tra bảo mật. Trong phát hiện bất thường, dù Apriori không trực tiếp dùng để xác định bất thường, nó có thể giúp phát hiện các kết hợp mục hiếm gặp hoặc bất ngờ lệch đáng kể so với mô hình mua sắm phổ biến.

Ưu điểm và Hạn chế
Có một số ưu và nhược điểm khi sử dụng thuật toán Apriori, như bạn sẽ thấy dưới đây.
Ưu điểm
Apriori dễ hiểu và hiệu quả trong việc khám phá các tập mục thường xuyên ở những bộ dữ liệu có cấu trúc. Nó được sử dụng rộng rãi trong các ngành như bán lẻ và chăm sóc sức khỏe để khám phá mẫu.
Hạn chế
Thuật toán trở nên chậm khi làm việc với bộ dữ liệu lớn do sinh ra nhiều tập mục ứng viên. Trong các trường hợp dữ liệu khối lượng lớn, những phương pháp thay thế như FP-Growth cho hiệu năng tốt hơn.

Kết luận
Apriori vẫn là một trong những kỹ thuật hữu ích nhất để tìm các mối liên kết trong dữ liệu. Dù có thách thức về tính toán, nó mang lại những hiểu biết giá trị mà doanh nghiệp sử dụng để nâng cao trải nghiệm khách hàng và tăng doanh số.
Mặc dù có thể không phải là cách nhanh nhất cho bộ dữ liệu lớn, nó vẫn là công cụ thiết yếu trong lĩnh vực khai phá dữ liệu, phân tích và machine learning. Để tìm hiểu thêm, hãy khám phá machine learning với Python và hướng tới trở thành một nhà khoa học machine learning với lộ trình nghề nghiệp Machine Learning Scientist in Python của chúng tôi.
Câu hỏi thường gặp về Thuật toán Apriori
Thuật toán Apriori dùng để làm gì?
Thuật toán Apriori được sử dụng trong khai phá dữ liệu để xác định các tập mục thường xuyên và tạo ra các luật kết hợp từ những bộ dữ liệu lớn. Nó thường được áp dụng trong phân tích giỏ hàng, hệ thống gợi ý và phát hiện gian lận.
Thuật toán Apriori hoạt động như thế nào?
Apriori hoạt động bằng cách trước tiên xác định các mặt hàng xuất hiện thường xuyên trong bộ dữ liệu, sau đó tạo ra các tập mục lớn hơn dựa trên đó. Nó cắt tỉa những tập mục không đạt ngưỡng support tối thiểu và suy ra các luật kết hợp bằng cách dùng các thước đo confidence và lift.
Support, confidence và lift trong Apriori là gì?
Support: Tần suất của một tập mục trong bộ dữ liệu.
Confidence: Xác suất một mặt hàng xuất hiện trong giao dịch khi đã có mặt một mặt hàng khác.
Lift: Độ mạnh của liên kết, cho biết các mặt hàng được mua cùng nhau thường xuyên hơn mức kỳ vọng hay không.
Hạn chế của thuật toán Apriori là gì?
Apriori có thể chậm khi làm việc với bộ dữ liệu lớn do số lượng lớn tập mục ứng viên được sinh ra. Nó cũng gặp khó với bộ dữ liệu dày đặc, nơi nhiều mặt hàng thường xuyên xuất hiện cùng nhau. Thuật toán FP-Growth là một lựa chọn thay thế cho hiệu năng tốt hơn trong các trường hợp như vậy.
Sự khác biệt giữa Apriori và FP-Growth là gì?
Apriori sinh các tập mục ứng viên và kiểm tra support theo từng vòng lặp, khiến chi phí tính toán cao. Ngược lại, FP-Growth sử dụng cấu trúc cây để giảm số lượng tập mục ứng viên, giúp nhanh hơn với bộ dữ liệu lớn.