Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 31

TRƯỜNG ĐẠI HỌC HỌC VĂN LANG

KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO ĐỒ ÁN MÔN HỌC HK232


SỐ HÓA VÀ QUẢN TRỊ THÔNG TIN SỐ (71ITDS40403)

ÁP DỤNG SỐ HÓA VÀ QUẢN TRỊ THÔNG TIN SỐ


ĐƯA RA DỰ ĐOÁN GIÁ BẤT ĐỘNG SẢN

Nhóm sinh viên thực hiện (Họ tên - Mã SV):


1. Lê Phúc Thảo (Trưởng nhóm) - 2174802010747
2. Châu Minh Mẫn - 2174802010744
3. Trần Hà Quốc Khang – 197CT09773
4.
5.

TP. Hồ Chí Minh – năm 2024


MỞ ĐẦU
Đề tài này tập trung vào áp dụng số hoá và quản trị thông tin số để dự đoán giá nhà
trong lĩnh vực bất động sản. Trong thời đại công nghệ số phát triển mạnh mẽ như
hiện nay, việc sử dụng các phương pháp số hoá và khai thác thông tin số đã trở
thành xu hướng quan trọng trong việc phân tích và dự đoán giá trị của tài sản bất
động sản.
Bất động sản là một lĩnh vực có tính phức tạp và đa dạng, ảnh hưởng trực tiếp đến
nền kinh tế và đời sống của mọi người. Việc dự đoán giá nhà chính xác và hiệu quả
đóng vai trò quan trọng trong việc quyết định đầu tư, mua bán, hoặc cho thuê bất
động sản. Tuy nhiên, việc dự đoán giá nhà không chỉ đơn giản là một phép tính
toán dựa trên các yếu tố như diện tích, vị trí, hay số phòng. Những yếu tố này chỉ là
một phần nhỏ trong quá trình quyết định giá trị của một căn nhà.
Trong bối cảnh thông tin số và công nghệ phát triển, chúng ta có thể thu thập và
phân tích một lượng lớn dữ liệu từ nhiều nguồn khác nhau để tạo ra các mô hình dự
đoán giá nhà chính xác hơn. Các phương pháp số hoá và quản trị thông tin số cho
phép chúng ta tổ chức, xử lý và phân tích dữ liệu bất động sản một cách hiệu quả
để tìm ra những mẫu chung và xu hướng tiềm ẩn. Điều này giúp chúng ta hiểu rõ
hơn về những yếu tố ảnh hưởng đến giá trị của một căn nhà và từ đó đưa ra dự
đoán chính xác về giá trị tương lai.
Trên cơ sở đó, đề tài này đặt ra mục tiêu nghiên cứu và phát triển các phương pháp
số hoá và quản trị thông tin số để tạo ra mô hình dự đoán giá nhà bất động sản.
Việc áp dụng các kỹ thuật như học máy, khai phá dữ liệu và phân tích định tính sẽ
giúp chúng ta xây dựng các mô hình dự đoán giá nhà mạnh mẽ và linh hoạt. Đồng
thời, việc tìm hiểu các yếu tố ảnh hưởng đến giá trị bất động sản cũng đóng vai trò
quan trọng trong việc cải thiện độ chính xác của mô hình dự đoán.

2
CHƯƠNG 1. GIỚI THIỆU CHỦ ĐỀ ĐỒ ÁN
1. Các nghiên cứu liên quan đến đề tài
- Với nội dung của đề tài đồ án nghiên cứu, tập trung vào các chủ đề tìm hiểu về
các khía cạnh của bất động sản. Ta sẽ đi sâu vào việc tìm hiểu các thành phần của
một đối tượng bất động sản ví dụ như: diện tích, số phòng ngủ, phòng tắm, địa
phương,… Tiếp theo ta sẽ tìm hiểu các cách tiếp cận của các phương pháp nghiên
cứu như Machine Learning, từ đó chọn ra phương pháp phù hợp nhất cho việc dự
đoán giá nhà đất, cụ thể là phương pháp hồi quy tuyến tính Linear regression.
- Hướng nghiên cứu quan trọng đến đề tài là các nhân tố ảnh hưởng đến giá nhà
đất. Khi lấy dũ liệu gí nhà đât của một đối tượng, có rất nhiều trường thuộc tính
nhưng chỉ có một số ít lại có ảnh hưởng đến giá nhà đất, chứ không phải toàn bộ
các trường. Khi tìm hiểu, thì sẽ phân tích từng khía cạnh, thuộc tính để có thể chọn
ra các yếu tố ảnh hưởng nhất đến giá nhà, từ đó có thể xây dựng mô hình và độ
chính xác cao nhất. Tiếp theo, tìm hiểu tất cả các thuật toán được sử dụng, thử từng
phương pháp mà từ đó có thể cho ra đời mô hình với độ chính xác cao nhất, bước
này là bước quan trọng khi cần phải nắm rõ các kỹ thuật để chọn ra loại tốt nhất
cho bước train model và improve.
2. Các phương pháp thực hiện
2.1. Phương pháp dự đoán giá bất động sản:

- Hồi quy tuyến tính: phương pháp này xác định mối quan hệ giữa các nhân tố
(như diện tích, vị trí, số phòng ngủ, số phòng tắm, …) và giá bất động sản thông
qua một hàm tuyến tính. Các biến có thể được điều chỉnh và trọng số được xác
định để dự đoán giá trị của bất động sản.

- Mạng neural: Mạng neural nhân tạo có thể được sử dụng để xây dựng mô hình
dự đoán giá bất động sản. Mạng neural có khả năng học từ dữ liệu và tự điều
chỉnh các trọng số của mạng để tim ra mối quan hệ phức tạp giữa các biến đầu
vào và giá trị đầu ra.

2.2. Quy trình dự đoán giá bất động sản:

3
- Thu thập dữ liệu: Quá trình dự đoán giá bất động sản bắt đầu bằng việc thu
thập dữ liệu về các yêu tố liên quan như diện tích, vị trí, số phòng ngủ, tiện ích
xung quanh, giá cả tương tự trong khu vực,…

- Tiền xử lý dữ liệu: Dữ liệu thu thập cần được tiền xử lý để loại bỏ dữ liệu
nhiễu, dữ liệu bị thiếu và chuẩn hóa dữ liệu.

- Xây dựng mô hình huấn luyện: Sau quá trình tiền xử lý dữ liệu, mô hình dự
đoán được xây dựng bằng cách áp dụng phương pháp dự đoán như hồi quy tuyến
tính. Mô hình được huấn luyện bằng dữ liệu đã được xử lý.

- Đánh giá và tinh chỉnh mô hình: Mô hình được đánh giá bằng cách sử dụng
các phép đo đánh giá như độ chính xác, độ sai lệch trung bình,… Nếu cần thiết, mô
hình có thể được tinh chỉnh bằng cách điều chỉnh các tham số hoặc thử nghiệm các
phương pháp khác nhau.

- Dự đoán giá bất động sản: Sau khi mô hình đã được xác định và tinh chỉnh, nó
có thể được sử dụng để dự đoán giá bất động sản dựa trên các giá trị đầu vào mới.

- Xây dựng giao diện người dùng: Sau khi có mô hình dự đoán, chúng ta cần
xây dựng một giao diện người dùng để người dùng có thể nhập thông tin về bất
động sản và nhận dự đoán giá trị tiềm năng. Giao diện này có thể được phát triển
bằng các ngôn ngữ lập trình web như HTML, CSS, JavaScript.

- Triển khai và cập nhật: Sau khi hoàn thiện trang web, chúng ta triển khai nó
trên một máy chủ web để cho phép người dùng truy cập. Ngoài ra, để đảm bảo tính
chính xác và đáng tin cậy của dự đoán, chúng ta cần cập nhật dữ liệu và mô hình
thường xuyên.

2.3. Phạm vi dự đoán giá bất động sản:

- Dự đoán giá bất động sản có thể áp dụng cho các loại tài sản như căn hộ, nhà
ở, đất đai thương mại hoặc công nghiệp.

4
- Phạm vi dự đoán có thể được xác định bới các yếu tố như địa điểm, thị trường,
khu vực, diện tích, số phòng ngủ,…

- Các yếu tố khác như tình trạng kinh tế, xu hướng thị trường bất động sản,
chính sách pháp lý và các yếu tố xã hội xung quanh cũng có thể được xem xét để
dự đoán giá bất động sản hiệu quả.

CHƯƠNG 2. KẾT QUẢ THỰC HIỆN ĐỒ ÁN


5
1. Quy trình áp dụng xây dựng đề tài
1.1. Sơ đồ hoạt động của mô hình
2. Xây dựng dự án “Dự đoán giá bất động sản”
2.1. Giai đoạn Get Data

- Giai đoạn Get Data là một phần quan trọng để thu thập dữ liệu từ các tập dữ
liệu có sẵn. Trong dự án lần này, dữ liệu sẽ được thu thập từ Kaggle, bao gồm
tìm kiếm tập dữ liệu, tải xuống và khám phá dữ liệu.

- Trước khi thu thập dữ liệu trên Kaggle, chúng ta cần tiến hành tìm kiếm dữ
liệu phù hợp với mục đích của dự án. Quá trình này giúp cho chúng ta tìm kiếm
được tập dữ liệu phù hợp để sử dụng cho dự án

- Sau khi đã xác định được tập dữ liệu phù hợp, chúng ta tiến hành tải xuống tập
dữ liệu từ Kaggle. Quá trình này đảm bảo cho chúng ta có tập dữ liệu đầy đủ và
sẵn sàng để sử dụng trong giai đoạn tiếp theo.

6
(Tập dữ liệu đã xác định)

- Cuối cùng trong giai đoạn Get Data, chúng ta sẽ khám phá dữ liệu để hiểu rõ
hơn về nội dung và đặc điểm của tập dữ liệu. Khám phá dữ liệu giúp chúng ta có
cái nhìn tổng quan về tập dữ liệu và chuẩn bị cho giai đoạn tiếp theo trong quá
trình phân tích dữ liệu.

7
(Miêu tả dữ liệu)

2.2. Giai đoạn Clean Data

Sau quá trình thu thập dữ liệu, chúng ta sẽ tiến hành đến bước tiền xử lý dữ liệu.
Đây là một phần quan trong trong quá trình xử lý dữ liệu. Trong quá trình này,
ta sẽ tập trung vào làm sạch và chuẩn hóa dữ liệu vừa thu thập được bao gồm
các bước như kiểm tra dữ liệu, xử lý giá trị bị thiếu, giá trị rỗng, và chuẩn hóa
dữ liệu.

Quá trình xử lý dữ liệu được thực hiện bằng các thư viẹn phổ biến trong ngôn
ngữ lập trình Python. Dưới đây là một số thư viện được sử dụng để xử lý dữ liệu
trong dự án:

- Pandas: Là thư viện mạnh mẽ để xử lý và phân tích dữ liệu. Nó cung cấp các
cấu trúc dữ liệu lịnh hoạt như DataFrame, Series và nhiều chức năng để xử lý dữ
liệu.

- NumPy: Là một thư viện quan trọng cho tính toán khoa học trong python. Nó
cung cấp các cấu trúc dữ liệu và hàm số mạnh mẽ để làm việc với mảng đa
chiều. Numpy được sử dụng để thực hiện các phép toán số học và thống kê trên
dữ liệu.

* Đoạn code thực hiện:

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# đọc tệp csv
df=pd.read_csv("DATA.csv")

8
# xóa cột không cần thiết
df.drop( ['BROKERTITLE', 'MAIN_ADDRESS',
'ADMINISTRATIVE_AREA_LEVEL_2','ADDRESS', 'STATE', 'SUBLOCAL-
ITY', 'LONG_NAME', 'FORMATTED_ADDRESS','MAIN_ADDRESS',], axis=1,
inplace=True)
# loại bỏ khoảng trắng ở đầu và cuối giá trị của cột
df=df.apply(lambda x:x.str.strip() if x.dtype=='object'else x)
#loại bỏ các hàng có giá trị bị thiếu
df.dropna(inplace=True)
#chuyển đổi các cột Price, beds,bath sang kiểu số
df['PRICE']=pd.to_numeric(df['PRICE'])
df['BEDS']=pd.to_numeric(df['BEDS'])
df['BATH']=pd.to_numeric(df['BATH'])
#đặt lại chỉ số
df.reset_index(drop=True, inplace=True)
#làm tròn chữ số thập phân
df["BATH"]=df['BATH'].round().astype(int)
df['PROPERTYSQFT']=df['PROPERTYSQFT'].round().astype(int)
# Đổi tên các cột
df_rename= {
'TYPE': 'Loai',
'PRICE': 'Gia(USD)',
'BEDS': 'So phong ngu',
'BATH': 'So phong tam',
'LOCALITY':'Khu vuc',
'PROPERTYSQFT': 'Dien tich(feet)',
'LATITUDE': 'Vi do',

9
'LONGITUDE': 'Kinh do',
'STREET_NAME': 'Duong'
}
df= df.rename(columns=df_rename)
df=df.dropna(subset=['Gia(USD)','Dien tich(feet)'])
df['Gia(USD)']=df['Gia(USD)']/1000
Q1=df['Gia(USD)'].quantile(0.25)
Q3=df['Gia(USD)'].quantile(0.75)
IQR=Q3-Q1
lower_bound=Q1-1.85*IQR
upper_bound=Q3+1.85*IQR
df=df[(df['Gia(USD)']>=lower_bound)&(df['Gia(USD)']<=upper_bound)]
#lưu tệp mới
df.to_csv('NEW_DATA.csv', index=False)

* Dữ liệu sau khi xử lý:

10
Sau quá trình xử lý dữ liệu, ta sẽ tiến hành trực quan hóa dữ liệu. Quá trình này
giúp hiểu và truyền đạt dữ liệu một cách dễ hiểu và trực quan. Dưới đây là một số
thư viện được sử dụng để trực quan hóa dữ liệu trong dự án:

- Matplotlib: Là thư viện mạnh mẽ dùng để trực quan hóa trong Python. Nó cung
cấp các công cụ để tạo ra biểu đồ đường, biểu đồ cột, biểu đồ tròn, biểu đồ phân
tán,…

- Seaborn: Là thư viện trực quan hóa dữ liệu dựa trên Matplotlib. Nó cung cấp các
giao diện cao cấp hơn và các kiểu biểu đồ phức tạp hơn so với Matplotlib. Seaborn
tập trung vào việc tạo ra các biểu đồ thống kê và biểu đồ khối lượng để trực quan
hóa dữ liệu.

* Code trực quan hóa dữ liệu:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import OneHotEncoder
from sklearn.metrics import mean_squared_error
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import r2_score
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.compose import ColumnTransformer
# Đọc dữ liệu từ tệp CSV

11
data = pd.read_csv('NEW_DATA.csv')
#print(data.describe())

numeric_columns = ['Gia(USD)' ,'So phong ngu', 'So phong tam', 'Dien tich(feet)',
'Kinh do', 'Vi do']
categorical_columns = ['Loai', 'Khu vuc', 'Duong']

def num_combined_plot(data, x, y):


fig, axes = plt.subplots(1, 2, figsize=(15, 6))

#Vẽ biểu đồ bằng KDE


sns.histplot(data=data, x=x, kde=True, ax=axes[0], color='coral')

# Vẽ biểu đồ phân tán bằng một đường tương quan


sns.regplot(data=data, x=x, y=y, ax=axes[1], color='teal',
scatter_kws={'edgecolor': 'white'}, line_kws={"color": "coral"})

# Tính hệ số tương quan


corr_coeff = data[[x, y]].corr().iloc[0, 1]

# Chú thích hệ số tương quan trên biểu đồ phân tán


axes[1].annotate(f'Correlation : {corr_coeff:.2f}', xy=(0.65, 0.9), xycoords='axes
fraction', fontsize=14, color='coral')
# điều chỉnh theme
sns.despine(bottom=True, left=True)
axes[0].set(xlabel=f'{x}', ylabel='Frequency', title=f'{x} Distribution')
axes[1].set(xlabel=f'{x}', ylabel=f'{y}', title=f'{x} vs {y}')

12
axes[1].yaxis.set_label_position("right")
axes[1].yaxis.tick_right()

plt.show()

def create_subplot_grid(data, x, y): #tạo một lưới các đồ thị


# tạo subplot
fig, axes = plt.subplots(1, 3, figsize=(15, 5))

# Vẽ biểu đồ countplot theo tỷ lệ phần trăm


sns.countplot(data=data, x=x,hue=x, ax=axes[0], palette='Set2')
axes[0].set(title=f'{x} Frequency')
axes[0].tick_params(axis='x', rotation=90)
axes[0].set_ylabel('Count (%)')

# Tính toán, chú thích tỷ lệ phần trăm


total = len(data)
for p in axes[0].patches:
percentage = '{:.1f}%'.format(100 * p.get_height() / total)
x_ = p.get_x() + p.get_width() / 2
y_ = p.get_height()
axes[0].annotate(percentage, (x_, y_), ha='center', va='bottom')

# vẽ biểu đồ boxplot
sns.boxplot(data=data, x=x, y=y, ax=axes[1],hue=x, palette='Set2')
axes[1].set(title=f'Price vs. {x}')
axes[1].tick_params(axis='x', rotation=90)

13
# Vẽ biểu đồ phân tán
sns.scatterplot(data=data, x=x, y=y, ax=axes[2], hue=x, palette='Set2')
axes[2].set(title=f'{y} vs. {x}')
axes[2].tick_params(axis='x', rotation=90)
axes[2].yaxis.set_label_position("right")

# Thêm đường hồi quy vào biểu đồ phân tán


sns.regplot(data=data, x=x, y=y, ax=axes[2], color='coral', scatter=False)
axes[2].get_legend().remove()

plt.tight_layout()
plt.show()
sns.pairplot(data[numeric_columns])
plt.suptitle('Pairplot for num_features', y=1.02)
plt.show()

plt.figure(figsize=(12, 8))

# Tạo biểu đồ heatmap


sns.heatmap(data[numeric_columns].corr(), annot=True, cmap='Spectral',
linewidths=0.5,fmt=".2f")
plt.title('Correlation Heatmap', fontsize=15)
plt.show()

# trực quan dữ liệu diện tích vs giá


num_combined_plot(data,'Dien tich(feet)','Gia(USD)')
#trực quan dữ liệu phòng ngủ vs giá

14
create_subplot_grid(data,'So phong ngu','Gia(USD)')
#trực quan dữ liệu phòng tắm với giá
create_subplot_grid(data,'So phong tam','Gia(USD)')
#trực quan vị trí
fig, ax = plt.subplots()
scatter = ax.scatter(data['Kinh do'], data['Vi do'], c=data['Gia(USD)'],
cmap='viridis')
ax.set_xlabel('Kinh do')
ax.set_ylabel('Vi do')
fig.colorbar(scatter)
plt.show()

15
16
17
(Kết quả trực quan hóa dữ liệu)

2.3. Giai đoạn Train Model

- Quá trình huấn luyện được thực hiện trên tập dữ liệu đã được chia thành tập
huấn luyện và tập kiểm tra. Mô hình được huấn luyện với mục tiêu tối thiểu hóa
sai số dữ đoán giữa giá thực tế và giá dự đoán.

- Sau quá trình huấn luyện, mô hình được đánh giá bằng cách sử dụng các
phương pháp đánh giá hiệu suất như sai số trung bình, hệ số xác định (R-
squared).

3. numeric_columns = [ 'So phong ngu', 'So phong tam', 'Dien tich(feet)']


4. categorical_columns = ['Loai', 'Khu vuc', 'Duong']
5.
6. preprocessor = ColumnTransformer(transformers=[('num', StandardScaler(),
numeric_columns),('cat', OneHotEncoder(handle_unknown='ignore'), cate-
gorical_columns)])
7.
18
8. model = Pipeline(steps=[('preprocessor', preprocessor),
9. ('regressor', RandomForestRegressor())])
10.
11.X = data[numeric_columns + categorical_columns]
12.y = data['Gia(USD)']
13.X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.05, ran-
dom_state=42)
14.
15.model.fit(X_train, y_train)
16.
17.y_pred = model.predict(X_test)
18.
19.mse = mean_squared_error(y_test, y_pred)
20.r2 = r2_score(y_test, y_pred)
21.print("MSE:",mse)
22.print("R2: ",r2)
23.
24.def evaluate_regression(model, X_train, y_train, X_test, y_test):
25. # Dự đoán về dữ liệu huấn luyện và kiểm tra
26. train_pred = model.predict(X_train)
27. test_pred = model.predict(X_test)
28.
29. # Tính(R2) cho dữ liệu huấn luyện và kiểm tra
30. r2_train = r2_score(y_train, train_pred)
31. r2_test = r2_score(y_test, test_pred)
32.
33. # Tính toán RMSE cho dữ liệu huấn luyện và kiểm tra

19
34. rmse_test = np.sqrt(mean_squared_error(y_test, test_pred))
35.
36. # Trả về số liệu đánh giá
37. print("R-squared (R2) Train:", r2_train)
38. print("R-squared (R2) Test:", r2_test)
39. print("RMSE Test:", rmse_test)
40.
41.def plot_feature_importances(model):
42. importances = model.named_steps['regressor'].feature_importances_
43.
44. all_feature_names = model.named_steps['preproces-
sor'].get_feature_names_out()
45.# print(all_feature_names)
46.
47. numeric_feature_names = [name for name in all_feature_names if
name.replace('num__', '') in numeric_columns]
48.# print(numeric_feature_names)
49.
50. numeric_importances = importances[:len(numeric_feature_names)]
51. importances_df = pd.DataFrame({'Feature': numeric_feature_names, 'Im-
portance': numeric_importances})
52. importances_df = importances_df.sort_values(by='Importance',
ascending=False)
53.
54. plt.figure(figsize=(10, 6))
55. sns.barplot(data=importances_df, x='Feature', y='Importance',hue='Fea-
ture', palette='Spectral_r')

20
56. plt.xlabel('Feature')
57. plt.ylabel('Importance')
58. plt.title('Random Forest Feature Importances for Numeric Features')
59. plt.xticks(rotation=90)
60. plt.tight_layout()
61.
62. plt.show()
63.evaluate_regression(model, X_train, y_train, X_test, y_test)
64.
65.plot_feature_importances(model)
66.
67.#đưa ra dự đoán
68.spn=input("số phòng ngủ: ")
69.spt=input("số phòng tắm: ")
70.dt=input("diện tích: ")
71.kv=input("khu vực: ")
72.duong=input("đường: ")
73.loai=input("loại: ")
74.
75.new_observation = pd.DataFrame({
76. 'So phong ngu': [spn],
77. 'So phong tam': [spt],
78. 'Dien tich(feet)': [dt],
79.
80. 'Loai': [loai],
81. 'Khu vuc': [kv],
82. 'Duong': [duong]

21
83.})
84.
85.predicted_price = model.predict(new_observation)
86.
87.print(f'Predicted price: {predicted_price[0]} k dollars.')
88.

22
2.4. Giai đoạn thực hiện ứng dụng web

from flask import Flask, render_template, request


import joblib # Thêm dòng này để import thư viện joblib
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import OneHotEncoder
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestRegressor
import pandas as pd

# Initialize Flask app


app = Flask(__name__)

# Load the trained model


trained_model = joblib.load('trained_model.joblib')
# Load your data
data = pd.read_csv('NEW_DATA.csv')
# Define numeric and categorical columns
numeric_columns = ['So phong ngu', 'So phong tam', 'Dien tich(feet)']
categorical_columns = ['Loai', 'Khu vuc', 'Duong']

# Define the preprocessor


preprocessor = ColumnTransformer(
transformers=[
('num', StandardScaler(), numeric_columns),
('cat', OneHotEncoder(handle_unknown='ignore'), categorical_columns)
])

23
# Create the pipeline with preprocessor and regressor
model = Pipeline(steps=[
('preprocessor', preprocessor),
('regressor', RandomForestRegressor())
])

# Extract unique values for dropdowns


unique_khu_vuc = data['Khu vuc'].unique().tolist()
unique_duong = data['Duong'].unique().tolist()
unique_so_phong_ngu = sorted(data['So phong ngu'].unique().tolist())
unique_so_phong_tam = sorted(data['So phong tam'].unique().tolist())
unique_dien_tich = sorted(data['Dien tich(feet)'].unique().tolist())
unique_loai = data['Loai'].unique().tolist()

@app.route('/')
def home():
return render_template('index.html', unique_khu_vuc=unique_khu_vuc,
unique_duong=unique_duong,
unique_so_phong_ngu=unique_so_phong_ngu,
unique_so_phong_tam=unique_so_phong_tam,
unique_dien_tich=unique_dien_tich, unique_loai=unique_loai)

@app.route('/predict', methods=['POST'])
def predict():
# Get user input from the form
khu_vuc = request.form['khu_vuc']

24
duong = request.form['duong']
so_phong_ngu = int(request.form['so_phong_ngu'])
so_phong_tam = int(request.form['so_phong_tam'])
dien_tich = float(request.form['dien_tich'])
loai = request.form['loai']

# Create a new observation


new_observation = pd.DataFrame({
'Khu vuc': [khu_vuc],
'Duong': [duong],
'So phong ngu': [so_phong_ngu],
'So phong tam': [so_phong_tam],
'Dien tich(feet)': [dien_tich],
'Loai': [loai]
})

# Predict the price


predicted_price = trained_model.predict(new_observation)

# Decide whether to buy or not based on predicted price


decision = "Mua" if predicted_price <= 1000 else "Không mua"

return render_template('result.html', predicted_price=predicted_price[0], deci-


sion=decision)

if __name__ == '__main__':
app.run(debug=True)

25
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>House Price Prediction</title>
</head>
<body>
<h1>House Price Prediction</h1>
<form action="/predict" method="post">
<label for="khu_vuc">Khu vực:</label>
<select id="khu_vuc" name="khu_vuc">
{% for khu_vuc in unique_khu_vuc %}
<option value="{{ khu_vuc }}">{{ khu_vuc }}</option>
{% endfor %}
</select><br><br>

<label for="duong">Đường:</label>
<select id="duong" name="duong">
{% for duong in unique_duong %}
<option value="{{ duong }}">{{ duong }}</option>
{% endfor %}
</select><br><br>

<label for="so_phong_ngu">Số phòng ngủ:</label>


<select id="so_phong_ngu" name="so_phong_ngu">
{% for so_phong_ngu in unique_so_phong_ngu %}

26
<option value="{{ so_phong_ngu }}">{{ so_phong_ngu }}</option>
{% endfor %}
</select><br><br>

<label for="so_phong_tam">Số phòng tắm:</label>


<select id="so_phong_tam" name="so_phong_tam">
{% for so_phong_tam in unique_so_phong_tam %}
<option value="{{ so_phong_tam }}">{{ so_phong_tam }}</option>
{% endfor %}
</select><br><br>

<label for="dien_tich">Diện tích (feet):</label>


<select id="dien_tich" name="dien_tich">
{% for dien_tich in unique_dien_tich %}
<option value="{{ dien_tich }}">{{ dien_tich }}</option>
{% endfor %}
</select><br><br>

<label for="loai">Loại:</label>
<select id="loai" name="loai">
{% for loai in unique_loai %}
<option value="{{ loai }}">{{ loai }}</option>
{% endfor %}
</select><br><br>

<input type="submit" value="Predict">


</form>

27
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Result</title>
</head>
<body>
<h1>Result</h1>
<p>Predicted Price: ${{ predicted_price }}</p>
<p>Decision: {{ decision }}</p>
</body>
</html>

2.5. Kết quả

28
29
30
KẾT LUẬN VÀ ĐỀ XUẤT

Tổng kết lại quá trình nghiên cứu : Quá trình nghiên cứu bất động sản căn hộ và
phòng trọ bao gồm các bước quan trọng để đánh giá và định hình giá trị và tiềm
năng của các loại tài sản này. Từ việc xác định mục tiêu và thu thập dữ liệu từ
nhiều nguồn, đến việc phân tích thông tin và đánh giá các tiêu chí quan trọng, quá
trình này giúp người nghiên cứu hiểu rõ hơn về thị trường, lợi nhuận và rủi ro liên
quan đến bất động sản.

Dựa trên kết quả, người nghiên cứu có thể đưa ra quyết định thông minh và đánh
giá hiệu quả của các giải pháp và chiến lược liên quan đến bất động sản. Từ đó, họ
có thể tối ưu hóa và cải thiện hoạt động kinh doanh và đầu tư trong lĩnh vực này, để
đạt được sự thành công và bền vững trong môi trường bất động sản đầy cạnh tranh.

Khi so sánh giá dự đoán và giá thực tế, chúng ta có thể đánh giá hiệu suất của mô
hình. Nhưng có thể thấy rằng giá dự đoán không giống nhau và cách chênh lệch
giữa giá dự đoán và giá thực tế khá lớn. Điều này có thể gợi ý rằng mô hình chưa
phù hợp hoặc cần tối ưu hóa thêm.

Để cải thiện hiệu suất của mô hình, bạn có thể thử các phương pháp tối ưu hóa mô
hình, tăng cường đặc trưng, hoặc thử nghiệm các mô hình học máy khác

31

You might also like