Phân loại khách hàng là một trong những ứng dụng phổ biến nhất của Machine Learning trong lĩnh vực marketing và quản trị quan hệ khách hàng (CRM). Việc phân nhóm khách hàng theo các đặc điểm như độ tuổi, thu nhập, hành vi mua sắm giúp doanh nghiệp tối ưu hóa chiến lược chăm sóc khách hàng và tăng doanh thu. K-Nearest Neighbors (KNN) là một thuật toán đơn giản nhưng hiệu quả để thực hiện nhiệm vụ này, nhờ vào khả năng phân loại dựa trên khoảng cách trong không gian đặc trưng.
Nếu bạn là người mới, hãy tham khảo bài Dự đoán doanh thu cửa hàng bằng mô hình hồi quy để nắm quy trình xây dựng mô hình từ dữ liệu. Ngoài ra, bài Hướng dẫn tiền xử lý dữ liệu sạch để huấn luyện mô hình tốt hơn sẽ giúp bạn hiểu tầm quan trọng của dữ liệu sạch, còn bài Phân tích dữ liệu bán hàng bằng Python và Pandas sẽ cung cấp kiến thức nền tảng về thao tác dữ liệu. Những bài viết này sẽ giúp bạn tự tin hơn khi bắt tay vào xây dựng mô hình KNN để phân loại khách hàng.
Giới thiệu về thuật toán KNN
K-Nearest Neighbors (KNN) là một thuật toán học máy giám sát thuộc loại phân loại. Nguyên tắc hoạt động của KNN rất đơn giản: khi cần phân loại một điểm dữ liệu mới, thuật toán sẽ tìm k điểm gần nhất trong tập huấn luyện và xác định nhãn của điểm mới dựa trên đa số phiếu bầu của các điểm lân cận đó. KNN không giả định về phân phối dữ liệu, vì vậy nó đặc biệt hiệu quả với các bài toán phân loại đơn giản.
Trong bài này, chúng ta sẽ áp dụng KNN để phân loại khách hàng thành ba nhóm độ tuổi: “Trẻ”, “Trung niên” và “Cao tuổi” dựa trên các đặc điểm như thu nhập và chi tiêu hàng năm.
Chuẩn bị môi trường
Trước khi bắt đầu, bạn cần một môi trường Python để thực hành. Google Colab là lựa chọn lý tưởng vì miễn phí và không cần cài đặt phức tạp. Truy cập https://colab.research.google.com và tạo một notebook mới. Nếu bạn sử dụng Jupyter Notebook, hãy cài đặt các thư viện cần thiết:
!pip install pandas numpy scikit-learn matplotlib seaborn
Các thư viện này sẽ giúp bạn xử lý dữ liệu, xây dựng mô hình và trực quan hóa kết quả.
Tạo bộ dữ liệu khách hàng giả lập
Để minh họa, chúng ta sẽ tạo một tập dữ liệu nhỏ gồm các thông tin về khách hàng như tuổi, thu nhập và mức chi tiêu hàng năm. Điều này giúp bạn không cần tải dữ liệu từ bên ngoài mà vẫn có thể thực hành.
import pandas as pd
import numpy as np
# Tạo dữ liệu giả lập
np.random.seed(42)
n_samples = 200
data = {
'Tuổi': np.random.randint(18, 70, n_samples),
'Thu_nhập_hàng_năm': np.random.randint(20000, 150000, n_samples),
'Chi_tiêu_hàng_năm': np.random.randint(1000, 50000, n_samples)
}
df = pd.DataFrame(data)
# Phân loại nhóm độ tuổi
def classify_age(age):
if age < 30:
return 'Trẻ'
elif 30 <= age <= 50:
return 'Trung niên'
else:
return 'Cao tuổi'
df['Nhóm_độ_tuổi'] = df['Tuổi'].apply(classify_age)
# Lưu dữ liệu
df.to_csv('customer_data.csv', index=False)
print("Đã tạo file customer_data.csv để thực hành.")
Đọc dữ liệu từ file CSV
Sau khi tạo dữ liệu, bước tiếp theo là đọc file CSV vào Python để xử lý. Pandas cung cấp phương thức read_csv tiện lợi cho việc này.
# Đọc dữ liệu
df = pd.read_csv('customer_data.csv')
df.head()
Khám phá dữ liệu
Trước khi xây dựng mô hình, việc hiểu rõ dữ liệu là rất quan trọng. Hãy xem thông tin tổng quan và phân phối các nhóm độ tuổi.
# Thông tin tổng quan df.info() # Phân phối nhóm độ tuổi df['Nhóm_độ_tuổi'].value_counts()
Để trực quan hóa, chúng ta vẽ biểu đồ phân tán của thu nhập và chi tiêu, tô màu theo nhóm độ tuổi.

