Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Trang Chủ Hướng Dẫn Đồ Án Ứng dụng KNN phân loại khách hàng theo độ tuổi
Hướng Dẫn Đồ ÁnLập Trình AI

Ứng dụng KNN phân loại khách hàng theo độ tuổi

Chia sẻ
Chia sẻ

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.

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(8,6))
sns.scatterplot(x='Thu_nhập_hàng_năm', y='Chi_tiêu_hàng_năm', hue='Nhóm_độ_tuổi', data=df, palette='Set1')
plt.title('Phân phối khách hàng theo nhóm độ tuổi')
plt.show()

Tiền xử lý dữ liệu

Để sử dụng KNN, chúng ta cần mã hóa nhãn độ tuổi thành số và chuẩn hóa các đặc trưng để khoảng cách giữa các điểm dữ liệu không bị lệch bởi đơn vị đo lường.

from sklearn.preprocessing import LabelEncoder, StandardScaler

# Mã hóa nhãn
encoder = LabelEncoder()
df['Nhóm_độ_tuổi_encoded'] = encoder.fit_transform(df['Nhóm_độ_tuổi'])

# Đặc trưng và nhãn
X = df[['Thu_nhập_hàng_năm', 'Chi_tiêu_hàng_năm']]
y = df['Nhóm_độ_tuổi_encoded']

# Chuẩn hóa dữ liệu
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

Chia dữ liệu thành tập huấn luyện và kiểm tra

Để đánh giá mô hình, chúng ta chia dữ liệu thành tập huấn luyện và tập kiểm tra với tỉ lệ 80:20.

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

Xây dựng mô hình KNN

Với dữ liệu đã được chuẩn bị, chúng ta có thể xây dựng và huấn luyện mô hình KNN bằng Scikit-learn.

from sklearn.neighbors import KNeighborsClassifier

# Khởi tạo mô hình KNN
knn = KNeighborsClassifier(n_neighbors=5)

# Huấn luyện mô hình
knn.fit(X_train, y_train)

Đánh giá mô hình

Sau khi huấn luyện, chúng ta sẽ đánh giá mô hình trên tập kiểm tra bằng độ chính xác và ma trận nhầm lẫn.

from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# Dự đoán trên tập kiểm tra
y_pred = knn.predict(X_test)

# Đánh giá
print("Độ chính xác:", accuracy_score(y_test, y_pred))
print("Báo cáo phân loại:\n", classification_report(y_test, y_pred))

# Ma trận nhầm lẫn
cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=encoder.classes_, yticklabels=encoder.classes_)
plt.xlabel('Dự đoán')
plt.ylabel('Thực tế')
plt.title('Ma trận nhầm lẫn KNN')
plt.show()

Dự đoán nhóm độ tuổi của khách hàng mới

Bạn có thể thử dự đoán nhóm độ tuổi của một khách hàng mới dựa trên thu nhập và chi tiêu của họ.

# Khách hàng mới
new_customer = [[80000, 20000]]
new_customer_scaled = scaler.transform(new_customer)

# Dự đoán
predicted_class = knn.predict(new_customer_scaled)
predicted_label = encoder.inverse_transform(predicted_class)
print(f"Nhóm độ tuổi dự đoán: {predicted_label[0]}")

Kết luận

Bạn vừa xây dựng thành công một mô hình KNN để phân loại khách hàng theo độ tuổi dựa trên dữ liệu thu nhập và chi tiêu. Quy trình bao gồm: tạo và khám phá dữ liệu, tiền xử lý, huấn luyện mô hình, đánh giá và dự đoán khách hàng mới. Đây là bước đệm quan trọng để bạn mở rộng sang các bài toán phân loại phức tạp hơn như phân loại rủi ro tín dụng hay phân nhóm khách hàng.

Tham Gia Nhóm – Hỗ Trợ Lập Trình

Hỗ Trợ Đồ Án – ThueDoAn.vn

Liên quan
Hướng Dẫn Đồ Án

Checklist 10 bước kiểm tra cuối cùng trước khi nhấn nút nộp đồ án

Thời điểm chuẩn bị nhấn nút nộp đồ án luôn mang lại...

Hướng Dẫn Đồ Án

Tuyệt chiêu đối phó với những giảng viên hướng dẫn ‘khó tính’ nhất

Giai đoạn làm đồ án tốt nghiệp luôn đi kèm với vô...

Hướng Dẫn Đồ Án

Tại sao việc quản lý Source Code bằng Git lại quan trọng hơn bạn nghĩ?

Trong thế giới lập trình hiện đại, mã nguồn chính là linh...

Hướng Dẫn Đồ Án

Những chức năng ‘thừa’ khiến bạn tốn thời gian mà không được cộng điểm

Làm đồ án tốt nghiệp là một cuộc đua thực thụ với...

Hướng Dẫn Đồ Án

Cách xử lý khi đề tài bị trùng lặp ý tưởng với các khóa trước quá nhiều

Lựa chọn đề tài đồ án luôn là bước khởi đầu đầy...

Hướng Dẫn Đồ Án

Làm sao để giải trình với giảng viên khi code bị nghi ngờ là đi chép?

Trong quá trình thực hiện đồ án, việc tham khảo mã nguồn...

Hướng Dẫn Đồ Án

Cảnh báo: Những nguồn share code ‘rác’ trên mạng cần tuyệt đối tránh

Trong quá trình làm đồ án, việc tìm kiếm sự hỗ trợ...

Hướng Dẫn Đồ Án

Sai lầm khi chọn công nghệ quá khó so với năng lực thực tế của bản thân

Chọn đề tài và công nghệ cho đồ án luôn là bước...

Liên Hệ
Liên hệ để được tư vấn & hỗ trợ đồ án CNTT nhé bạn!