App: pipeline clustering từ K-means tới OPTICS
Xây pipeline phân cụm end-to-end: chuẩn hóa, chọn K bằng silhouette, so K-means DBSCAN OPTICS, báo cáo metric và diễn giải cụm.
Chuyên giaThuật toán ~120 phút
Ôn lại trước khi học
Giới thiệu
Bài này xây pipeline gom khách hàng thành nhóm. Mỗi nhóm có chân dung riêng để chăm sóc.
Kiến thức cần nhớ
Chuẩn hóa trước khi cụm
- Chuẩn hóa z-score để tuổi và chi tiêu cùng thang đo.
- Loại ngoại lệ cực đoan kẻo kéo centroid lệch.
- Giảm chiều PCA để vẽ scatter 2D dễ nhìn.
- Ví dụ đời thường: đổi hết tiền về cùng đơn vị rồi mới so.
K-means và chọn K
- K-means gom mỗi điểm về centroid gần nhất rồi cập nhật lại.
- Khởi tạo k-means++ cộng nhiều restart để khỏi kẹt xấu.
- Quét K từ 2 tới 10, chọn K có silhouette cao ổn định.
- Ví dụ đời thường: chia lớp học thành K nhóm ngồi gần nhau.
DBSCAN và OPTICS cho hình lạ
- DBSCAN gom vùng dày điểm, điểm thưa đánh dấu nhiễu.
- Xử lý cụm lưỡi liềm mà K-means cắt ngang bó tay.
- OPTICS xử lý mật độ không đều và cho phân cấp nhiều mức.
- Không có thuật toán vạn năng, phải so cả 3 họ.
Ví dụ
- Input: dữ liệu blob cầu rõ ràng. Output: K-means cho silhouette trên 0.6, khớp nhãn 90%.
- Giải thích: cụm cầu đúng sở trường của K-means.
- Input: dữ liệu 2 lưỡi liềm. Output: K-means cắt ngang, DBSCAN tách đúng 2 cụm nhiễu dưới 5%.
- Giải thích: DBSCAN theo mật độ nên ôm được hình cong.
💻 Bài tập
Ngôn ngữ: Python 3. Dùng code ngày 47, 48, 49, 83, 84. Nộp vào day-132-clustering/.
Bài 1: Tiền xử lý
Dữ liệu: bộ khách hàng mua sắm (ví dụ Online Retail UCI) tính thành bảng RFM: Recency (ngày từ lần mua cuối), Frequency (số đơn), Monetary (tổng chi).
- Làm sạch: bỏ đơn hủy, số lượng âm, khách không có id.
- Log-transform cột lệch, chuẩn hóa z-score.
- Loại ngoại lệ bằng IQR và ghi lại số dòng bị loại.
- PCA 2D chỉ để vẽ.
Bài 2: So 3 họ thuật toán
| Thuật toán | Tham số cần chọn | Cách chọn |
|---|---|---|
| K-means (k-means++, 10 restart) | k | Silhouette và elbow, k = 2..10 |
| DBSCAN | eps, min_pts | k-distance plot |
| OPTICS | min_pts, ngưỡng cắt | Reachability plot |
Viết run_all(X) -> pd.DataFrame trả bảng: thuật toán, tham số, số cụm, tỉ lệ nhiễu, silhouette, Davies-Bouldin, thời gian.
Bài 3: Diễn giải và báo cáo (nâng cao)
- Với phân cụm được chọn, in bảng trung bình R, F, M mỗi cụm (theo giá trị gốc, không chuẩn hóa).
- Đặt tên nghiệp vụ mỗi cụm (ví dụ "khách VIP", "khách ngủ đông") và 1 hành động marketing.
- Kiểm tra độ ổn định: chạy lại trên 5 mẫu bootstrap 80%, đo Adjusted Rand Index giữa các lần.
REPORT.md: hình scatter PCA tô màu theo cụm cho 3 thuật toán, bảng Bài 2, bảng cụm, lý do chọn.
✅ Tiêu chí hoàn thành
- Pipeline tiền xử lý ghi rõ số dòng bị loại ở mỗi bước.
- Bảng so sánh 3 thuật toán có số thật.
- Mỗi cụm có tên nghiệp vụ và hành động.
- Có chỉ số ổn định ARI.
❓ Câu hỏi ôn tập
- Vì sao phải chuẩn hóa trước khi cụm?
- Silhouette giúp chọn K thế nào?
- DBSCAN thắng K-means ở dữ liệu nào?
- Gán điểm mới vào cụm cũ bằng cách nào?
🌕 Bạn đã hoàn thành ngày 132. Làm hết bài tập phía trên rồi sang ngày tiếp theo.