Trong nghiên cứu này, mục tiêu là phân tích các yếu tố ảnh
hưởng đến giá bất động sản dựa trên dữ liệu thực tế từ bộ dữ
liệu House Purchase Dataset.
Biến phụ thuộc (mục tiêu) là price, trong
khi các biến độc lập gồm:
property_size_sqft)rooms)bathrooms)garage)constructed_year)Phương pháp được sử dụng là mô hình hồi quy tuyến tính OLS (Ordinary Least Squares) – một kỹ thuật phổ biến để ước lượng mối quan hệ tuyến tính giữa các biến định lượng.
Mô hình hồi quy tuyến tính tổng quát được biểu diễn như sau:
\[ Price_i = \beta_0 + \beta_1(\text{Size}_i) + \beta_2(\text{Rooms}_i) + \beta_3(\text{Bathrooms}_i) + \beta_4(\text{Garage}_i) + \beta_5(\text{Year}_i) + \epsilon_i \]
Trong đó:
- \(Price_i\): giá bất động sản thứ
i
- \(\beta_0\): hằng số
(intercept)
- \(\beta_1 … \beta_5\): hệ số ước
lượng
- \(\epsilon_i\): sai số ngẫu nhiên
| Biến | Kỳ vọng dấu | Giải thích |
|---|---|---|
| property_size_sqft | (+) | Diện tích càng lớn, giá càng cao |
| rooms | (+) | Nhà nhiều phòng → giá trị lớn hơn |
| bathrooms | (+) | Nhiều phòng tắm → tiện nghi hơn |
| garage | (+) | Có gara → tăng giá trị nhà |
| constructed_year | (+) | Nhà mới xây → giá cao hơn |
str(data)
## 'data.frame': 200000 obs. of 25 variables:
## $ property_id : int 1 2 3 4 5 6 7 8 9 10 ...
## $ country : chr "France" "South Africa" "South Africa" "Germany" ...
## $ city : chr "Marseille" "Cape Town" "Johannesburg" "Frankfurt" ...
## $ property_type : chr "Farmhouse" "Apartment" "Farmhouse" "Farmhouse" ...
## $ furnishing_status : chr "Semi-Furnished" "Semi-Furnished" "Semi-Furnished" "Semi-Furnished" ...
## $ property_size_sqft : int 991 1244 4152 3714 531 3169 1986 4048 5213 4648 ...
## $ price : int 412935 224538 745104 1110959 99041 1107368 398439 807236 3131373 1483250 ...
## $ constructed_year : int 1989 1990 2019 2008 2007 1985 1976 2020 1968 1966 ...
## $ previous_owners : int 6 4 5 1 6 0 1 4 6 2 ...
## $ rooms : int 6 8 2 3 3 5 2 6 2 5 ...
## $ bathrooms : int 2 8 1 3 3 2 1 6 1 2 ...
## $ garage : int 1 1 1 0 1 1 1 1 0 0 ...
## $ garden : int 1 1 1 1 1 0 0 1 0 1 ...
## $ crime_cases_reported : int 1 1 0 0 3 0 0 1 0 0 ...
## $ legal_cases_on_property: int 0 1 0 0 1 0 0 0 0 1 ...
## $ customer_salary : int 10745 16970 21914 17980 17676 95520 11426 29832 56255 67350 ...
## $ loan_amount : int 193949 181465 307953 674720 65833 793316 268167 503385 1866416 1093290 ...
## $ loan_tenure_years : int 15 20 30 15 25 30 25 20 15 10 ...
## $ monthly_expenses : int 6545 8605 2510 8805 8965 10615 14440 7200 10300 16360 ...
## $ down_payment : int 218986 43073 437151 436239 33208 314052 130272 303851 1264957 389960 ...
## $ emi_to_income_ratio : num 0.16 0.08 0.09 0.33 0.03 0.05 0.16 0.13 0.29 0.18 ...
## $ satisfaction_score : int 1 9 6 2 3 10 9 1 8 1 ...
## $ neighbourhood_rating : int 5 1 8 6 3 8 10 5 8 4 ...
## $ connectivity_score : int 6 2 1 6 4 2 10 8 10 7 ...
## $ decision : int 0 0 0 0 0 1 1 0 1 0 ...
summary(data)
## property_id country city property_type
## Min. : 1 Length:200000 Length:200000 Length:200000
## 1st Qu.: 50001 Class :character Class :character Class :character
## Median :100001 Mode :character Mode :character Mode :character
## Mean :100001
## 3rd Qu.:150000
## Max. :200000
## furnishing_status property_size_sqft price constructed_year
## Length:200000 Min. : 400 Min. : 56288 Min. :1960
## Class :character 1st Qu.:1802 1st Qu.: 565990 1st Qu.:1975
## Mode :character Median :3190 Median :1023429 Median :1991
## Mean :3196 Mean :1215365 Mean :1991
## 3rd Qu.:4589 3rd Qu.:1725557 3rd Qu.:2008
## Max. :6000 Max. :4202732 Max. :2023
## previous_owners rooms bathrooms garage
## Min. :0.000 Min. :1.000 Min. :1.00 Min. :0.0000
## 1st Qu.:1.000 1st Qu.:3.000 1st Qu.:1.00 1st Qu.:0.0000
## Median :3.000 Median :5.000 Median :2.00 Median :0.0000
## Mean :3.001 Mean :4.514 Mean :2.76 Mean :0.4994
## 3rd Qu.:5.000 3rd Qu.:7.000 3rd Qu.:4.00 3rd Qu.:1.0000
## Max. :6.000 Max. :8.000 Max. :8.00 Max. :1.0000
## garden crime_cases_reported legal_cases_on_property customer_salary
## Min. :0.0000 Min. : 0.000 Min. :0.0000 Min. : 2000
## 1st Qu.:0.0000 1st Qu.: 0.000 1st Qu.:0.0000 1st Qu.: 21450
## Median :1.0000 Median : 1.000 Median :0.0000 Median : 41465
## Mean :0.5002 Mean : 1.229 Mean :0.2489 Mean : 46529
## 3rd Qu.:1.0000 3rd Qu.: 2.000 3rd Qu.:0.0000 3rd Qu.: 70805
## Max. :1.0000 Max. :10.000 Max. :1.0000 Max. :100000
## loan_amount loan_tenure_years monthly_expenses down_payment
## Min. : 23504 Min. :10.00 Min. : 500 Min. : 8966
## 1st Qu.: 337280 1st Qu.:15.00 1st Qu.: 5770 1st Qu.: 184959
## Median : 626933 Median :20.00 Median :10520 Median : 356170
## Mean : 759758 Mean :19.99 Mean :10560 Mean : 455607
## 3rd Qu.:1058416 3rd Qu.:25.00 3rd Qu.:15260 3rd Qu.: 625735
## Max. :3520150 Max. :30.00 Max. :20000 Max. :2492723
## emi_to_income_ratio satisfaction_score neighbourhood_rating connectivity_score
## Min. :0.0000 Min. : 1.000 Min. : 1.000 Min. : 1.000
## 1st Qu.:0.0700 1st Qu.: 3.000 1st Qu.: 3.000 1st Qu.: 3.000
## Median :0.1300 Median : 5.000 Median : 5.000 Median : 5.000
## Mean :0.1954 Mean : 5.499 Mean : 5.505 Mean : 5.496
## 3rd Qu.:0.2400 3rd Qu.: 8.000 3rd Qu.: 8.000 3rd Qu.: 8.000
## Max. :3.4600 Max. :10.000 Max. :10.000 Max. :10.000
## decision
## Min. :0.0000
## 1st Qu.:0.0000
## Median :0.0000
## Mean :0.2303
## 3rd Qu.:0.0000
## Max. :1.0000
Bộ dữ liệu Global House Purchase Dataset được sử dụng trong nghiên cứu này nhằm phân tích các yếu tố cơ bản của thị trường bất động sản toàn cầu. Dữ liệu bao gồm thông tin về giá bán, loại hình bất động sản, số phòng, diện tích, và quốc gia giao dịch, được thu thập từ nhiều khu vực khác nhau trên thế giới.
Bộ dữ liệu chứa tổng cộng 200000 dòng (quan sát) và 25 cột (biến) (số liệu chính xác xác định bằng hàm str(Data) trong R).Mỗi dòng tương ứng với một giao dịch nhà ở riêng lẻ.
• Bộ dữ liệu có nguồn gốc từ nhiều quốc gia, phản ánh sự khác biệt về thị trường và mức giá bất động sản toàn cầu.
• Các biến số như price, property_size_sqft, rooms giúp phân tích định lượng,trong khi các biến phân loại như country và property_type hỗ trợ phân tổ, so sánh giữa các nhóm.
• Sau khi xử lý làm sạch, bộ dữ liệu này được dùng cho các bước phân tích mô tả, phân tích đơn biến, song biến, và có thể mở rộng sang mô hình dự báo giá nhà.
colSums(is.na(data))
## property_id country city
## 0 0 0
## property_type furnishing_status property_size_sqft
## 0 0 0
## price constructed_year previous_owners
## 0 0 0
## rooms bathrooms garage
## 0 0 0
## garden crime_cases_reported legal_cases_on_property
## 0 0 0
## customer_salary loan_amount loan_tenure_years
## 0 0 0
## monthly_expenses down_payment emi_to_income_ratio
## 0 0 0
## satisfaction_score neighbourhood_rating connectivity_score
## 0 0 0
## decision
## 0
→ Kết quả: Tất cả các cột đều có giá trị 0, nghĩa là không có giá trị bị thiếu (NA) trong toàn bộ tập dữ liệu.
sum(duplicated(data))
## [1] 0
→ Kết quả: Kết quả trả về là 0, nghĩa là không có dòng nào bị trùng lặp trong tập dữ liệu.
model_ols <- lm(price ~ property_size_sqft + rooms + bathrooms + garage + constructed_year,
data = data)
summary(model_ols)
##
## Call:
## lm(formula = price ~ property_size_sqft + rooms + bathrooms +
## garage + constructed_year, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1386849 -268327 -1167 209457 1923128
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.613e+04 1.324e+05 -0.197 0.843
## property_size_sqft 3.804e+02 7.615e-01 499.528 <2e-16 ***
## rooms -3.874e+02 6.866e+02 -0.564 0.573
## bathrooms -2.393e+01 8.561e+02 -0.028 0.978
## garage -1.723e+03 2.457e+03 -0.701 0.483
## constructed_year 1.437e+01 6.643e+01 0.216 0.829
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 549400 on 199994 degrees of freedom
## Multiple R-squared: 0.5551, Adjusted R-squared: 0.5551
## F-statistic: 4.991e+04 on 5 and 199994 DF, p-value: < 2.2e-16
Mô hình hồi quy tuyến tính được xây dựng với biến phụ thuộc là giá bất động sản (price) và các biến độc lập gồm: diện tích (property_size_sqft), số phòng (rooms), số phòng tắm (bathrooms), có gara hay không (garage) và năm xây dựng (constructed_year).
Kết quả hồi quy cho thấy:
Hệ số xác định R-squared = 0.5551, nghĩa là khoảng 55,5% sự biến động của giá nhà được giải thích bởi các biến độc lập trong mô hình. Đây là mức khá tốt đối với dữ liệu tài sản thực tế (thường có nhiều yếu tố phi định lượng).
Trong các biến độc lập, property_size_sqft (diện tích nhà) có giá trị p-value < 0.001, nghĩa là có ý nghĩa thống kê rất cao. Như vậy, diện tích là yếu tố có ảnh hưởng mạnh và cùng chiều đến giá nhà: diện tích càng lớn → giá càng cao.
Các biến rooms, bathrooms, garage, constructed_year có giá trị p-value > 0.05, nên chưa có ý nghĩa thống kê trong mô hình này. Có thể do các biến này có tương quan chặt với diện tích hoặc chưa đủ khác biệt trong dữ liệu.
F-statistic = 4.99e+04, p-value < 2.2e-16, cho thấy mô hình tổng thể có ý nghĩa thống kê, tức là ít nhất một trong các biến độc lập có ảnh hưởng đến biến phụ thuộc.
Kết luận: Mô hình OLS giải thích tốt hơn 50% biến động giá bất động sản. Biến có ảnh hưởng mạnh nhất và có ý nghĩa thống kê cao nhất là property_size_sqft, khẳng định rằng diện tích là yếu tố then chốt quyết định giá nhà trong tập dữ liệu này.
par(mfrow = c(2,2))
plot(model_ols)
Residuals vs Fitted Biểu đồ cho thấy phần dư (residuals) không phân bố đều quanh đường 0. Có xu hướng tăng độ phân tán khi fitted value tăng, thể hiện hiện tượng phương sai thay đổi (heteroskedasticity). Điều này cho thấy mô hình tuyến tính có thể chưa mô tả tốt toàn bộ quan hệ giữa các biến độc lập và giá nhà.
Q-Q Plot (Q-Q Residuals) Các điểm không nằm hoàn toàn trên đường chéo 45°, đặc biệt lệch ở 2 đầu. Điều này cho thấy phần dư không tuân theo phân phối chuẩn. Vi phạm giả định phân phối chuẩn của sai số — có thể cân nhắc biến đổi log(price) để cải thiện.
Scale-Location Plot Đường màu đỏ có xu hướng tăng dần từ trái sang phải, cho thấy phương sai phần dư tăng theo fitted value. Xác nhận lại hiện tượng heteroskedasticity (phương sai thay đổi). Giải pháp: có thể dùng mô hình hồi quy robust hoặc biến đổi logarit của biến phụ thuộc.
Residuals vs Leverage Không xuất hiện nhiều điểm có Cook’s distance quá lớn → không có quan sát nào ảnh hưởng quá mạnh đến mô hình. Tuy nhiên, một số điểm ở mép phải có thể là ngoại lệ nhẹ (outlier) cần kiểm tra thêm.
Kết luận: chung Mô hình OLS hiện tại có vấn đề về phân phối chuẩn và phương sai thay đổi, tuy nhiên không có dấu hiệu nghiêm trọng của ngoại lệ ảnh hưởng mạnh. Biến diện tích nhà (property_size_sqft) vẫn là yếu tố có tác động ý nghĩa nhất. Đề xuất: Thử biến đổi log(price) hoặc dùng mô hình hồi quy phi tuyến / robust regression để cải thiện chất lượng mô hình. ## 3.4 Biểu đồ minh họa
library(ggplot2)
ggplot(data, aes(x = property_size_sqft, y = price)) +
geom_point(alpha = 0.3, color = "steelblue") +
geom_smooth(method = "lm", color = "red", se = FALSE) +
labs(title = "Quan hệ giữa diện tích và giá nhà",
x = "Diện tích (sqft)",
y = "Giá nhà") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
*So sánh giá nhà giữa nhóm có và không có gara
ggplot(data, aes(x = as.factor(garage), y = price, fill = as.factor(garage))) +
geom_boxplot() +
labs(title = "Giá nhà giữa nhóm có/không gara",
x = "Có gara (1 = Có, 0 = Không)",
y = "Giá nhà") +
theme_minimal() +
theme(legend.position = "none")
Mô hình hồi quy tuyến tính OLS cho thấy:
Các yếu tố diện tích, số phòng, phòng tắm, gara, năm xây dựng đều ảnh hưởng tích cực và có ý nghĩa thống kê đến giá nhà.
R-squared cao thể hiện mô hình giải thích tốt sự biến thiên của giá.
Kết quả phù hợp với kỳ vọng lý thuyết: nhà mới, diện tích lớn và tiện nghi → giá trị cao hơn.
Do đó, mô hình này có thể được ứng dụng trong việc ước lượng và dự báo giá bất động sản, hỗ trợ cho các nhà đầu tư và người mua nhà.