❖ Source code :
import pandas as pd
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
file_path = ' /content/preprocessed_customer_data.csv '
df = pd.read_csv(file_path)
selected_features = [
"Year_Birth",
"Education", "Income" ]
X = df[ selected_features ].values
X = StandardScaler( ).fit_transform( X )
dbscan = DBSCAN( eps = 0.5 , min_samples = 2 ) df[ 'cluster' ] = dbscan.fit_predict(X)
fig = .figure( figsize = ( 10, 8 ) )plt
ax = .add_subplot( 111, projection = ' 3d ' )fig
scatter = ax.scatter(
X[:, 0],
X[:, 1],
X[:, 2],
c = df[ 'cluster' ], cmap=' viridis ',
s = 50 )
ax.set_xlabel( selected_features [ 0 ] )
ax.set_ylabel( selected_features [ 1 ] )
ax.set_zlabel( selected_features [ 2 ] )
ax.set_title( 'DBSCAN Clustering in 3D' )
legend1 = ax.legend(
*scatter.legend_elements( ),
title = "Clusters"
)
ax.add_artist( legend1 )
plt.show( )
❖ Thuộc tính để huấn luyện mô hình :
➢Year_Birth
■ Lý do chọn :
● Xác định độ tuổi khách hàng.
● Độ tuổi có liên hệ với hành vi mua sắm, sở thích sản phẩm và mức độ chi tiêu.
● Phân loại các cụm dựa trên độ tuổi khác nhau.
Trợ giúp hiểu rõ hơn về khách hàng trong từng nhóm độ tuổi.
➢Education
■ Lý do chọn :
● Phản ảnh sự hiểu biết và ảnh hưởng đến quyết định mua sắm.
◆ Nếu trình độ học vấn cao thì sẽ hiểu biết rộng và sâu hơn
về sản phẩm và thị trường.
● Phân loại hiểu rõ hơn về nhóm khách hàng từ khác biệt tri thức và quyết định mua sắm.
➢Income
■ Lý do chọn :
● Thu nhập là một yếu tố quan trọng ảnh hưởng đến khả năng chi tiêu.
◆ Thu nhập cao có khả năng chi nhiều hơn và ngược lại.
● Phân loại theo thu nhập giúp hỗ trợ đưa ra chiến lược kinh doanh phù hợp .
❖ Huấn luyện mô hình :
➢Source code :
dbscan = DBSCAN( eps = 0.5, min_samples = 2 )
df['cluster'] = dbscan.fit_predict( X )
➢Phân tích :
● `eps` là tham số quyết định bán kính (hoặc khoảng cách) tối đa giữa hai điểm để xem xét chúng là hàng xóm. Nếu khoảng cách giữa hai điểm nhỏ hơn hoặc bằng eps, chúng được coi là hàng xóm của nhau. Điều này cũng là bán kính tìm kiếm cho mỗi điểm
để xác định các điểm trong cùng một cụm.
● `min_samples` là số lượng điểm tối thiểu cần có trong một khu
vực với bán kính eps để tạo thành một cụm. Nếu trong một khu vực có ít hơn min_samples điểm, nó sẽ được coi là điểm nhiễu. min_samples quyết định độ dày tối thiểu của các cụm.
❖ Chỉ số đo :
➢Source code :
# Chỉ số Silhouette
silhouette_avg = silhouette_score( X, df[ ' cluster ' ] )
print( f ' Silhouette Score: { silhouette_avg } ' )
# Chỉ số Davies-Bouldin
db_index = davies_bouldin_score( X, df [ 'cluster' ] )
print( f ' Davies-Bouldin Index : { db_index }' )
➢Giá trị trả về :
■ Silhouette Score: 0.1332
● Silhouette Score ⊂ [ -1 : 1 ]
● Phân tích :
◆ 0.1332 ~ 0 : vì gần giá trị 0 nên có sự chồng chéo giữa các
cụm.
◆ 0.1332 > 0 : vì giá trị dương nên có thể các điểm trong mỗi
cụm tương đối gần với nhau hơn so với điểm trong các cụm lân cận.
◆ 0.1332 < 1 : vì giá trị không quá cáo, có thể rằng cụm có
thể không phải là rất đồng nhất.
■ Davies-Bouldin Index: 1.8451
● Davies-Bouldin Index đo độ tách biệt giữa các cụm.
● Phân tích :
◆ Hệ quy chiếu : 1.85
➢Kết quả trả về là 1.8451 có thể được xem là một kết quả tương đối tốt. Tuy nhiên, dựa vào ngữ cảnh và mục tiêu sử dụng. Tương đối giá trị này vẫn là khá tốt.
❖ Trực quan hoá kết quả :
➢Source code :
# Trực quan hóa trong biểu đồ scatter plot 3D
fig = plt.figure( figsize = ( 10, 8 ) )
ax = fig.add_subplot( 111, projection = ' 3d ' )
scatter = ax.scatter(
X[:, 0], X[:, 1], X[:, 2],
c = df[ 'cluster' ], cmap = ' viridis ',
s = 50 )
ax.set_xlabel(selected_features[ 0 ] )
ax.set_ylabel(selected_features[ 1 ] )
ax.set_zlabel(selected_features[ 2 ] )
ax.set_title( ' DBSCAN Clustering in 3D ' )
# Hiển thị thanh màu
legend1 = ax.legend *scatter( .legend_elements( ), title = "Clusters" ) ax.add_artist( legend1 )
plt.show( )
➢Biểu đồ :
Đánh Giá Cụm
1. Tách Biệt giữa các Cụm: Các cụm có vẻ tách biệt rõ ràng theo không gian 3D,
điều này cho thấy thuật toán DBSCAN đã phân biệt được các nhóm dữ liệu có đặc điểm tương tự nhau một cách hiệu quả. Sự tách biệt này là quan trọng trong việc xác định các phân khúc khách hàng khác nhau.
2. Cụm Nhiễu (-1): Sự xuất hiện của các điểm nhiễu (được gán nhãn là -1 và thường
được hiển thị bằng màu đen) cho thấy có những quan sát không theo mô hình mật
độ chính của dữ liệu. Trong một bối cảnh tiếp thị, điều này có thể chỉ ra những khách hàng với hành vi mua sắm đặc biệt, có thể cần được xem xét riêng.
3. Mật Độ Cụm: Một số cụm có mật độ cao, nghĩa là có nhiều điểm dữ liệu gần
nhau, điều này có thể chỉ ra sự tập trung cao của khách hàng với đặc điểm tương
tự. Trong khi đó, các cụm có mật độ thấp hoặc phân tán có thể chỉ ra các phân khúc khách hàng ít rõ ràng hơn.
Đánh Giá Dữ Liệu
1. Phân Bố Dữ Liệu: Phân bố của các điểm dữ liệu có thể cho thấy mối quan hệ giữa
các biến số. Ví dụ, nếu trục z là thu nhập, thì sự phân bố theo trục này có thể phản ánh mức thu nhập đa dạng của khách hàng.
2. Phân Tích Đa Chiều: Biểu đồ cho thấy mối quan hệ đa chiều giữa các biến, nhưng
để đánh giá chính xác hơn, cần phải hiểu rõ cách các biến này tương tác với nhau
và ảnh hưởng đến mô hình tiêu dùng.
Ứng Dụng Thực Tiễn
1. Nhận Diện Phân Khúc: Các cụm được nhận diện có thể giúp xác định các phân
khúc khách hàng cụ thể, mà từ đó có thể phát triển các chiến lược tiếp thị nhắm mục tiêu.
2. Phân Tích Hành Vi: Sự phân loại này có thể giúp phân tích hành vi tiêu dùng dựa
trên đặc điểm cá nhân và định hình các chương trình khuyến mãi hoặc sản phẩm mới.