CHƯƠNG 1. GIỚI THIỆU

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:

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.

CHƯƠNG 2. PHƯƠNG PHÁP NGHIÊN CỨU

2.1. Mô hình nghiên cứu

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

2.2. Kỳ vọng dấu của các hệ số

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

CHƯƠNG 3. PHÂN TÍCH DỮ LIỆU

3.1 Cấu trúc dữ liệu

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à.

3.2 Kiểm tra giá trị bị thiếu và trùng lặp

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.

3.3 Xây dựng mô hình và kiểm tra giả định

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à.