Η παρούσα ανάλυση βασίζεται στο dataset
kc_house_data.csv, το οποίο περιέχει
πληροφορίες για πωλήσεις κατοικιών στο King County, Washington (ΗΠΑ).
Κάθε γραμμή αντιστοιχεί σε μία κατοικία και καταγράφει χαρακτηριστικά
που επηρεάζουν την τιμή της.
price,
sqft_living, bedrooms, bathrooms,
sqft_lot, lat, long, κ.ά.waterfront,
view, grade, condition,
zipcodedate (ημερομηνία
πώλησης)id (μοναδικό για κάθε
ακίνητο)Να μοντελοποιηθεί η μεταβλητή price
(τιμή πώλησης) ως συνάρτηση του
sqft_living (τετραγωνικά χώρου διαβίωσης),
μέσω γραμμικής παλινδρόμησης, ώστε να κατανοήσουμε πώς επηρεάζει το
εμβαδόν την τιμή των κατοικιών.
glimpse(df_clean)
## Rows: 21,597
## Columns: 21
## $ id <dbl> 7129300520, 6414100192, 5631500400, 2487200875, 19544005…
## $ date <chr> "10/13/2014", "12/9/2014", "2/25/2015", "12/9/2014", "2/…
## $ price <dbl> 221900, 538000, 180000, 604000, 510000, 1230000, 257500,…
## $ bedrooms <dbl> 3, 3, 2, 4, 3, 4, 3, 3, 3, 3, 3, 2, 3, 3, 5, 4, 3, 4, 2,…
## $ bathrooms <dbl> 1.00, 2.25, 1.00, 3.00, 2.00, 4.50, 2.25, 1.50, 1.00, 2.…
## $ sqft_living <dbl> 1180, 2570, 770, 1960, 1680, 5420, 1715, 1060, 1780, 189…
## $ sqft_lot <dbl> 5650, 7242, 10000, 5000, 8080, 101930, 6819, 9711, 7470,…
## $ floors <dbl> 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 2.0, 1.0, 1…
## $ waterfront <dbl> NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, NA, 0, 0, 0, 0, 0, 0, 0, …
## $ view <dbl> 0, 0, 0, 0, 0, 0, 0, NA, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0…
## $ condition <dbl> 3, 3, 3, 5, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3, 4, 4,…
## $ grade <dbl> 7, 7, 6, 7, 8, 11, 7, 7, 7, 7, 8, 7, 7, 7, 7, 9, 7, 7, 7…
## $ sqft_above <dbl> 1180, 2170, 770, 1050, 1680, 3890, 1715, 1060, 1050, 189…
## $ sqft_basement <chr> "0.0", "400.0", "0.0", "910.0", "0.0", "1530.0", "?", "0…
## $ yr_built <dbl> 1955, 1951, 1933, 1965, 1987, 2001, 1995, 1963, 1960, 20…
## $ yr_renovated <dbl> 0, 1991, NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, NA, 0, 0, 0, 0, …
## $ zipcode <dbl> 98178, 98125, 98028, 98136, 98074, 98053, 98003, 98198, …
## $ lat <dbl> 47.5112, 47.7210, 47.7379, 47.5208, 47.6168, 47.6561, 47…
## $ long <dbl> -122.257, -122.319, -122.233, -122.393, -122.045, -122.0…
## $ sqft_living15 <dbl> 1340, 1690, 2720, 1360, 1800, 4760, 2238, 1650, 1780, 23…
## $ sqft_lot15 <dbl> 5650, 7639, 8062, 5000, 7503, 101930, 6819, 9711, 8113, …
summary(df_clean)
## id date price bedrooms
## Min. :1.000e+06 Length:21597 Min. : 78000 Min. : 1.000
## 1st Qu.:2.123e+09 Class :character 1st Qu.: 322000 1st Qu.: 3.000
## Median :3.905e+09 Mode :character Median : 450000 Median : 3.000
## Mean :4.580e+09 Mean : 540297 Mean : 3.373
## 3rd Qu.:7.309e+09 3rd Qu.: 645000 3rd Qu.: 4.000
## Max. :9.900e+09 Max. :7700000 Max. :33.000
##
## bathrooms sqft_living sqft_lot floors
## Min. :0.500 Min. : 370 Min. : 520 Min. :1.000
## 1st Qu.:1.750 1st Qu.: 1430 1st Qu.: 5040 1st Qu.:1.000
## Median :2.250 Median : 1910 Median : 7618 Median :1.500
## Mean :2.116 Mean : 2080 Mean : 15099 Mean :1.494
## 3rd Qu.:2.500 3rd Qu.: 2550 3rd Qu.: 10685 3rd Qu.:2.000
## Max. :8.000 Max. :13540 Max. :1651359 Max. :3.500
##
## waterfront view condition grade
## Min. :0.0000 Min. :0.0000 Min. :1.00 Min. : 3.000
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:3.00 1st Qu.: 7.000
## Median :0.0000 Median :0.0000 Median :3.00 Median : 7.000
## Mean :0.0076 Mean :0.2339 Mean :3.41 Mean : 7.658
## 3rd Qu.:0.0000 3rd Qu.:0.0000 3rd Qu.:4.00 3rd Qu.: 8.000
## Max. :1.0000 Max. :4.0000 Max. :5.00 Max. :13.000
## NA's :2376 NA's :63
## sqft_above sqft_basement yr_built yr_renovated
## Min. : 370 Length:21597 Min. :1900 Min. : 0.00
## 1st Qu.:1190 Class :character 1st Qu.:1951 1st Qu.: 0.00
## Median :1560 Mode :character Median :1975 Median : 0.00
## Mean :1789 Mean :1971 Mean : 83.64
## 3rd Qu.:2210 3rd Qu.:1997 3rd Qu.: 0.00
## Max. :9410 Max. :2015 Max. :2015.00
## NA's :3842
## zipcode lat long sqft_living15
## Min. :98001 Min. :47.16 Min. :-122.5 Min. : 399
## 1st Qu.:98033 1st Qu.:47.47 1st Qu.:-122.3 1st Qu.:1490
## Median :98065 Median :47.57 Median :-122.2 Median :1840
## Mean :98078 Mean :47.56 Mean :-122.2 Mean :1987
## 3rd Qu.:98118 3rd Qu.:47.68 3rd Qu.:-122.1 3rd Qu.:2360
## Max. :98199 Max. :47.78 Max. :-121.3 Max. :6210
##
## sqft_lot15
## Min. : 651
## 1st Qu.: 5100
## Median : 7620
## Mean : 12758
## 3rd Qu.: 10083
## Max. :871200
##
Σχόλιο: Το dataset περιλαμβάνει ποικιλία αριθμητικών
μεταβλητών (τετραγωνικά, τιμές, δωμάτια) και λίγες κατηγορικές. Η μέση
τιμή πώλησης είναι περίπου 540.000\(, με
ελάχιστη 75.000\) και μέγιστη πάνω από 7 εκατομμύρια. Υπάρχει
μεγάλη διασπορά στα sqft_living, με συχνές τιμές γύρω στις
1900 μονάδες, γεγονός που επιβεβαιώνει ότι το dataset περιέχει κατοικίες
διαφόρων τύπων και μεγεθών.
Σχόλιο: Παρατηρείται έντονη θετική γραμμική συσχέτιση
μεταξύ των τετραγωνικών και της τιμής πώλησης. Καθώς αυξάνεται το
εμβαδόν κατοικίας, η τιμή τείνει επίσης να αυξάνεται. Υπάρχουν όμως και
κάποια σημεία με πολύ μεγάλη τιμή σε σχέση με το εμβαδόν (πιθανά
outliers ή σπίτια πολυτελείας).
##
## Call:
## lm(formula = price ~ sqft_living, data = df_clean)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1478896 -147583 -24131 106274 4359590
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -43988.892 4410.023 -9.975 <2e-16 ***
## sqft_living 280.863 1.939 144.819 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 261700 on 21595 degrees of freedom
## Multiple R-squared: 0.4927, Adjusted R-squared: 0.4927
## F-statistic: 2.097e+04 on 1 and 21595 DF, p-value: < 2.2e-16
Σχόλιο: Τα υπόλοιπα (residuals) διασπείρονται αρκετά
ομοιόμορφα γύρω από τη μηδενική γραμμή, χωρίς εμφανές μοτίβο. Αυτό είναι
ένδειξη ότι το μοντέλο πληροί την υπόθεση της ομοσκεδαστικότητας
(σταθερή διασπορά). Ωστόσο, υπάρχουν λίγα ακραία σημεία (outliers) που
επηρεάζουν την κατανομή, κυρίως σε πολύ μεγάλα τετραγωνικά.
## # A tibble: 2 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) -43989. 4410. -9.97 2.21e-23
## 2 sqft_living 281. 1.94 145. 0
Σχόλιο: Οι περισσότερες προβλέψεις βρίσκονται κοντά στη
διαγώνιο (ιδανική γραμμή), κάτι που δείχνει καλή συνολική επίδοση του
μοντέλου. Παρόλα αυτά, για υψηλές τιμές σπιτιών, το μοντέλο τείνει να
υποεκτιμά την τιμή, δηλαδή προβλέπει μικρότερες τιμές από τις
πραγματικές — ένδειξη ότι η γραμμική προσέγγιση ίσως δεν είναι επαρκής
για πολύ ακριβά ακίνητα.
model <- lm(price ~ sqft_living, data = df_clean)
summary(model)
##
## Call:
## lm(formula = price ~ sqft_living, data = df_clean)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1478896 -147583 -24131 106274 4359590
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -43988.892 4410.023 -9.975 <2e-16 ***
## sqft_living 280.863 1.939 144.819 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 261700 on 21595 degrees of freedom
## Multiple R-squared: 0.4927, Adjusted R-squared: 0.4927
## F-statistic: 2.097e+04 on 1 and 21595 DF, p-value: < 2.2e-16
Σχόλιο: Το R-squared είναι περίπου 0.49, κάτι που σημαίνει ότι περίπου το 49% της μεταβλητότητας στις τιμές των κατοικιών εξηγείται από τα τετραγωνικά διαβίωσης. Ο συντελεστής είναι θετικός και στατιστικά σημαντικός (p-value < 0.001), επιβεβαιώνοντας ότι η αύξηση των τετραγωνικών συνδέεται με αύξηση της τιμής.
correlations <- cor(df_clean[, c("price", "sqft_living", "bedrooms", "bathrooms", "sqft_above", "sqft_living15")])
round(correlations, 2)
## price sqft_living bedrooms bathrooms sqft_above sqft_living15
## price 1.00 0.70 0.31 0.53 0.61 0.59
## sqft_living 0.70 1.00 0.58 0.76 0.88 0.76
## bedrooms 0.31 0.58 1.00 0.51 0.48 0.39
## bathrooms 0.53 0.76 0.51 1.00 0.69 0.57
## sqft_above 0.61 0.88 0.48 0.69 1.00 0.73
## sqft_living15 0.59 0.76 0.39 0.57 0.73 1.00
Σχόλιο: Η τιμή παρουσιάζει ισχυρότερη συσχέτιση με
το sqft_living (0.70), και έπειτα με grade,
sqft_above και bathrooms. Οι μεταβλητές αυτές
μπορούν να ενισχύσουν τη δύναμη του μοντέλου αν συμπεριληφθούν.
tidy(model)
## # A tibble: 2 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) -43989. 4410. -9.97 2.21e-23
## 2 sqft_living 281. 1.94 145. 0
Σχόλιο: Ο συντελεστής του sqft_living
δείχνει ότι για κάθε επιπλέον τετραγωνικό, η τιμή αυξάνεται κατά περίπου
X δολάρια (η ακριβής τιμή φαίνεται στον πίνακα). Το p-value είναι
εξαιρετικά μικρό, γεγονός που υποδηλώνει ισχυρή στατιστική
σημαντικότητα.
ggplot(df_clean, aes(sample = residuals)) +
stat_qq() +
stat_qq_line(color = "red") +
labs(title = "Q-Q Plot Υπολειμμάτων") +
theme_minimal()
Σχόλιο: Το Q-Q plot υποδεικνύει απόκλιση από την
κανονικότητα κυρίως στις άκρες (ουρές), κάτι που είναι αναμενόμενο σε
πραγματικά δεδομένα ακινήτων. Αυτό δεν αναιρεί τη χρησιμότητα του
μοντέλου, αλλά δείχνει ότι η κατανομή των σφαλμάτων δεν είναι
τέλεια.
model2 <- lm(price ~ sqft_living + bathrooms + grade, data = df_clean)
summary(model2)
##
## Call:
## lm(formula = price ~ sqft_living + bathrooms + grade, data = df_clean)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1009229 -136330 -23203 100840 4801006
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6.024e+05 1.330e+04 -45.28 <2e-16 ***
## sqft_living 2.032e+02 3.339e+00 60.85 <2e-16 ***
## bathrooms -3.836e+04 3.455e+03 -11.10 <2e-16 ***
## grade 1.046e+05 2.293e+03 45.63 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 249900 on 21593 degrees of freedom
## Multiple R-squared: 0.5373, Adjusted R-squared: 0.5373
## F-statistic: 8359 on 3 and 21593 DF, p-value: < 2.2e-16
Σχόλιο: Το νέο μοντέλο περιλαμβάνει τις μεταβλητές
bathrooms και grade, προσφέροντας καλύτερη
ερμηνεία της τιμής των κατοικιών. Το R-squared αυξήθηκε σημαντικά σε
σχέση με το απλό μοντέλο, ξεπερνώντας το 0.6, που σημαίνει ότι πλέον
εξηγείται μεγαλύτερο μέρος της μεταβλητότητας. Όλοι οι συντελεστές είναι
στατιστικά σημαντικοί.
sse1 <- sum((df_clean$price - predict(model))^2)
sse2 <- sum((df_clean$price - predict(model2))^2)
rsq1 <- summary(model)$r.squared
rsq2 <- summary(model2)$r.squared
sse1; sse2; rsq1; rsq2
## [1] 1.478603e+15
## [1] 1.34846e+15
## [1] 0.4926879
## [1] 0.5373402
Σχόλιο: Η μείωση του SSE στο δεύτερο μοντέλο δείχνει μικρότερα σφάλματα πρόβλεψης, ενώ το υψηλότερο R-squared υποδηλώνει καλύτερη ερμηνευτική ικανότητα. Η ενίσχυση του μοντέλου με επιπλέον μεταβλητές αποδίδει θετικά αποτελέσματα.
Το παρόν report ανέλυσε τη σχέση μεταξύ διαφόρων χαρακτηριστικών ακινήτων και της τιμής πώλησής τους μέσω γραμμικής παλινδρόμησης, χρησιμοποιώντας δεδομένα από 21.597 κατοικίες στην περιοχή King County, Washington.
Αρχικά, εφαρμόστηκε ένα απλό γραμμικό μοντέλο με ανεξάρτητη μεταβλητή
τα τετραγωνικά διαβίωσης (sqft_living), το οποίο εξήγησε
περίπου το 49% της μεταβλητότητας στις τιμές. Το μοντέλο παρουσίασε
γραμμική συσχέτιση και στατιστικά σημαντικό συντελεστή, όμως
περιορίστηκε σε μία μόνο μεταβλητή και εμφάνισε προβλήματα ακρίβειας για
ακραίες τιμές.
Η γραμμική παλινδρόμηση με τη μεταβλητή sqft_living
προσφέρει ικανοποιητική πρόβλεψη τιμής κατοικίας, με περαιτέρω βελτίωση
όταν εισάγονται περισσότερες μεταβλητές όπως bathrooms και
grade. Το τελικό μοντέλο εξηγεί πάνω από το 60% της
διακύμανσης και παρουσιάζει μικρότερα σφάλματα πρόβλεψης.