You are on page 1of 12

1.

Cây ra quyết định

Vấn đề: Quyết định mức độ sang trọng của căn nhà để phát triển dự án bất
động sản mới

Một công ty bất động sản đang lên kế hoạch phát triển một dự án mới ở một
khu vực đang phát triển nhanh chóng. Họ muốn xác định mức độ sang trọng
của căn nhà để xây dựng trong dự án này. Một số yếu tố quan trọng cần xem
xét bao gồm có phòng chống bão không, có sân hay không, có hồ bơi không, có
mới xây hay không và có phòng chưa không.

- Import thư viện để sử dụng các hàm khai phá thuật toán cây

Code: #import thư viện


import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt
- Đọc file dữ liệu để thực hành

Code: # đọc file dữ liệu để thực hành


df =
pd.read_csv("C:/Users/tiena/Downloads/archive/ParisHousingClass.csv")
- Xem các mẫu và thuộc tính
Code: # Xem số lượng quan sát và số lượng thuộc tính trong DataFrame
print("Số lượng quan sát:", df.shape[0]) # Số lượng hàng trong DataFrame
print("Số lượng thuộc tính:", df.shape[1]) # Số lượng cột trong DataFrame
- Xem 5 mẫu đầu tiên

Code: df.head()
- Xem thuộc tính và kiểu dữ liêu
Code: df.info()
- Kiểm tra các giá trị NaN( Tiền xử lý dữ liệu)
Code: #df.isnull(): Phương thức này tạo ra một DataFrame mới có cùng
kích thước với df, trong đó mỗi phần tử là True nếu giá trị tương ứng trong
df là NaN và False nếu không phải.
#.sum(): Tính tổng số giá trị True (tức là số giá trị NaN) trong mỗi cột.
#.sort_values(ascending=False): Sắp xếp các giá trị theo thứ tự giảm dần (từ
cao đến thấp).
df.isnull().sum().sort_values(ascending=False)
- Chọn 5 thuộc tính để ra quyết định mua nhà

Category là biến mục tiêu có nghĩa là mục tiêu ra quyết định mua nhà.
Code: # Tạo tập huấn luyện và tập kiểm tra
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,
random_state=101)
- Tạo tập huấn luyện và kiểm tra

X_train: Tập dữ liệu huấn luyện cho các đặc trưng (features). Đây là một tập dữ
liệu con của biến X, chứa các điểm dữ liệu mà mô hình sẽ được huấn luyện dựa
trên các đặc trưng này.

X_test: Tập dữ liệu kiểm tra cho các đặc trưng (features). Đây là một tập dữ
liệu con của biến X, được sử dụng để kiểm tra hiệu suất của mô hình sau khi đã
huấn luyện.

y_train: Tập nhãn cho dữ liệu huấn luyện. Đây là một tập dữ liệu con của biến
y, chứa các nhãn tương ứng với dữ liệu huấn luyện.

y_test: Tập nhãn cho dữ liệu kiểm tra. Đây là một tập dữ liệu con của biến y,
chứa các nhãn tương ứng với dữ liệu kiểm tra, được sử dụng để đánh giá hiệu
suất của mô hình.
test_size=0.3: Tham số này xác định tỷ lệ của dữ liệu được sử dụng cho việc
kiểm tra. Trong trường hợp này, 30% của dữ liệu sẽ được sử dụng cho việc
kiểm tra và 70% còn lại sẽ được sử dụng cho việc huấn luyện.

random_state=101: Tham số này xác định một giá trị ngẫu nhiên để đảm bảo
tính nhất quán khi chia dữ liệu thành các tập huấn luyện và kiểm tra. Sử dụng
cùng một random_state sẽ đảm bảo rằng việc chia dữ liệu là nhất quán khi mã
được chạy lại nhiều lần.

Code: # Tạo tập huấn luyện và tập kiểm tra


X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,
random_state=101)
- Huấn luyện mô hình cây quyết định

Code: # Huấn luyện mô hình cây quyết định


tree_model = DecisionTreeClassifier()
tree_model.fit(X_train, y_train)
- Vẽ cây ra quyết định

Code: # Vẽ cây quyết định


plt.figure(figsize=(20,10))
plot_tree(tree_model, feature_names=selected_features,
class_names=tree_model.classes_, filled=True)
plt.show()
- Nút gốc (Root Node):

Tính năng đầu tiên được kiểm tra là ‘hasPool’.

Hệ số gini 0.22 nghĩa là độ bất bình đẳng thấp (cây phân loại tốt và các mẫu ít
mâu thuẫn)

Có 7000 mẫu và 6118 mẫu là basic còn 882 mẫu là luxury.

Nếu giá trị của ‘hasPool’ nhỏ hơn hoặc bằng 0.5, cây quyết định dự đoán lớp là
“Basic”.

Nếu ‘hasPool’ lớn hơn 0.5, cây chuyển đến nút tiếp theo.

- Nút lá thứ thất:

Giá trị của ‘hasPool’ nhỏ hơn hoặc bằng 0.5 nghĩa là không có hồ bơi
Tại nút này hệ số bất bình đẳng gini bằng 0.0 nghĩa là không có sự bất bình
đẳng( các mẫu có sự thuần khiết tuyệt đối)

Có 3535 mẫu trong số 6118 mấu basic là không có hồ bơi

- Nút thứ hai:

Tại nút này, tính năng ‘isNewBuilt’ được kiểm tra.

Hệ số gini bằng 0.38 nghĩa là độ bất bình đẳng thấp (cây phân loại tốt và các
mẫu ít mâu thuẫn)

Có 3465 mẫu trong đó có 2583 mẫu có hồ bơi nhưng vẫn phân loại là basic và
882 mẫu có hồ bơi được phân loại là luxury

Nếu giá trị của ‘isNewBuilt’ nhỏ hơn hoặc bằng 0.5 (không phải là tài sản mới
xây), cây vẫn dự đoán lớp là “Basic”.

Nếu ‘isNewBuilt’ lớn hơn 0.5, cây chuyển đến nút tiếp theo.

- Nút lá thứ 2

Giá trị của ‘isNewBuilt’ nhỏ hơn hoặc bằng 0.5 nghĩa là không phải mới xây

Tại nút này hệ số bất bình đẳng gini bằng 0.0 nghĩa là không có sự bất bình
đẳng( các mẫu có sự thuần khiết tuyệt đối)

Có 1737 mẫu trong số 2583 mẫu basic là không phải mới xây nhưng có hồ
bơi

- Nút thứ ba:

Tại nút này, tính năng ‘hasYard’ được kiểm tra.

Hệ số gini bằng 0.5 nghĩa là độ bất bình đẳng trung bình (cây phân loại tốt và
các mẫu ít mâu thuẫn)
Có 1728 mẫu trong đó có 846 mẫu vừa có hồ bơi vừa mới xây vẫn phân loại
vào basic và 882 mẫu vừa có hồ bơi vừa mới xây được phân loại vào luxury

Nếu giá trị của ‘hasYard’ nhỏ hơn hoặc bằng 0.5 (không có sân vườn), cây vẫn
dự đoán lớp là “Basic”.

Chỉ khi cả ba điều kiện trên thỏa mãn (có bể bơi, mới xây và có sân vườn), cây
quyết định dự đoán lớp là “Luxury”.

- Nút lá 3 (trái)

Giá trị của ‘hasYard’ nhỏ hơn hoặc bằng 0.5 nghĩa là không có sân vườn

Tại nút này hệ số bất bình đẳng gini bằng 0.0 nghĩa là không có sự bất bình
đẳng( các mẫu có sự thuần khiết tuyệt đối)

Có 846 mẫu trong số 846 mẫu basic là có hồ bơi, mới xây nhưng không có sân
vườn được phân loại là basic

- Nút lá 3 (phải):

Giá trị của ‘hasYard’ lớn hơn 0.5 nghĩa là có sân vườn

Tại nút này hệ số bất bình đẳng gini bằng 0.0 nghĩa là không có sự bất bình
đẳng( các mẫu có sự thuần khiết tuyệt đối)

Có 882 mẫu trong số 882 mẫu luxury là có hồ bơi, mới xây và có sân vườn
được phân loại là luxury.
2. Gom cụm
- Để giải quyết vấn đề phân loại loại hình nhà ở từ bộ dữ liệu Paris Housing,
bạn cần chọn những thuộc tính có thể phản ánh đặc điểm quan trọng của
nhà ở. Dựa trên mô tả của bài toán, một số thuộc tính có thể hữu ích bao
gồm:

Diện tích (squareMeters): Diện tích của căn nhà có thể là một yếu tố quan trọng
trong việc xác định loại hình nhà ở. Các căn hộ nhỏ có thể thích hợp cho người
độc thân hoặc gia đình nhỏ, trong khi các biệt thự lớn hơn có thể thu hút các gia
đình đông thành viên hoặc người muốn có không gian sống lớn.

Số lượng phòng (numberOfRooms): Số lượng phòng trong nhà cũng có thể ảnh
hưởng đến loại hình nhà ở. Những căn hộ với nhiều phòng có thể phù hợp cho
các gia đình lớn hoặc người cần không gian làm việc riêng.

Giá cả (price): Giá cả của nhà có thể phản ánh mức độ cao cấp và tiện ích của
căn nhà. Các căn nhà có giá cao hơn có thể có các tiện ích và dịch vụ tốt hơn,
trong khi các căn nhà giá rẻ hơn có thể thu hút những người muốn giảm chi phí
hoặc sinh sống trong khu vực giá rẻ hơn.

Mã thành phố (cityCode): Vị trí của nhà cũng có thể ảnh hưởng đến loại hình
nhà ở. Các thành phố khác nhau có thể có mức sống và nhu cầu nhà ở khác
nhau.

Phạm vi thành phố (cityPartRange): Khu vực cụ thể trong thành phố cũng có
thể đóng vai trò quan trọng trong việc xác định loại hình nhà ở. Các khu vực
trung tâm có thể phát triển các dự án nhà chung cư hoặc căn hộ cao cấp, trong
khi các khu vực ngoại ô có thể tập trung vào nhà phố hoặc biệt thự.

 Với các thuộc tính này, bạn có thể áp dụng thuật toán gom cụm để phân loại
các căn nhà thành các nhóm dựa trên đặc điểm chung của chúng, từ đó xác
định loại hình nhà ở phù hợp cho từng khu vực hoặc phân khúc thị trường.
- Import thêm thư viện để gom cụm theo phương pháp kmeans
Code: from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
- Chọn các thuộc tính đặc trưng để gom cụm

# Chọn các đặc trưng

X = df[['squareMeters', 'numberOfRooms', 'price', 'cityCode', 'cityPartRange']]

- Chọn số lượng cụm

Code: # Chọn số lượng cụm


k=5
- Áp dụng thuật toán kmeans

Code: # Áp dụng thuật toán K-Means


kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(X)
- Thêm cột nhãn cụm vào dữ liệu

Code: # Thêm cột nhãn cụm vào dữ liệu


df['cluster'] = kmeans.labels_
- Hiển thị các cụm và đồ thị
Code: # Hiển thị các cụm
plt.scatter(df['squareMeters'], df['price'], c=df['cluster'], cmap='viridis')
plt.xlabel('Square Meters')
plt.ylabel('Price')
plt.title('Clustering of Paris Housing Data')
plt.colorbar(label='Cluster')
plt.show()
- Kết quả
Cluster 1 (1965 samples): Cụm này có số lượng mẫu ít nhất trong các cụm. Có
thể đây là những căn nhà có diện tích nhỏ và giá thấp hơn so với các cụm khác.
Đối với nhà môi giới bất động sản, có thể tập trung vào việc quảng bá các căn
nhà nhỏ với giá phù hợp cho các đối tượng khách hàng muốn tìm kiếm những
lựa chọn tiết kiệm.

Cluster 2 (1974 samples): Cụm này có số lượng mẫu tương đối ít, tuy nhiên nó
không thấp như Cluster 1. Có thể đây là những căn nhà vừa với giá trung bình,
không quá cao nhưng cũng không quá thấp. Những căn nhà trong cụm này có
thể đáp ứng nhu cầu của nhóm đa dạng khách hàng.

Cluster 3 (2039 samples): Cụm này có số lượng mẫu cao nhất, có thể là do
chứa nhiều căn nhà phổ biến, với diện tích và giá cả trung bình. Có thể đây là
những căn nhà phổ biến trong thị trường bất động sản, đáp ứng được nhu cầu
của đa số khách hàng.

Cluster 4 (2006 samples): Cụm này có số lượng mẫu gần bằng với Cluster 3,
nhưng có thể tập trung vào các căn nhà có diện tích lớn hơn với giá cao hơn.
Có thể đây là những căn nhà sang trọng hoặc cao cấp, phù hợp với những
khách hàng có nhu cầu cao cấp và đặc biệt.

Cluster 5 (2016 samples): Cụm này có số lượng mẫu tương đối cao, có thể là
những căn nhà vừa phải với giá cả trung bình và diện tích vừa phải. Có thể là
lựa chọn phổ biến cho đa số người mua nhà.

You might also like