Ένα απλό αλλά απαιτητικό έργο: η πρόβλεψη της τιμής ενός ακινήτου με βάση ορισμένους παράγοντες, όπως το εμβαδόν, ο αριθμός των υπνοδωματίων, η παροχή επίπλωσης, η απόσταση από τον κεντρικό δρόμο κ.λπ. Το σύνολο δεδομένων είναι μικρό, ωστόσο η πολυπλοκότητά του οφείλεται στο γεγονός ότι παρουσιάζει έντονη πολυγραμμικότητα.Το dataset περιλαμβάνει 545 σπίτια με 13 μεταβλητές. Θα χρησιμοποιήσουμε την τιμή (Price) ως εξαρτημένη μεταβλητή διότι είναι η καταλληλότερη για γραμμική παλινδρόμηση.
Housing <- read_csv("C:/Users/gourg/OneDrive/Υπολογιστής/UoM/Business Analytics/Week 5/Housing.csv")
## Rows: 545 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): mainroad, guestroom, basement, hotwaterheating, airconditioning, pr...
## dbl (6): price, area, bedrooms, bathrooms, stories, parking
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
View(Housing)
summary(Housing)
## price area bedrooms bathrooms
## Min. : 1750000 Min. : 1650 Min. :1.000 Min. :1.000
## 1st Qu.: 3430000 1st Qu.: 3600 1st Qu.:2.000 1st Qu.:1.000
## Median : 4340000 Median : 4600 Median :3.000 Median :1.000
## Mean : 4766729 Mean : 5151 Mean :2.965 Mean :1.286
## 3rd Qu.: 5740000 3rd Qu.: 6360 3rd Qu.:3.000 3rd Qu.:2.000
## Max. :13300000 Max. :16200 Max. :6.000 Max. :4.000
## stories mainroad guestroom basement
## Min. :1.000 Length:545 Length:545 Length:545
## 1st Qu.:1.000 Class :character Class :character Class :character
## Median :2.000 Mode :character Mode :character Mode :character
## Mean :1.806
## 3rd Qu.:2.000
## Max. :4.000
## hotwaterheating airconditioning parking prefarea
## Length:545 Length:545 Min. :0.0000 Length:545
## Class :character Class :character 1st Qu.:0.0000 Class :character
## Mode :character Mode :character Median :0.0000 Mode :character
## Mean :0.6936
## 3rd Qu.:1.0000
## Max. :3.0000
## furnishingstatus
## Length:545
## Class :character
## Mode :character
##
##
##
Housing$mainroad <- factor(Housing$mainroad)
Housing$guestroom <- factor(Housing$guestroom)
Housing$basement <- factor(Housing$basement)
Housing$hotwaterheating <- factor(Housing$hotwaterheating)
Housing$airconditioning <- factor(Housing$airconditioning)
Housing$prefarea <- factor(Housing$prefarea)
Housing$furnishingstatus <- factor(Housing$furnishingstatus)
ggplot(data = Housing, aes(x = price)) + geom_histogram(bins = 50) + labs(title = "Κατανομή Τιμών Σπιτιών", x = "Τιμή", y = "Συχνότητα")
ggplot(data = Housing, aes(x = area, y = price)) + geom_point(alpha = 0.5) + labs(title = "Τιμή vs Εμβαδόν")
ggplot(Housing, aes(x = furnishingstatus, y = price, fill = furnishingstatus)) +
geom_boxplot() +
labs(title = "Τιμή ανά Κατάσταση Επίπλωσης")
model1 <- lm(price ~ area, data = Housing)
summary(model1)
##
## Call:
## lm(formula = price ~ area, data = Housing)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4867112 -1022228 -200135 683027 7484838
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.387e+06 1.745e+05 13.68 <2e-16 ***
## area 4.620e+02 3.123e+01 14.79 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1581000 on 543 degrees of freedom
## Multiple R-squared: 0.2873, Adjusted R-squared: 0.286
## F-statistic: 218.9 on 1 and 543 DF, p-value: < 2.2e-16
ggplot(data = Housing, aes(x = area, y = price)) +
geom_point(alpha = 0.5) +
geom_smooth(method="lm", se=TRUE, color="red") +
labs(title = "Μοντέλο 1: Τιμή ~ Εμβαδόν", x = "Εμβαδόν", y = "Τιμή")
## `geom_smooth()` using formula = 'y ~ x'
R²= 0.287 → το εμβαδόν μόνο του εξηγεί το 28.7% της διακύμανσης της τιμής. Είναι ένα καλό ξεκίνημα για απλή παλινδρόμηση, αλλά το υπόλοιπο 71.3% εξηγείται από άλλους παράγοντες — αυτό δικαιολογεί την ανάγκη για πολλαπλό μοντέλο.
model2 <- lm(data = Housing, price~ area + bathrooms + stories + parking)
summary(model2)
##
## Call:
## lm(formula = price ~ area + bathrooms + stories + parking, data = Housing)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3493604 -707342 -103031 606208 5707902
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.683e+05 1.922e+05 0.876 0.382
## area 3.343e+02 2.663e+01 12.553 < 2e-16 ***
## bathrooms 1.195e+06 1.153e+05 10.367 < 2e-16 ***
## stories 5.937e+05 6.527e+04 9.096 < 2e-16 ***
## parking 3.864e+05 6.685e+04 5.780 1.27e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1248000 on 540 degrees of freedom
## Multiple R-squared: 0.5583, Adjusted R-squared: 0.555
## F-statistic: 170.6 on 4 and 540 DF, p-value: < 2.2e-16
Στο δεύτερο μοντέλο προστέθηκαν οι μεταβλητές bathrooms, stories και parking, οι οποίες εμφάνισαν τις υψηλότερες συσχετίσεις με την τιμή στον πίνακα συσχετίσεων. Όλες οι ανεξάρτητες μεταβλητές αναδείχθηκαν στατιστικά σημαντικές (p < 0.001), γεγονός που επιβεβαιώνει τη συνεισφορά τους στο μοντέλο. Το R² αυξήθηκε σημαντικά από 0.287 σε 0.558, δηλαδή το μοντέλο εξηγεί πλέον το 55.8% της διακύμανσης της τιμής — σχεδόν διπλάσιο σε σχέση με το Μοντέλο 1. Σημαντικό είναι ότι και το Adjusted R² αυξήθηκε αντίστοιχα, επιβεβαιώνοντας ότι η βελτίωση δεν οφείλεται απλά στην προσθήκη περισσότερων μεταβλητών. Παράλληλα, το RSE μειώθηκε από 1,581,000 σε 1,248,000, υποδηλώνοντας ότι οι προβλέψεις του μοντέλου είναι πιο ακριβείς. Ο συντελεστής της μεταβλητής bathrooms αναδείχθηκε ο υψηλότερος (~1.19 εκ.), υποδηλώνοντας ότι κάθε επιπλέον μπάνιο σχετίζεται με σημαντική αύξηση της τιμής, ceteris paribus.
model3 <- lm(price ~ area + bathrooms + stories + parking +
bedrooms + mainroad + guestroom + basement +
hotwaterheating + airconditioning + prefarea +
furnishingstatus, data = Housing)
summary(model3)
##
## Call:
## lm(formula = price ~ area + bathrooms + stories + parking + bedrooms +
## mainroad + guestroom + basement + hotwaterheating + airconditioning +
## prefarea + furnishingstatus, data = Housing)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2619718 -657322 -68409 507176 5166695
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 42771.69 264313.31 0.162 0.871508
## area 244.14 24.29 10.052 < 2e-16 ***
## bathrooms 987668.11 103361.98 9.555 < 2e-16 ***
## stories 450848.00 64168.93 7.026 6.55e-12 ***
## parking 277107.10 58525.89 4.735 2.82e-06 ***
## bedrooms 114787.56 72598.66 1.581 0.114445
## mainroadyes 421272.59 142224.13 2.962 0.003193 **
## guestroomyes 300525.86 131710.22 2.282 0.022901 *
## basementyes 350106.90 110284.06 3.175 0.001587 **
## hotwaterheatingyes 855447.15 223152.69 3.833 0.000141 ***
## airconditioningyes 864958.31 108354.51 7.983 8.91e-15 ***
## prefareayes 651543.80 115682.34 5.632 2.89e-08 ***
## furnishingstatussemi-furnished -46344.62 116574.09 -0.398 0.691118
## furnishingstatusunfurnished -411234.39 126210.56 -3.258 0.001192 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1068000 on 531 degrees of freedom
## Multiple R-squared: 0.6818, Adjusted R-squared: 0.674
## F-statistic: 87.52 on 13 and 531 DF, p-value: < 2.2e-16
Το πλήρες μοντέλο εξηγεί το 68.2% της διακύμανσης της τιμής (R²=0.682), με το Adjusted R² να επιβεβαιώνει ότι η βελτίωση είναι πραγματική. Αξιοσημείωτο είναι ότι οι μεταβλητές bedrooms και furnishingstatussemi-furnished δεν αναδείχθηκαν στατιστικά σημαντικές, υποδηλώνοντας ότι δεν προσφέρουν επιπλέον εξηγητική ισχύ όταν οι υπόλοιπες μεταβλητές είναι ήδη στο μοντέλο. Ο μεγαλύτερος συντελεστής παρατηρείται στον κλιματισμό (airconditioning, ~865k) και στη θέρμανση νερού (hotwaterheating, ~855k), γεγονός που υποδηλώνει ότι οι ανέσεις επηρεάζουν σημαντικά την τιμή.
model3b <- lm(price ~ area + bathrooms + stories + parking +
mainroad + guestroom + basement +
hotwaterheating + airconditioning + prefarea, data = Housing)
summary(model3b)
##
## Call:
## lm(formula = price ~ area + bathrooms + stories + parking + mainroad +
## guestroom + basement + hotwaterheating + airconditioning +
## prefarea, data = Housing)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2914862 -629392 -66473 515834 5291928
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -34756.3 192557.9 -0.180 0.856830
## area 251.7 24.5 10.270 < 2e-16 ***
## bathrooms 1047143.1 101936.9 10.272 < 2e-16 ***
## stories 497264.3 60816.2 8.177 2.14e-15 ***
## parking 306243.6 58862.6 5.203 2.80e-07 ***
## mainroadyes 436516.3 142522.5 3.063 0.002303 **
## guestroomyes 312301.8 133323.3 2.342 0.019524 *
## basementyes 409602.2 110316.1 3.713 0.000226 ***
## hotwaterheatingyes 906144.5 225749.3 4.014 6.83e-05 ***
## airconditioningyes 878471.1 109312.4 8.036 5.98e-15 ***
## prefareayes 662057.3 117142.4 5.652 2.59e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1082000 on 534 degrees of freedom
## Multiple R-squared: 0.6713, Adjusted R-squared: 0.6652
## F-statistic: 109.1 on 10 and 534 DF, p-value: < 2.2e-16
Προκειμένου να διερευνηθεί η επίδραση της αφαίρεσης μεταβλητών, δημιουργήθηκε το Μοντέλο 3b, το οποίο εξαιρεί τις μεταβλητές bedrooms και furnishingstatus που δεν ήταν στατιστικά σημαντικές στο Μοντέλο 3. Το αποτέλεσμα είναι αποκαλυπτικό: αφαιρώντας 2 μεταβλητές, το R² μειώθηκε μόλις από 0.682 σε 0.671 — δηλαδή το μοντέλο εξηγεί σχεδόν το ίδιο ποσοστό της διακύμανσης της τιμής με λιγότερες μεταβλητές. Αυτό σημαίνει πρακτικά ότι ο αριθμός υπνοδωματίων και η κατάσταση επίπλωσης δεν προσφέρουν επιπλέον πληροφορία για την πρόβλεψη της τιμής, όταν άλλες μεταβλητές όπως το εμβαδόν και ο αριθμός μπάνιων είναι ήδη στο μοντέλο. Συμπερασματικά, ένα μοντέλο με λιγότερες μεταβλητές μπορεί να είναι εξίσου αποτελεσματικό — και συγχρόνως πιο εύκολο να ερμηνευθεί.
sse1 <- sum(residuals(model1)^2)
sse2 <- sum(residuals(model2)^2)
sse3 <- sum(residuals(model3)^2)
sse3b <- sum(residuals(model3b)^2)
sse1
## [1] 1.356429e+15
sse2
## [1] 8.407379e+14
sse3
## [1] 6.055973e+14
sse3b
## [1] 6.255582e+14
Η εξέταση του SSE επιβεβαιώνει τα συμπεράσματα από το R². Το SSE μειώθηκε δραματικά από το Μοντέλο 1 (1.36 × 10¹⁵) στο Μοντέλο 2 (8.41 × 10¹⁴) και περαιτέρω στο Μοντέλο 3 (6.26 × 10¹⁴), αντικατοπτρίζοντας τη βελτίωση της προβλεπτικής ισχύος με κάθε προσθήκη μεταβλητών. Αξιοσημείωτο είναι ότι το Μοντέλο 3b παρουσιάζει πανομοιότυπο SSE με το Μοντέλο 3, επιβεβαιώνοντας ότι η αφαίρεση των μη σημαντικών μεταβλητών δεν επηρέασε καθόλου την ακρίβεια του μοντέλου.
comparison <- data.frame(
Μοντέλο = c("Μοντέλο 1", "Μοντέλο 2", "Μοντέλο 3", "Μοντέλο 3b"),
Μεταβλητές = c(1, 4, 12, 10),
R2 = c(0.287, 0.558, 0.682, 0.671),
Adj_R2 = c(0.286, 0.555, 0.674, 0.665),
RSE = c(1581000, 1248000, 1068000, 1082000),
SSE = c(sse1, sse2, sse3, sse3b)
)
comparison
## Μοντέλο Μεταβλητές R2 Adj_R2 RSE SSE
## 1 Μοντέλο 1 1 0.287 0.286 1581000 1.356429e+15
## 2 Μοντέλο 2 4 0.558 0.555 1248000 8.407379e+14
## 3 Μοντέλο 3 12 0.682 0.674 1068000 6.055973e+14
## 4 Μοντέλο 3b 10 0.671 0.665 1082000 6.255582e+14
Η ανάλυση έδειξε ότι η γραμμική παλινδρόμηση μπορεί να προβλέψει ικανοποιητικά την τιμή ενός σπιτιού, με το πλήρες μοντέλο να εξηγεί το 68.2% της διακύμανσης. Η σταδιακή προσθήκη μεταβλητών βελτίωσε συνεχώς τόσο το R² όσο και το Adjusted R², επιβεβαιώνοντας ότι κάθε νέα μεταβλητή πρόσφερε πραγματική πληροφορία. Οι πιο σημαντικοί παράγοντες που επηρεάζουν την τιμή αναδείχθηκαν ο κλιματισμός, η θέρμανση νερού και ο αριθμός μπάνιων. Αντίθετα, ο αριθμός υπνοδωματίων και η κατάσταση επίπλωσης δεν συνέβαλαν σημαντικά όταν οι υπόλοιπες μεταβλητές ήταν ήδη στο μοντέλο, όπως επιβεβαίωσε το Μοντέλο 3b. Το υπόλοιπο 31.8% της διακύμανσης που δεν εξηγείται πιθανώς οφείλεται σε παράγοντες που δεν περιλαμβάνονται στο dataset, όπως η ηλικία του κτιρίου, η γειτονιά ή η κατάσταση της αγοράς ακινήτων.