Κατανόηση του DataSet

Η συλλογή δεδομένων που επεξεργαζόμαστε αφορά της αγορές ακινήτων. Στόχος μας να αναπτύξουμε ένα στατιστικό μοντέλο το οποίο θα μπορεί να προβλέψει την αξία ενός ακινήτου ανά τετραγωνικό . Για να το πετύχουμε αυτό , θα εξετάσουμε ανεξάρτητες μεταβλητές όπως :

library(ggplot2)

real_estate <- read.csv("Real estate.csv")
real_estate <- real_estate[,-1]
str(real_estate)
## 'data.frame':    414 obs. of  7 variables:
##  $ X1.transaction.date                   : num  2013 2013 2014 2014 2013 ...
##  $ X2.house.age                          : num  32 19.5 13.3 13.3 5 7.1 34.5 20.3 31.7 17.9 ...
##  $ X3.distance.to.the.nearest.MRT.station: num  84.9 306.6 562 562 390.6 ...
##  $ X4.number.of.convenience.stores       : int  10 9 5 5 5 3 7 6 1 3 ...
##  $ X5.latitude                           : num  25 25 25 25 25 ...
##  $ X6.longitude                          : num  122 122 122 122 122 ...
##  $ Y.house.price.of.unit.area            : num  37.9 42.2 47.3 54.8 43.1 32.1 40.3 46.7 18.8 22.1 ...
head(real_estate)
##   X1.transaction.date X2.house.age X3.distance.to.the.nearest.MRT.station
## 1            2012.917         32.0                               84.87882
## 2            2012.917         19.5                              306.59470
## 3            2013.583         13.3                              561.98450
## 4            2013.500         13.3                              561.98450
## 5            2012.833          5.0                              390.56840
## 6            2012.667          7.1                             2175.03000
##   X4.number.of.convenience.stores X5.latitude X6.longitude
## 1                              10    24.98298     121.5402
## 2                               9    24.98034     121.5395
## 3                               5    24.98746     121.5439
## 4                               5    24.98746     121.5439
## 5                               5    24.97937     121.5425
## 6                               3    24.96305     121.5125
##   Y.house.price.of.unit.area
## 1                       37.9
## 2                       42.2
## 3                       47.3
## 4                       54.8
## 5                       43.1
## 6                       32.1

Διερευνητική Ανάλυση Δεδομένων

Στην συνέχεια θα προχωρήσουμε στην δημιουργία μερικών διαγραμμάτων για να δούμε οπτικά πως σχετίζονται οι ανεξάρτητες μεταβλητές με την τιμή του ακινήτου. Ακόμα θα υπολογίσουμε τις συσχετίσεις για να έχουμε μια μαθηματική εικόνα για τις πιο «δυνατές» μεταβλητές του μοντέλου μας.

Scatterplot: Απόσταση από Μετρό vs Τιμή Ακινήτου

ggplot(real_estate, aes(x = X3.distance.to.the.nearest.MRT.station, y = Y.house.price.of.unit.area)) +
  geom_point(color = "blue", alpha = 0.6) +
  labs(title = "Σχέση Απόστασης από το Μετρό και Τιμής Ακινήτου",
       x = "Απόσταση από σταθμό Μετρό (μέτρα)",
       y = "Τιμή ανά μονάδα εμβαδού") +
  theme_minimal()

Scatterplot: Ηλικία ακινήτου vs Τιμή Ακινήτου

ggplot(real_estate, aes(x = X2.house.age , y= Y.house.price.of.unit.area))+
  geom_point(color= "blue", alpha = 0.6)+
  labs(title = "Σχέση ηλικίας Ακινήτου και την τιμή του",
       x= "Ηλικία ακινήτου",
       y = "Τιμή ανά μονάδα εμβαδού") + 
  theme_minimal()

Boxplot: Αριθμός Καταστημάτων vs Τιμή Ακινήτου

ggplot(real_estate, aes(x = as.factor(X4.number.of.convenience.stores), y = Y.house.price.of.unit.area)) +
  geom_boxplot(fill = "orange", alpha = 0.7) +
  labs(title = "Κατανομή Τιμής Ακινήτου ανάλογα με τον Αριθμό Καταστημάτων",
       x = "Αριθμός καταστημάτων ευκολίας",
       y = "Τιμή ανά μονάδα εμβαδού") +
  theme_minimal()

Απλό μοντέλο παλινδρόμησης

simple_model <- lm(Y.house.price.of.unit.area ~ X3.distance.to.the.nearest.MRT.station, data = real_estate)


summary(simple_model)
## 
## Call:
## lm(formula = Y.house.price.of.unit.area ~ X3.distance.to.the.nearest.MRT.station, 
##     data = real_estate)
## 
## 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
## X3.distance.to.the.nearest.MRT.station -0.0072621  0.0003925  -18.50   <2e-16
##                                           
## (Intercept)                            ***
## X3.distance.to.the.nearest.MRT.station ***
## ---
## 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
SSE_simple <- sum(simple_model$residuals^2)
cat("Το SSE του απλού μοντέλου είναι:", SSE_simple, "\n")
## Το SSE του απλού μοντέλου είναι: 41766.7
RMSE_simple <- sqrt(SSE_simple / nrow(real_estate))
cat("Το RMSE του απλού μοντέλου είναι:", RMSE_simple, "\n")
## Το RMSE του απλού μοντέλου είναι: 10.04419

Προσθήκη μεταβλητών για την βελτιστοποίηση του μοντέλου

model2 <- lm(Y.house.price.of.unit.area ~ X2.house.age + X3.distance.to.the.nearest.MRT.station, data = real_estate)

summary(model2)
## 
## Call:
## lm(formula = Y.house.price.of.unit.area ~ X2.house.age + X3.distance.to.the.nearest.MRT.station, 
##     data = real_estate)
## 
## 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
model3 <- lm(Y.house.price.of.unit.area ~ X2.house.age + X3.distance.to.the.nearest.MRT.station + X4.number.of.convenience.stores, data = real_estate)

summary(model3)
## 
## Call:
## lm(formula = Y.house.price.of.unit.area ~ X2.house.age + X3.distance.to.the.nearest.MRT.station + 
##     X4.number.of.convenience.stores, data = real_estate)
## 
## 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
## X2.house.age                           -0.252856   0.040105  -6.305 7.47e-10
## X3.distance.to.the.nearest.MRT.station -0.005379   0.000453 -11.874  < 2e-16
## X4.number.of.convenience.stores         1.297443   0.194290   6.678 7.91e-11
##                                           
## (Intercept)                            ***
## X2.house.age                           ***
## X3.distance.to.the.nearest.MRT.station ***
## X4.number.of.convenience.stores        ***
## ---
## 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
model4 <- lm(Y.house.price.of.unit.area ~ X2.house.age + X3.distance.to.the.nearest.MRT.station + X4.number.of.convenience.stores + X5.latitude, data = real_estate)

summary(model4)
## 
## Call:
## lm(formula = Y.house.price.of.unit.area ~ X2.house.age + X3.distance.to.the.nearest.MRT.station + 
##     X4.number.of.convenience.stores + X5.latitude, data = real_estate)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -34.522  -5.292  -1.579   4.264  76.466 
## 
## Coefficients:
##                                          Estimate Std. Error t value Pr(>|t|)
## (Intercept)                            -5.916e+03  1.113e+03  -5.317 1.74e-07
## X2.house.age                           -2.687e-01  3.893e-02  -6.903 1.95e-11
## X3.distance.to.the.nearest.MRT.station -4.175e-03  4.928e-04  -8.473 4.37e-16
## X4.number.of.convenience.stores         1.165e+00  1.897e-01   6.141 1.94e-09
## X5.latitude                             2.386e+02  4.456e+01   5.355 1.43e-07
##                                           
## (Intercept)                            ***
## X2.house.age                           ***
## X3.distance.to.the.nearest.MRT.station ***
## X4.number.of.convenience.stores        ***
## X5.latitude                            ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 8.954 on 409 degrees of freedom
## Multiple R-squared:  0.5711, Adjusted R-squared:  0.5669 
## F-statistic: 136.2 on 4 and 409 DF,  p-value: < 2.2e-16
model5 <- lm(Y.house.price.of.unit.area ~ X2.house.age + X3.distance.to.the.nearest.MRT.station + X4.number.of.convenience.stores + X5.latitude + X6.longitude, data = real_estate)

summary(model5)
## 
## Call:
## lm(formula = Y.house.price.of.unit.area ~ X2.house.age + X3.distance.to.the.nearest.MRT.station + 
##     X4.number.of.convenience.stores + X5.latitude + X6.longitude, 
##     data = real_estate)
## 
## 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
## X2.house.age                           -2.689e-01  3.900e-02  -6.896 2.04e-11
## X3.distance.to.the.nearest.MRT.station -4.259e-03  7.233e-04  -5.888 8.17e-09
## X4.number.of.convenience.stores         1.163e+00  1.902e-01   6.114 2.27e-09
## X5.latitude                             2.378e+02  4.495e+01   5.290 2.00e-07
## X6.longitude                           -7.805e+00  4.915e+01  -0.159    0.874
##                                           
## (Intercept)                               
## X2.house.age                           ***
## X3.distance.to.the.nearest.MRT.station ***
## X4.number.of.convenience.stores        ***
## X5.latitude                            ***
## X6.longitude                              
## ---
## 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

Υπολογισμός SSE κ RMSE για το βέλτιστο μοντέλο

SSE_multi <- sum(model4$residuals^2)
cat("Το SSE του πολλαπλού μοντέλου είναι:", SSE_multi, "\n")
## Το SSE του πολλαπλού μοντέλου είναι: 32791.59
RMSE_multi <- sqrt(SSE_multi / nrow(real_estate))
cat("Το RMSE του πολλαπλού μοντέλου είναι:", RMSE_multi, "\n")
## Το RMSE του πολλαπλού μοντέλου είναι: 8.899817

Συμπεράσματα :

Από την παραπάνω διερευνητική ανάλυση και τα οπτικά μέσα που χρησιμοποιήσαμε , εξάγουμε τα εξής συμπεράσματα πριν καν προχωρήσουμε την μοντελοποίηση:

  1. Διάγραμμα Διασποράς (X2.house.age): Εξετάζοντας τη σχέση μεταξύ της ηλικίας του ακινήτου και της τιμής του, παρατηρούμε μια γενικά αρνητική τάση, αν και με αρκετή διασπορά. Τα νεόδμητα σπίτια (ηλικίας 0-5 ετών) τείνουν να συγκεντρώνουν τις υψηλότερες τιμές πώλησης. Καθώς η ηλικία αυξάνεται, η τιμή φαίνεται να υποχωρεί σταδιακά, γεγονός που είναι απολύτως λογικό στην αγορά ακινήτων λόγω παλαιότητας και ανάγκης για μελλοντικές ανακαινίσεις.

  2. Διάγραμμα Διασποράς (X3.distance.to.the.nearest.MRT.station): Οπτικοποιώντας τη σχέση τιμής και απόστασης από το μετρό, επιβεβαιώνεται η αρνητική τάση. Παρατηρούμε ότι τα ακίνητα που βρίσκονται σε ακτίνα κάτω των 1000 μέτρων από το μετρό έχουν αισθητά υψηλότερες τιμές, ενώ καθώς η απόσταση αυξάνεται, οι τιμές συμπιέζονται προς τα κάτω.

  3. Θηκόγραμμα (X4.number.of.convenience.stores): Η ανάλυση της τιμής σε σχέση με τον αριθμό των καταστημάτων δείχνει μια σαφή, κλιμακωτή αύξηση της διάμεσης τιμής (η μεσαία γραμμή στα “κουτιά”) όσο αυξάνονται τα διαθέσιμα καταστήματα στη γύρω περιοχή. Αυτό υποδεικνύει ότι η εμπορικότητα της περιοχής αποτελεί ισχυρό παράγοντα διαμόρφωσης της αξίας των ακινήτων.

Προχορώντας στα συμπεράσματα από το κομμάτι της μοντελοποίσης:

  1. Επιλογή μεταβλητών: Το βέλτιστο μοντέλο μας χρησιμοποιεί 4 ανεξάρτητες μεταβλητές (ηλικία, απόσταση από μετρό, αριθμός καταστημάτων, γεωγραφικό πλάτος).Όλες αυτές οι μεταβλητές είναι στατιστικά σημαντικές (p-value< 0.05).

  2. Ερμηνεία R-squared: Το Multiple R-squared του μοντέλου (model4) ανέρχεται περίπου στο 0.5669, που σημαίνει ότι το 56.69% της μεταβλητότητας στην τιμή των ακινήτων εξηγείται από αυτόν τον συνδυασμό παραγόντων.Είναι μια σημαντική βελτιώση σε σχέση με το απλό μοντέλο (που είχε μόνο την απόσταση από το μετρό).

  3. Σύγκριση Σφαλμάτων (SSE): Το SSE μειώθηκε αισθητά σε σχέση με το αρχικό μοντέλο απλής παλιδρόμησης, υποδεικνύοντας ότι οι προβλέψεις μας είναι πλέον πολύ πιο κοντά στις πραγματικές τιμές. Αφαιρώντας τις μη σημαντικές μεταβλητές από το αρχικό πολλαπλό μοντέλο, καταφέραμε να διατηρήσουμε την ακρίβεια αποφεύγοντας το overfitting