Το Real Estate Dataset αφορά την αγορά ακινήτων και περιλαμβάνει πληροφορίες για 414 ιδιοκτησίες. Είναι ιδανικό για αναλύσεις όπως πρόβλεψη τιμών ακινήτων.
Πηγή: Το dataset διατίθεται από το Kaggle.
Περιέχει 414 παρατηρήσεις (γραμμές) και 8 μεταβλητές (στήλες)
| Μεταβλητή | Περιγραφή | Τύπος |
|---|---|---|
| No | Αύξων αριθμός καταγραφής | Αριθμητική - Διακριτή |
| X1 transaction date | Ημερομηνία συναλλαγής (σε έτη) | Αριθμητική - Συνεχής |
| X2 house age | Ηλικία του ακινήτου (σε έτη) | Αριθμητική - Συνεχής |
| X3 distance to the nearest MRT station | Απόσταση από τον πλησιέστερο σταθμό MRT (σε μέτρα) | Αριθμητική - Συνεχής |
| X4 number of convenience stores | Αριθμός κοντινών καταστημάτων | Αριθμητική - Διακριτή |
| X5 latitude | Γεωγραφικό πλάτος του ακινήτου | Αριθμητική - Συνεχής |
| X6 longitude | Γεωγραφικό μήκος του ακινήτου | Αριθμητική - Συνεχής |
| Y house price of unit area | Τιμή ανά μονάδα επιφάνειας (π.χ. NT$/m²) | Αριθμητική - Συνεχής |
library(readr)
Real_Estate_Dataset <- read.csv("Real Estate.csv")
summary(Real_Estate_Dataset)
## No X1.transaction.date X2.house.age
## Min. : 1.0 Min. :2013 Min. : 0.000
## 1st Qu.:104.2 1st Qu.:2013 1st Qu.: 9.025
## Median :207.5 Median :2013 Median :16.100
## Mean :207.5 Mean :2013 Mean :17.713
## 3rd Qu.:310.8 3rd Qu.:2013 3rd Qu.:28.150
## Max. :414.0 Max. :2014 Max. :43.800
## X3.distance.to.the.nearest.MRT.station X4.number.of.convenience.stores
## Min. : 23.38 Min. : 0.000
## 1st Qu.: 289.32 1st Qu.: 1.000
## Median : 492.23 Median : 4.000
## Mean :1083.89 Mean : 4.094
## 3rd Qu.:1454.28 3rd Qu.: 6.000
## Max. :6488.02 Max. :10.000
## X5.latitude X6.longitude Y.house.price.of.unit.area
## 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(Real_Estate_Dataset, aes(x = X2.house.age, y = X3.distance.to.the.nearest.MRT.station)) +
geom_point(color = "#E74C3C") +
labs(
x = "Ηλικία Ακινήτου (έτη)",
y = "Απόσταση από Σταθμό MRT (μέτρα)"
) +
theme_minimal(base_size = 14) +
theme(axis.title = element_text(face="bold"),
axis.text = element_text(color="black"),
panel.grid.major = element_line(color="gray80", linetype="dashed"))
Figure 2.1: ScatterPlot: Ηλικία Ακινήτου - Απόσταση από Σταθμό
Όπως φαίνεται στο Scatterplot 2.1, υπάρχει μεγάλη διασπορά σε όλες τις ηλικίες, δηλαδή και παλιά και νέα ακίνητα είναι τόσο κοντά όσο και μακριά από MRT. Η πλειοψηφία των ακινήτων, ανεξαρτήτως ηλικίας, φαίνεται να συγκεντρώνεται κάτω από τα 2000 μέτρα απόσταση. Τα ακίνητα με πολύ μεγάλη απόσταση (π.χ. >4000m) είναι σπάνια, και εμφανίζονται σε διαφορετικές ηλικίες.
ggplot(Real_Estate_Dataset, aes(x=X5.latitude)) +
geom_histogram(bins=30, color="black", fill="#69b3a2") +
labs(x="Πλάτος", y="Συχνότητα") +
theme_minimal(base_size = 14) +
theme(plot.title = element_text(hjust=0.5, face="bold"),
axis.title = element_text(face="bold"),
axis.text = element_text(color="black"),
panel.grid.major = element_line(color="gray80", linetype="dashed"))
Figure 2.2: Histogram: Κατανομή Πλάτους
Όπως φαίνεται στο Histogram 2.2, τα περισσότερα ακίνητα εντοπίζονται σε πολύ περιορισμένο γεωγραφικό εύρος, με κέντρο γύρω στο 24.975. Παρατηρείται επίσης μικρή παρουσία ακινήτων σε πιο απομακρυσμένες περιοχές.
price_range <- range(Real_Estate_Dataset$Y.house.price.of.unit.area, na.rm = TRUE)
Real_Estate_Dataset <- Real_Estate_Dataset %>%
mutate(PriceCategory = cut(Y.house.price.of.unit.area,
breaks = seq(floor(price_range[1]), ceiling(price_range[2]) + 5, by = 5),
include.lowest = TRUE,
right = FALSE))
ggplot(Real_Estate_Dataset, aes(x = PriceCategory)) +
geom_bar(fill = "purple", color = "black", width = 0.8) +
labs(x = "Τιμή ανά Μονάδα Επιφάνειας (κατηγορίες)", y = "Συχνότητα") +
theme_minimal(base_size = 12) +
theme(axis.text.x = element_text(angle = 45, hjust = 1), axis.text = element_text(color="black"))
Figure 2.3: Barchart: Κατανομή Τιμής ανά μονάδα Επιφάνειας
Όπως φαίνεται στο Barchart 2.3, οι τιμές ανά μονάδα επιφάνειας συγκεντρώνονται κυρίως στο εύρος [30, 50), το οποίο περιλαμβάνει τις περισσότερες παρατηρήσεις. Η κατανομή είναι ασύμμετρη, με εμφανή ουρά προς τα δεξιά (right-skewed). Η πλειονότητα των ακινήτων διατίθεται σε μεσαίες τιμές ανά μονάδα επιφάνειας. Υπάρχουν λίγα, αλλά πολύ ακριβά ακίνητα, που μπορεί να επηρεάζουν τον μέσο όρο προς τα πάνω.
m1 <- lm(Y.house.price.of.unit.area ~ X2.house.age, Real_Estate_Dataset)
summary(m1)
##
## Call:
## lm(formula = Y.house.price.of.unit.area ~ X2.house.age, data = Real_Estate_Dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -31.113 -10.738 1.626 8.199 77.781
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 42.43470 1.21098 35.042 < 2e-16 ***
## X2.house.age -0.25149 0.05752 -4.372 1.56e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 13.32 on 412 degrees of freedom
## Multiple R-squared: 0.04434, Adjusted R-squared: 0.04202
## F-statistic: 19.11 on 1 and 412 DF, p-value: 1.56e-05
SSE1 <- sum(m1$residuals^2)
ggplot(Real_Estate_Dataset, aes(X2.house.age, Y.house.price.of.unit.area)) +
geom_point() + labs(x = "Ηλικία Ακινήτου", y = "Τιμή ανά Μονάδα Επιφάνειας") + geom_abline(aes(intercept = coef(m1)[1], slope = coef(m1)[2]), colour = "red")
Η αρνητική κλίση της κόκκινης γραμμής δείχνει ότι υπάρχει αρνητική γραμμική σχέση μεταξύ της ηλικίας του ακινήτου και της τιμής ανά μονάδα επιφάνειας. Δηλαδή, όσο αυξάνεται η ηλικία του ακινήτου, τόσο μειώνεται η τιμή του ανά τετραγωνικό μέτρο. Επίσης, R-squared: 0.044 ή 4.4% που είναι αρκετά μικρό.
m2 <- lm(Y.house.price.of.unit.area ~ X2.house.age + X3.distance.to.the.nearest.MRT.station, Real_Estate_Dataset)
summary(m2)
##
## Call:
## lm(formula = Y.house.price.of.unit.area ~ X2.house.age + X3.distance.to.the.nearest.MRT.station,
## data = Real_Estate_Dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -36.032 -4.742 -1.037 4.533 71.930
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 49.8855858 0.9677644 51.547 < 2e-16
## X2.house.age -0.2310266 0.0420383 -5.496 6.84e-08
## X3.distance.to.the.nearest.MRT.station -0.0072086 0.0003795 -18.997 < 2e-16
##
## (Intercept) ***
## X2.house.age ***
## X3.distance.to.the.nearest.MRT.station ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.73 on 411 degrees of freedom
## Multiple R-squared: 0.4911, Adjusted R-squared: 0.4887
## F-statistic: 198.3 on 2 and 411 DF, p-value: < 2.2e-16
SSE2 <- sum(m2$residuals^2)
Με την προσθήκη της μεταβλητής “Distance to MRT” (M2), το R-squared εκτοξεύεται στο 0.4911 ή 49.1%, που σημαίνει ότι η απόσταση από σταθμό μετρό εξηγεί πολύ μεγάλο μέρος της τιμής.
m3 <- lm(Y.house.price.of.unit.area ~ X2.house.age + X3.distance.to.the.nearest.MRT.station + X1.transaction.date, Real_Estate_Dataset)
summary(m3)
##
## Call:
## lm(formula = Y.house.price.of.unit.area ~ X2.house.age + X3.distance.to.the.nearest.MRT.station +
## X1.transaction.date, data = Real_Estate_Dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -37.272 -5.393 -0.571 4.641 70.668
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.278e+04 3.370e+03 -3.794 0.000171
## X2.house.age -2.336e-01 4.137e-02 -5.645 3.08e-08
## X3.distance.to.the.nearest.MRT.station -7.295e-03 3.741e-04 -19.501 < 2e-16
## X1.transaction.date 6.375e+00 1.674e+00 3.808 0.000161
##
## (Intercept) ***
## X2.house.age ***
## X3.distance.to.the.nearest.MRT.station ***
## X1.transaction.date ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.574 on 410 degrees of freedom
## Multiple R-squared: 0.5085, Adjusted R-squared: 0.5049
## F-statistic: 141.4 on 3 and 410 DF, p-value: < 2.2e-16
SSE3 <- sum(m3$residuals^2)
Η ημερομηνία συναλλαγής (M3), προσθέτει επιπλέον πληροφορία, ανεβάζοντας το R-squared σε 0.5085 ή 50.9%. Δείχνει ότι και ο χρόνος έχει κάποια σημασία (πιθανόν λόγω αλλαγών στην αγορά).
m4 <- lm(Y.house.price.of.unit.area ~ X2.house.age + X3.distance.to.the.nearest.MRT.station + X1.transaction.date + X5.latitude, Real_Estate_Dataset)
summary(m4)
##
## Call:
## lm(formula = Y.house.price.of.unit.area ~ X2.house.age + X3.distance.to.the.nearest.MRT.station +
## X1.transaction.date + X5.latitude, data = Real_Estate_Dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -34.218 -5.269 -0.700 4.433 70.502
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.767e+04 3.359e+03 -5.262 2.30e-07
## X2.house.age -2.530e-01 4.001e-02 -6.323 6.71e-10
## X3.distance.to.the.nearest.MRT.station -5.764e-03 4.493e-04 -12.829 < 2e-16
## X1.transaction.date 5.570e+00 1.619e+00 3.440 0.000642
## X5.latitude 2.607e+02 4.569e+01 5.705 2.23e-08
##
## (Intercept) ***
## X2.house.age ***
## X3.distance.to.the.nearest.MRT.station ***
## X1.transaction.date ***
## X5.latitude ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.225 on 409 degrees of freedom
## Multiple R-squared: 0.5448, Adjusted R-squared: 0.5403
## F-statistic: 122.4 on 4 and 409 DF, p-value: < 2.2e-16
SSE4 <- sum(m4$residuals^2)
Το γεωγραφικό πλάτος (Latitude) στο M4 βελτιώνει κι άλλο το μοντέλο (R-squared ≈ 0.5448 ή 54.5%), που δείχνει ότι η θέση βόρεια-νότια παίζει ρόλο στην τιμολόγηση.
m5 <- lm(Y.house.price.of.unit.area ~ X2.house.age + X3.distance.to.the.nearest.MRT.station + X1.transaction.date + X5.latitude + X6.longitude, Real_Estate_Dataset)
summary(m5)
##
## Call:
## lm(formula = Y.house.price.of.unit.area ~ X2.house.age + X3.distance.to.the.nearest.MRT.station +
## X1.transaction.date + X5.latitude + X6.longitude, data = Real_Estate_Dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -34.325 -5.319 -0.805 4.468 70.164
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.400e+04 7.062e+03 -1.983 0.048029
## X2.house.age -2.539e-01 4.007e-02 -6.336 6.26e-10
## X3.distance.to.the.nearest.MRT.station -6.078e-03 6.960e-04 -8.733 < 2e-16
## X1.transaction.date 5.595e+00 1.621e+00 3.451 0.000616
## X5.latitude 2.571e+02 4.613e+01 5.573 4.56e-08
## X6.longitude -2.986e+01 5.055e+01 -0.591 0.555098
##
## (Intercept) *
## X2.house.age ***
## X3.distance.to.the.nearest.MRT.station ***
## X1.transaction.date ***
## X5.latitude ***
## X6.longitude
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.233 on 408 degrees of freedom
## Multiple R-squared: 0.5451, Adjusted R-squared: 0.5396
## F-statistic: 97.8 on 5 and 408 DF, p-value: < 2.2e-16
SSE5 <- sum(m5$residuals^2)
Η προσθήκη του γεωγραφικού μήκους (Longitude) στο M5 δεν βελτιώνει σημαντικά το μοντέλο όπου το R-squared παραμένει ουσιαστικά σταθερό με 0.5451 ή 54.5%.
model_summary <- data.frame(
Model = paste0("M", 1:5),
Variables = c(
"Age",
"Age + Distance",
"Age + Distance + Date",
"Age + Distance + Date + Latitude",
"Age + Distance + Date + Latitude + Longitude"
),
SSE = c(SSE1, SSE2, SSE3, SSE4, SSE5),
R_squared = c(summary(m1)$r.squared,
summary(m2)$r.squared,
summary(m3)$r.squared,
summary(m4)$r.squared,
summary(m5)$r.squared)
)
knitr::kable(model_summary, caption = "Σύγκριση μοντέλων παλινδρόμησης")
| Model | Variables | SSE | R_squared |
|---|---|---|---|
| M1 | Age | 73071.20 | 0.0443385 |
| M2 | Age + Distance | 38907.62 | 0.4911467 |
| M3 | Age + Distance + Date | 37578.30 | 0.5085323 |
| M4 | Age + Distance + Date + Latitude | 34808.29 | 0.5447599 |
| M5 | Age + Distance + Date + Latitude + Longitude | 34778.55 | 0.5451488 |
Κύρια Συμπεράσματα: