Phân cụm dữ liệu là một bước quan trọng trong khai thác dữ liệu và học máy, đặc biệt hữu ích trong việc phân tích hành vi khách hàng. Thuật toán K-Means nổi tiếng nhờ tính đơn giản và hiệu quả, giúp doanh nghiệp dễ dàng nhận diện các nhóm khách hàng tiềm năng.
Trước khi tìm hiểu K-Means, bạn có thể tham khảo một số bài viết liên quan để củng cố kiến thức nền tảng. Bài Thực hiện giảm chiều dữ liệu bằng PCA giúp bạn tối ưu dữ liệu khi làm việc với tập dữ liệu lớn. Với người mới học, bài Giới thiệu thư viện Scikit-learn cho người mới học ML sẽ cung cấp cái nhìn tổng quan về công cụ phổ biến trong học máy. Ngoài ra, bài So sánh các thuật toán phân loại phổ biến trong học máy sẽ giúp bạn lựa chọn phương pháp phù hợp hơn khi cần triển khai các mô hình khác nhau.
Tổng quan bài toán phân cụm dữ liệu khách hàng
Phân cụm dữ liệu khách hàng là một bài toán quan trọng trong lĩnh vực phân tích dữ liệu và marketing. Mục tiêu của bài toán này là nhóm các khách hàng thành từng cụm riêng biệt dựa trên những đặc điểm chung như độ tuổi, thu nhập và mức độ chi tiêu. Khi các nhóm được hình thành, doanh nghiệp có thể dễ dàng xác định các phân khúc khách hàng tiềm năng để xây dựng chiến lược chăm sóc và tiếp thị phù hợp.
Trong bài toán này, dữ liệu khách hàng thường không có nhãn phân loại sẵn, do đó việc phân cụm sẽ được thực hiện bằng các thuật toán học máy không giám sát. Cách tiếp cận này giúp doanh nghiệp nhận diện các mẫu hành vi ẩn trong dữ liệu và đưa ra quyết định dựa trên sự hiểu biết sâu sắc về từng nhóm khách hàng.
Cài đặt và chuẩn bị môi trường làm việc
Để bắt đầu, bạn cần một môi trường lập trình. Google Colab là lựa chọn tốt nhất cho người mới vì nó miễn phí, chạy trên trình duyệt và không cần cài đặt phần mềm phức tạp. Để sử dụng, truy cập Google Colab bằng tài khoản Google của bạn.
Tiếp theo, chúng ta cần cài đặt các thư viện cần thiết. Trong Google Colab, bạn có thể chạy đoạn mã sau để đảm bảo các thư viện đã sẵn sàng:
# Cài đặt các thư viện cần thiết !pip install pandas matplotlib seaborn scikit-learn
Các thư viện trên bao gồm:
-
pandas: để xử lý dữ liệu
-
matplotlib, seaborn: để trực quan hóa dữ liệu
-
scikit-learn: để áp dụng thuật toán K-Means
Tải dữ liệu khách hàng và tiền xử lý
Chúng ta sẽ sử dụng tập dữ liệu mẫu “Mall Customers” rất phổ biến cho bài toán phân cụm. Tập dữ liệu này chứa thông tin về tuổi, thu nhập hàng năm và điểm chi tiêu của khách hàng. Bạn có thể tải trực tiếp tập dữ liệu tại đây: Mall Customers Dataset – Kaggle hoặc từ link GitHub tại đây.
Trong Google Colab, bạn có thể đọc dữ liệu và kiểm tra như sau:
import pandas as pd # Đọc dữ liệu từ URL url = 'https://gist.githubusercontent.com/pravalliyaram/5c05f43d2351249927b8a3f3cc3e5ecf/raw/Mall_Customers.csv' data = pd.read_csv(url) # Hiển thị 5 dòng đầu tiên print(data.head()) # Kiểm tra giá trị thiếu print(data.isnull().sum())
Sau khi tải dữ liệu, cần chọn các đặc trưng phù hợp để phân cụm. Trong trường hợp này, chúng ta sử dụng các cột “Age”, “Annual Income (k$)” và “Spending Score (1-100)”.
Chuẩn hóa dữ liệu và tìm số cụm tối ưu
Vì K-Means tính toán dựa trên khoảng cách, các đặc trưng cần được chuẩn hóa để tránh sự chênh lệch về đơn vị đo lường.
from sklearn.preprocessing import StandardScaler # Chọn cột đặc trưng features = ['Age', 'Annual Income (k$)', 'Spending Score (1-100)'] X = data[features] # Chuẩn hóa dữ liệu scaler = StandardScaler() X_scaled = scaler.fit_transform(X)
Để xác định số cụm k tối ưu, phương pháp Elbow được sử dụng. Phương pháp này vẽ biểu đồ tổng sai số bình phương (SSE) theo số cụm và xác định điểm “gãy” trên đường cong.

