To Real Estate Price Prediction κοινοποιήθηκε στο Kaggle, ένα αποθετήριο βάσεων, συνόλων δεδομένων και θεωριών πεδίων. Το Dataset αποτελείται από συναλλαγές ακινήτων στην Ταϊβάν και έχει ως στόχο την πρόβλεψη των τιμών τους ανά τετραγωνικό μέτρο. Οι τιμές βασίζονται σε δεδομένα από τις 31 Αυγούστου 2012 έως και τις 2 Αυγούστου 2013.
Η ανάλυση των δεδομένων του Dataset μπορεί να βοηθήσει στο data-driven decision-making (DDDM) στον κλάδο των ακινήτων. Ουσιαστικά συμβάλλει στην κατανόηση των παραγόντων που επηρεάζουν τις τιμές των ακινήτων, στην πρόβλεψη της αξίας τους και στη βελτιστοποίηση των επενδυτικών στρατηγικών.
kable(stats, col.names = c("Μεταβλητή", "Περιγραφή", "Τύπος", "Εύρος", "Μονάδα Μέτρησης"), caption = "Αναλυτικός πίνακας με τα στοιχεία των μεταβλητών:")
| Μεταβλητή | Περιγραφή | Τύπος | Εύρος | Μονάδα Μέτρησης |
|---|---|---|---|---|
| TransactionDate | Ημερομηνία συναλλαγής | Αριθμητική | 2012-08-31 - 2013-08-02 | - |
| HouseAge | Ηλικία του ακινήτου | Αριθμητική | 0 - 43.8 | Έτος |
| MRTdistance | Απόσταση από τον κοντινότερο σταθμό μετρό | Αριθμητική | 23.38 - 6488.02 | Meter(m) |
| NoConvinienceStores | Πλήθος κοντινών καταστημάτων | Αριθμητική | 0 - 10 | - |
| Latitude | Γεωγραφικό πλάτος | Αριθμητική | 24.93207 - 25.01459 | - |
| Longitude | Γεωγραφικό μήκος | Αριθμητική | 121.47353 - 121.56627 | - |
| SQMprice | Τιμή ανά τετραγωνικό μέτρο | Αριθμητική | 7.6 - 117.5 | Dollar($) |
summary(realEstate)
## TransactionDate HouseAge MRTdistance NoConvinienceStores
## Min. :2012-08-31 Min. : 0.000 Min. : 23.38 Min. : 0.000
## 1st Qu.:2012-12-01 1st Qu.: 9.025 1st Qu.: 289.32 1st Qu.: 1.000
## Median :2013-03-03 Median :16.100 Median : 492.23 Median : 4.000
## Mean :2013-02-23 Mean :17.713 Mean :1083.89 Mean : 4.094
## 3rd Qu.:2013-06-02 3rd Qu.:28.150 3rd Qu.:1454.28 3rd Qu.: 6.000
## Max. :2013-08-02 Max. :43.800 Max. :6488.02 Max. :10.000
## Latitude Longitude SQMprice
## Min. :24.93 Min. :121.5 Min. : 7.60
## 1st Qu.:24.96 1st Qu.:121.5 1st Qu.: 27.70
## Median :24.97 Median :121.5 Median : 38.45
## Mean :24.97 Mean :121.5 Mean : 37.98
## 3rd Qu.:24.98 3rd Qu.:121.5 3rd Qu.: 46.60
## Max. :25.01 Max. :121.6 Max. :117.50
ggplot(realEstate, aes(MRTdistance, SQMprice)) +
geom_point(color = "steelblue") +
labs(title = "Τιμή ανά τ.μ. vs Απόσταση από σταθμό μετρό",
x = "Απόσταση από σταθμό μετρό (m)",
y = "Τιμή ανά τ.μ.($)") +
theme_minimal()
Σχόλιο
Παρατηρείται αρνητική
συσχέτιση μεταξύ των δύο μεταβλητών, δηλαδή όσο
μεγαλύτερη είναι η απόσταση από τον πλησιέστερο σταθμό του
μετρό, τόσο μικρότερη η τιμή του ακινήτου. Αυτό είναι λογικό,
αφού η εύκολη πρόσβαση στις συγκοινωνίες αυξάνει την
εμπορική αξία.
ggplot(realEstate, aes(as.factor(NoConvinienceStores), SQMprice)) +
geom_boxplot(fill = "tomato") +
labs(title = "Κατανομή Τιμής ανά τ.μ. vs Αριθμός Καταστημάτων",
x = "Αριθμός Convenience Stores",
y = "Τιμή ανά τ.μ.($)") +
theme_minimal()
Σχόλιο
Βλέπουμε ότι σε περιοχές με
περισσότερα καταστήματα, η τιμή των ακινήτων τείνει να είναι
υψηλότερη. Η ύπαρξη υποδομών εξυπηρέτησης
φαίνεται πως παίζει σημαντικό ρόλο στη διαμόρφωση των τιμών.
ggplot(realEstate, aes(HouseAge)) +
geom_histogram(binwidth = 1, fill = "darkgreen", color = "white") +
labs(title = "Κατανομή ηλικίας ακινήτων",
x = "Ηλικία (σε έτη)",
y = "Πλήθος") +
theme_minimal()
Σχόλιο
Η πλειοψηφία των σπιτιών δείχνει πως
είναι σχετικά νεόκτιστα (0-20 ετών), κάτι που μπορεί να
επηρεάζει αυξητικά την τιμή τους. Υπάρχει μικρότερος
αριθμός παλαιότερων ακινήτων.
ggplot(realEstate, aes(as.factor(TransactionDate))) +
geom_bar(fill = "purple") +
labs(title = "Αριθμός συναλλαγών ανά ημερομηνία",
x = "Ημερομηνία συναλλαγής",
y = "Πλήθος συναλλαγών") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 50, hjust = 1))
Σχόλιο
Οι συναλλαγές φαίνεται να
συγκεντρώνονται σε συγκεκριμένες χρονικές περιόδους και πιθανόν
να επηρεάζονται από οικονομικούς ή εποχικούς παράγοντες στην αγορά
ακινήτων.
Ο παρακάτω πίνακας δείχνει τους συντελεστές γραμμικής συσχέτισης (Pearson) μεταξύ των διαφόρων μεταβλητών. Όσο πιο κοντά είναι οι τιμές στο +1 ή -1, τόσο ισχυρότερη είναι η θετική ή η αρνητική γραμμική σχέση αντιστοίχως. Για την κατασκευή των μοντέλων, επιλέγουμε πρώτα τις μεταβλητές που εμφανίζουν τη μεγαλύτερη συσχέτιση (θετική ή αρνητική) με την εξαρτημένη μεταβλητή της ποιότητας (SQMprice), ταξινομώντας τις με φθίνουσα σειρά σύμφωνα με το μέγεθος της συσχέτισής τους.
#Αφαιρούμε την στήλη με την ημερομηνία της συναλλαγής
CorRealEstate <- realEstate[, -1]
cor_matrix <- cor(CorRealEstate)
knitr::kable(round(cor_matrix, 2), caption = "Πίνακας Συσχετίσεων Μεταβλητών")
| HouseAge | MRTdistance | NoConvinienceStores | Latitude | Longitude | SQMprice | |
|---|---|---|---|---|---|---|
| HouseAge | 1.00 | 0.03 | 0.05 | 0.05 | -0.05 | -0.21 |
| MRTdistance | 0.03 | 1.00 | -0.60 | -0.59 | -0.81 | -0.67 |
| NoConvinienceStores | 0.05 | -0.60 | 1.00 | 0.44 | 0.45 | 0.57 |
| Latitude | 0.05 | -0.59 | 0.44 | 1.00 | 0.41 | 0.55 |
| Longitude | -0.05 | -0.81 | 0.45 | 0.41 | 1.00 | 0.52 |
| SQMprice | -0.21 | -0.67 | 0.57 | 0.55 | 0.52 | 1.00 |
Σχόλια
Την ισχυρότερη αρνητική συσχέτιση με την
SQMprice έχει η MRTdistance (r = -0.67)
Τις ισχυρότερες θετικές συσχετίσεις με την τιμή SQMprice έχουν οι
εξής μεταβλητές:
- NoConvinienceStores (r = +0.57)
- Latitude
(r = +0.55)
- Longitude (r = +0.52)
Η HouseAge έχει αδύναμη αρνητική συσχέτιση (-0.21) με την SQMprice και μπορεί να χρησιμοποιηθεί δευτερευόντως.
model1 <- lm(SQMprice ~ MRTdistance, data = realEstate)
summary(model1)
##
## Call:
## lm(formula = SQMprice ~ MRTdistance, data = realEstate)
##
## Residuals:
## Min 1Q Median 3Q Max
## -35.396 -6.007 -1.195 4.831 73.483
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 45.8514271 0.6526105 70.26 <2e-16 ***
## MRTdistance -0.0072621 0.0003925 -18.50 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 10.07 on 412 degrees of freedom
## Multiple R-squared: 0.4538, Adjusted R-squared: 0.4524
## F-statistic: 342.2 on 1 and 412 DF, p-value: < 2.2e-16
ggplot(realEstate, aes(MRTdistance, SQMprice)) +
geom_point() +
geom_abline(intercept = coef(model1)[1], slope = coef(model1)[2], color = "red", linewidth = 1) +
labs(title = "Γραμμική Παλινδρόμηση: Τιμή ανά τ.μ. ~ Απόσταση από σταθμό μετρό",
x = "Απόσταση από σταθμό μετρό (m)", y = "Τιμή ανά τ.μ.($)")
Σχόλια
Όταν το ακίνητο βρίσκεται δίπλα σε
σταθμό μετρό (απόσταση=0), τότε η εκτιμώμενη τιμή ανά τ.μ. είναι περίπου
45,85$. Για κάθε επιπλέον μέτρο απόστασης από τον
σταθμό, η τιμή μειώνεται κατά 0,00726. Το μοντέλο
εξηγεί περίπου το 45.4% της διακύμανσης της τιμής ανά τ.μ.,
μόνο με 1 μεταβλητή. Κατά μέσο όρο, οι πραγματικές τιμές διαφέρουν από
τις προβλεπόμενες κατά περίπου 10 μονάδες.
model2 <- lm(SQMprice ~ NoConvinienceStores, data = realEstate)
summary(model2)
##
## Call:
## lm(formula = SQMprice ~ NoConvinienceStores, data = realEstate)
##
## Residuals:
## Min 1Q Median 3Q Max
## -35.407 -7.341 -1.788 5.984 87.681
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 27.1811 0.9419 28.86 <2e-16 ***
## NoConvinienceStores 2.6377 0.1868 14.12 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 11.18 on 412 degrees of freedom
## Multiple R-squared: 0.326, Adjusted R-squared: 0.3244
## F-statistic: 199.3 on 1 and 412 DF, p-value: < 2.2e-16
ggplot(realEstate, aes(NoConvinienceStores, SQMprice)) +
geom_point() +
geom_abline(intercept = coef(model2)[1], slope = coef(model2)[2], color = "red", linewidth = 1) +
labs(title = "Γραμμική Παλινδρόμηση: Τιμή ανά τ.μ. ~ Πλήθος κοντινών καταστημάτων",
x = "Πλήθος κοντινών καταστημάτων", y = "Τιμή ανά τ.μ.($)")
Σχόλια
Όταν δεν υπάρχουν καταστήματα σε κοντινή
απόσταση από το ακίνητο, τότε η εκτιμώμενη τιμή ανά τ.μ. είναι περίπου
27,18$. Για κάθε επιπλέον κατάστημα κοντά στο ακίνητο,
η τιμή αυξάνεται κατά περίπου 2,64. Το μοντέλο εξηγεί
περίπου το 32.6% της διακύμανσης της τιμής. Είναι χαμηλότερο
από το προηγούμενο μοντέλο με MRTdistance (που είχε R² ≈ 45.4%), άρα το
MRT μπορεί να προβλέψει καλύτερα την τιμή του ακινήτου. Επίσης
παρατηρούμε ελαφρώς μεγαλύτερο σφάλμα πρόβλεψης (11,18) σε
σχέση με το προηγούμενο μοντέλο.
model3 <- lm(SQMprice ~ MRTdistance + NoConvinienceStores + HouseAge, data = realEstate)
summary(model3)
##
## Call:
## lm(formula = SQMprice ~ MRTdistance + NoConvinienceStores + HouseAge,
## data = realEstate)
##
## Residuals:
## Min 1Q Median 3Q Max
## -37.304 -5.430 -1.738 4.325 77.315
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 42.977286 1.384542 31.041 < 2e-16 ***
## MRTdistance -0.005379 0.000453 -11.874 < 2e-16 ***
## NoConvinienceStores 1.297443 0.194290 6.678 7.91e-11 ***
## HouseAge -0.252856 0.040105 -6.305 7.47e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.251 on 410 degrees of freedom
## Multiple R-squared: 0.5411, Adjusted R-squared: 0.5377
## F-statistic: 161.1 on 3 and 410 DF, p-value: < 2.2e-16
Σχόλια
Όταν όλες οι μεταβλητές (MRTdistance,
NoConvinienceStores, HouseAge) είναι μηδενικές, η αναμενόμενη τιμή ανά
τ.μ. είναι 42,97$. Για κάθε μέτρο μακριά από τον σταθμό
του μετρό η τιμή μειώνεται κατά 0.0054, για κάθε
επιπλέον κατάστημα η τιμή αυξάνεται κατά 1.30 και για
κάθε έτος που περνάει μειώνεται η τιμή κατά 0.25. Το
μοντέλο εξηγεί το 54.1% της διακύμανσης των τιμών και το
σφάλμα πρόβλεψης ελλατώνεται στο 9.25. Γενικότερα το μοντέλο
αυτό είναι πιο ισχυρό από τα προηγούμενα δύο, καθώς
περιλαμβάνει σημαντικές μεταβλητές που έχουν τόσο θετική όσο και
αρνητική επίδραση στην τιμή του ακινήτου.
model4 <- lm(SQMprice ~ MRTdistance + NoConvinienceStores + HouseAge + Latitude + Longitude, data = realEstate)
summary(model4)
##
## Call:
## lm(formula = SQMprice ~ MRTdistance + NoConvinienceStores + HouseAge +
## Latitude + Longitude, data = realEstate)
##
## Residuals:
## Min 1Q Median 3Q Max
## -34.546 -5.267 -1.600 4.247 76.372
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -4.946e+03 6.211e+03 -0.796 0.426
## MRTdistance -4.259e-03 7.233e-04 -5.888 8.17e-09 ***
## NoConvinienceStores 1.163e+00 1.902e-01 6.114 2.27e-09 ***
## HouseAge -2.689e-01 3.900e-02 -6.896 2.04e-11 ***
## Latitude 2.378e+02 4.495e+01 5.290 2.00e-07 ***
## Longitude -7.805e+00 4.915e+01 -0.159 0.874
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 8.965 on 408 degrees of freedom
## Multiple R-squared: 0.5712, Adjusted R-squared: 0.5659
## F-statistic: 108.7 on 5 and 408 DF, p-value: < 2.2e-16
Σχόλια
Το μοντέλο αυτό αποτελεί την πιο
πλήρη και ακριβή εκδοχή γραμμικής παλινδρόμησης που
έχουμε έως τώρα, ενσωματώνοντας τόσο δημογραφικές όσο και γεωγραφικές
μεταβλητές. Οι παράγοντες MRTdistance, NoConvinienceStores, HouseAge και
Latitude εμφανίζονται στατιστικά σημαντικοί (p < 0.001), ενώ ο
Longitude δεν επηρεάζει σημαντικά την τιμή ανά τ.μ. (p = 0.874). Το
μοντέλο εξηγεί το 57.1% της διακύμανσης στην τιμή, με σχετικά
χαμηλό σφάλμα (RSE = 8.97), γεγονός που το καθιστά πιο αποτελεσματικό
και ερμηνεύσιμο σε σχέση με τα προηγούμενα μοντέλα.
SSE1 <- sum(model1$residuals^2)
SSE2 <- sum(model2$residuals^2)
SSE3 <- sum(model3$residuals^2)
SSE4 <- sum(model4$residuals^2)
R1 <- summary(model1)$r.squared
R2 <- summary(model2)$r.squared
R3 <- summary(model3)$r.squared
R4 <- summary(model4)$r.squared
results <- data.frame(
Model = c("SQMprice ~ MRTdistance",
"SQMprice ~ NoConvinienceStores",
"SQMprice ~ MRTdistance + NoConvinienceStores + HouseAge",
"SQMprice ~ MRTdistance + NoConvinienceStores + HouseAge + Latitude + Longitude"),
SSE = c(round(SSE1, 2), round(SSE2, 2), round(SSE3, 2), round(SSE4, 2)),
R_Squared = c(round(R1, 4), round(R2, 4), round(R3, 4), round(R4, 4))
)
knitr::kable(results, caption = "Πίνακας SSE και R² για τα Μοντέλα Παλινδρόμησης")
| Model | SSE | R_Squared |
|---|---|---|
| SQMprice ~ MRTdistance | 41766.70 | 0.4538 |
| SQMprice ~ NoConvinienceStores | 51531.40 | 0.3260 |
| SQMprice ~ MRTdistance + NoConvinienceStores + HouseAge | 35090.93 | 0.5411 |
| SQMprice ~ MRTdistance + NoConvinienceStores + HouseAge + Latitude + Longitude | 32789.57 | 0.5712 |
Το τελευταίο μοντέλο που περιλαμβάνει όλες τις ανεξάρτητες αριθμητικές μεταβλητές έχει τη χαμηλότερη SSE (32.789,57) και την υψηλότερη R² (0,5712), γεγονός που σημαίνει ότι εξηγεί καλύτερα τη διακύμανση της εξαρτημένης μεταβλητής (τιμή ανά τ.μ.) σε σχέση με τα υπόλοιπα μοντέλα. Η προσθήκη των γεωγραφικών παραμέτρων (Latitude, Longitude) βελτιώνει σημαντικά την απόδοση του μοντέλου σε σύγκριση με το μοτέλο 3, χωρίς όμως όλες οι μεταβλητές να είναι απαραίτητα στατιστικά σημαντικές (όπως η Longitude, που είχε p > 0,05). Το μοντέλο 3 εξηγεί το 54,1% της διακύμανσης και όλες οι μεταβλητές του είναι στατιστικά σημαντικές, κάτι που το καθιστά πολύ ισορροπημένο και αξιόπιστο. Τα μοντέλα με μία μόνο ανεξάρτητη μεταβλητή (μοντέλα 1 και 2) έχουν χαμηλότερη απόδοση (R² κάτω από 0,5) και δεν επαρκούν για πλήρη ανάλυση.
Με κριτήριο την απόδοση (R², SSE), την ερμηνευσιμότητα και την στατιστική σημαντικότητα των μεταβλητών, το μοντέλο 3 μπορεί να θεωρηθεί βέλτιστο υπό συνθήκες απλότητας και αξιοπιστίας. Το μοτέλο 4 προσφέρει μεγαλύτερη εξήγηση της διακύμανσης αλλά με λίγο περισσότερη πολυπλοκότητα και χωρίς όλες οι μεταβλητές να είναι χρήσιμες.
ggplot(realEstate, aes(SQMprice, fitted(model3))) +
geom_point(color = "steelblue", alpha = 0.6) +
geom_abline(intercept = 0, slope = 1, color = "red", linetype = "dashed", linewidth = 0.7) +
labs(title = "Πραγματικές vs Προβλεπόμενες Τιμές (Μοντέλο 3)",
x = "Πραγματική Τιμή ανά τ.μ.($)",
y = "Προβλεπόμενη Τιμή ανά τ.μ.($)") +
theme_minimal()
Σχόλια
Κάθε σημείο στο διάγραμμα αντιπροσωπεύει
ένα ακίνητο από το dataset. Ο άξονας x δείχνει την πραγματική
τιμή του ακινήτου, ενώ ο άξονας y δείχνει την προβλεπόμενη τιμή
από το μοντέλο. Η κόκκινη διακεκομμένη γραμμή είναι η γραμμή
ταύτισης (y = x). Αν ένα σημείο βρίσκεται πάνω σε αυτήν,
σημαίνει ότι η πρόβλεψη του μοντέλου ήταν ακριβής. Τα περισσότερα σημεία
βρίσκονται κοντά στην κόκκινη διαγώνιο, γεγονός που δείχνει ότι το
μοντέλο προβλέπει ικανοποιητικά τις τιμές των ακινήτων. Υπάρχουν μερικές
αποκλίσεις, ειδικά στις ακραίες τιμές, κάτι που είναι αναμενόμενο σε
πραγματικά δεδομένα. Η γραμμική κατανομή των σημείων και η συμμετρία
γύρω από τη διαγώνιο υποδηλώνουν ότι το μοντέλο δεν παρουσιάζει
συστηματικά σφάλματα πρόβλεψης (bias). Το διάγραμμα υποδεικνύει ότι το
μοντέλο 3 έχει καλή προγνωστική ικανότητα, με τις
περισσότερες προβλεπόμενες τιμές να είναι κοντά στις πραγματικές.