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
Trang 1TRƯỜ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
Trang 2MỞ ĐẦ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 đếnnề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ínhtoá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ố chophé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 Đồngthờ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
Trang 3CHƯƠ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ủamột đối tượng bất động sản ví dụ như: diện tích, số phòng ngủ, phòng tắm, địaphươ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êncứ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ínhnhư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ừngphương pháp mà từ đó có thể cho ra đời mô hình với độ chính xác cao nhất, bướcnà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ấtcho 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ôngqua 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ềuchỉ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 đầuvào và giá trị đầu ra
2.2 Quy trình dự đoán giá bất động sản:
Trang 4- 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 thuthậ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 íchxung 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ệunhiễ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ếntí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ụngcá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ácphươ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ầnxâ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ểnbằ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ínhchí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ìnhthườ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
Trang 5- 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ả
Trang 61 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ồmtì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
Trang 7(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
Trang 8(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ồmcá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ônngữ lập trình Python Dưới đây là một số thư viện được sử dụng để xử lý dữ liệutrong 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áccấ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 đachiề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
Trang 9# 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',
Trang 10'LONGITUDE': 'Kinh do',
df.to_csv('NEW_DATA.csv', index=False)
* Dữ liệu sau khi xử lý:
Trang 11Sau 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àygiú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ó cungcấp các công cụ để tạo ra biểu đồ đường, biểu đồ cột, biểu đồ tròn, biểu đồ phântán,…
- Seaborn: Là thư viện trực quan hóa dữ liệu dựa trên Matplotlib Nó cung cấp cácgiao diện cao cấp hơn và các kiểu biểu đồ phức tạp hơn so với Matplotlib Seaborntậ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 quanhó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
Trang 12data = 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='axesfraction', 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}')
Trang 13axes[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)
Trang 14# 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)
# 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á
Trang 15create_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()
Trang 18(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ậphuấ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óasai 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ácphươ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
Trang 198 model = Pipeline(steps=[('preprocessor', preprocessor),
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
Trang 2034 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)
Trang 2176 'So phong ngu': [spn],
77 'So phong tam': [spt],
Trang 232.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)
])