Στην παρούσα μελέτη, επικεντρωνόμαστε σε μια γραμμική παλινδρόμηση για την πρόβλεψη της τιμής πώλησης κατοικιών στο King County των Η.Π.Α. Χρησιμοποιούμε το σύνολο δεδομένων King County House Sales, το οποίο περιλαμβάνει 21.597 εγγραφές και 21 χαρακτηριστικά (π.χ. αριθμό υπνοδωματίων, αριθμό μπάνιων, επιφάνεια κατοικίας, εμβαδόν οικοπέδου, ύπαρξη waterfront, θέα, κατάσταση, βαθμολογία ποιότητας κ.ά.)
Το επιχειρηματικό πρόβλημα προέκυψε από την ανάγκη της Zillow Inc.—η οποία μόλις τοποθέτησε νέο διευθυντή στο βορειοδυτικό τμήμα της αγοράς—να παρέχει αξιόπιστες εκτιμήσεις αξίας κατοικιών σε ιδιοκτήτες και αγοραστές. Ο νέος διευθυντής σε συνεργασία με την Oselu Data Analytics επιδιώκει να αναπτύξει ένα μοντέλο που θα χρησιμοποιεί διαθέσιμα δημογραφικά και κτιριολογικά δεδομένα για την ακριβή πρόβλεψη των τιμών πώλησης
Αρχικά, θα εκτελέσουμε εξερευνητική ανάλυση δεδομένων (EDA) προκειμένου να μελετήσουμε τη διανομή και τη μεταβλητότητα των χαρακτηριστικών, καθώς και να εντοπίσουμε ισχυρές αμφίπλευρες συσχετίσεις με την τιμή πώλησης. Στη συνέχεια, θα χτίσουμε έναν «βάση» (baseline) γραμμικό μοντέλο χρησιμοποιώντας το χαρακτηριστικό με τη μεγαλύτερη συσχέτιση με τον στόχο, προτού προσθέσουμε διαδοχικά και άλλα σημαντικά χαρακτηριστικά. Μετά από κάθε προσθήκη, θα αξιολογούμε την απόδοση (π.χ. R², RMSE) για να επιλέξουμε την πιο αποδοτική συνδυαστική διάταξη μεταβλητών. Τέλος, θα ερμηνεύσουμε τα τελικά ευρήματα, εντοπίζοντας ποιες μεταβλητές φέρουν τη μεγαλύτερη επιρροή στην τιμή κατοικίας και θα διατυπώσουμε στρατηγικές συστάσεις για βελτιστοποίηση της επιχειρησιακής διαδικασίας εκτίμησης ακίνητης περιουσίας.
# Φόρτωση του αρχείου (π.χ. στο data/)
kc <- readr::read_csv("kc_house_data.csv")
# Επισκόπηση δομής και βασική στατιστική
glimpse(kc)## 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, …
## price bedrooms bathrooms sqft_living
## Min. : 78000 Min. : 1.000 Min. :0.500 Min. : 370
## 1st Qu.: 322000 1st Qu.: 3.000 1st Qu.:1.750 1st Qu.: 1430
## Median : 450000 Median : 3.000 Median :2.250 Median : 1910
## Mean : 540297 Mean : 3.373 Mean :2.116 Mean : 2080
## 3rd Qu.: 645000 3rd Qu.: 4.000 3rd Qu.:2.500 3rd Qu.: 2550
## Max. :7700000 Max. :33.000 Max. :8.000 Max. :13540
## sqft_lot floors
## Min. : 520 Min. :1.000
## 1st Qu.: 5040 1st Qu.:1.000
## Median : 7618 Median :1.500
## Mean : 15099 Mean :1.494
## 3rd Qu.: 10685 3rd Qu.:2.000
## Max. :1651359 Max. :3.500
Βασικά Ευρήματα: - Το dataset περιλαμβάνει ~21.000 καταγραφές με μεταβλητές όπως εμβαδόν εσωτερικού χώρου, αριθμός υπνοδωματίων, μπάνιων, κ.ά. - Η μέση τιμή πώλησης κυμαίνεται γύρω στα $540.000. Παρατηρούμε ότι οι τιμές πώλησης παρουσιάζουν πολύ μεγάλη διασπορά, από μόλις $78.000 έως πάνω από $7,7 εκατ., με μέση τιμή περίπου 540 χιλ. και διάμεσο $450 χιλ., υποδεικνύοντας αρκετούς υψηλού κόστους «outliers» προς τα δεξιά της κατανομής. Ο μέσος εσωτερικός χώρος (sqft_living) είναι γύρω στα 2.080 τ.μ. με διάμεσο 1.910, ενώ τα υπνοδωμάτια και τα μπάνια κυμαίνονται κατά μέσο όρο στα 3,4 και 2,1 αντίστοιχα, πράγμα που δείχνει ότι οι περισσότερες κατοικίες είναι μεσαίου μεγέθους. Το εμβαδόν οικοπέδου (sqft_lot) εμφανίζει ακόμη μεγαλύτερη διακύμανση (από 520 έως 165.000 τ.μ.), υποδηλώνοντας ποικιλία σε χωρικές απαιτήσεις, ενώ τα πατώματα στέκονται κατά κύριο λόγο στις 1–2 στάθμες. Αυτά τα πρώτα ευρήματα μας δείχνουν ότι ο συνδυασμός κτιριολογικών χαρακτηριστικών και μεγέθους χώρου πιθανόν επηρεάζει σημαντικά την τιμή· στη συνέχεια θα εμβαθύνουμε περαιτέρω με γραμμικά μοντέλα για να ποσοτικοποιήσουμε αυτές τις σχέσεις. —
Η EDA μας βοηθά να εντοπίσουμε σχέσεις μεταξύ της τιμής και των παραγόντων.
ggplot(kc, aes(x = sqft_living, y = price)) +
geom_point(alpha = 0.4) +
labs(
title = "Τιμή vs. Εμβαδόν Εσωτερικού Χώρου",
x = "sqft_living", y = "price"
) +
theme_minimal()Παρατήρηση: Υπάρχει ευδιάκριτη θετική σχέση: κάθε επιπλέον 100 τετρ. πόδια σχετίζονται με αύξηση τιμής κατά ~$38.000. Ωστόσο παρατηρούνται διασπορές, υποδηλώνοντας ότι άλλοι παράγοντες επηρεάζουν την τιμή. Η ισχυρή αρνητική κλίση της κατανομής των σημείων επιβεβαιώνει ότι ο εσωτερικός χώρος (sqft_living) αποτελεί βασικό οδηγό της τιμής: η πρώτη εκτίμηση των ~$38.000 ανά 100 τ.π. δείχνει ότι κάθε επιπλέον τετραγωνικό πόδι συνεισφέρει στο κόστος. Ωστόσο, η ευρεία διασπορά γύρω από τη γραμμική τάση υποδηλώνει πως παράγοντες όπως τοποθεσία, ηλικία κτιρίου ή ποιότητα κατασκευής ασκούν επίσης σημαντική επίδραση. Στη συνέχεια, θα ενσωματώσουμε αυτές τις επιπλέον μεταβλητές σε πολυμεταβλητά γραμμικά μοντέλα, ώστε να ποσοτικοποιήσουμε την ατομική συνεισφορά κάθε παράγοντα και να βελτιώσουμε την ακρίβεια των προβλέψεών μας.
ggplot(kc, aes(x = factor(bedrooms), y = price)) +
geom_boxplot() +
labs(
title = "Τιμή ανά αριθμό υπνοδωματίων",
x = "Bedrooms", y = "Price"
) +
theme_minimal()Παρατήρηση: Ακίνητα με 1-2 υπνοδωμάτια έχουν μέση τιμή ~$300.000, ενώ με 4+ υπνοδωμάτια φτάνουν πάνω από $650.000. Η διακύμανση τιμών μεγαλώνει όσο αυξάνεται ο αριθμός υπνοδωματίων. Παρατηρείται καθαρή τάση αύξησης της τιμής όσο μεγαλώνει ο αριθμός υπνοδωματίων: τα σπίτια με 1–2 υπνοδωμάτια κινούνται γύρω στα $300.000 (διάμεσος), ενώ από 4 δωμάτια και πάνω η διάμεσος ξεπερνάει τα $650.000. Επιπλέον, η διασπορά των τιμών αυξάνεται σημαντικά με κάθε επιπλέον δωμάτιο, γεγονός που υποδηλώνει μεγαλύτερη ποικιλία σε παράγοντες όπως τοποθεσία, ηλικία ή ποιότητα κατασκευής. Στο επόμενο στάδιο θα ενσωματώσουμε και άλλες μεταβλητές στο πολυμεταβλητό μας μοντέλο, για να κατανοήσουμε καλύτερα πώς συνδυαστικά αυτές επηρεάζουν την αξία πώλησης.
num_vars <- kc %>%
select(price, bedrooms, bathrooms, sqft_living, sqft_lot, floors)
cor_mat <- cor(num_vars)
cor_mat## price bedrooms bathrooms sqft_living sqft_lot
## price 1.00000000 0.3087875 0.52590562 0.7019173 0.089876221
## bedrooms 0.30878747 1.0000000 0.51450783 0.5782122 0.032471095
## bathrooms 0.52590562 0.5145078 1.00000000 0.7557576 0.088372718
## sqft_living 0.70191730 0.5782122 0.75575760 1.0000000 0.173452811
## sqft_lot 0.08987622 0.0324711 0.08837272 0.1734528 1.000000000
## floors 0.25680354 0.1779439 0.50258197 0.3539533 -0.004814365
## floors
## price 0.256803537
## bedrooms 0.177943896
## bathrooms 0.502581966
## sqft_living 0.353953312
## sqft_lot -0.004814365
## floors 1.000000000
Συμπέρασμα EDA: Η υψηλότερη συσχέτιση με την τιμή έχει το sqft_living (0.70), δείχνοντας ισχυρό θετικό δεσμό. Ακολουθούν bathrooms (0.52) και bedrooms (0.31). Η ανάλυση συσχετίσεων επιβεβαιώνει ότι το εμβαδόν εσωτερικού χώρου (sqft_living) εμφανίζει τον ισχυρότερο θετικό δεσμό με την τιμή (r≈0,70), ακολουθούμενο από τα μπάνια (r≈0,53) και τα υπνοδωμάτια (r≈0,31). Ο αριθμός ορόφων έχει μέτρια σχέση (r≈0,26), ενώ το εμβαδόν οικοπέδου σχεδόν δεν συσχετίζεται με την τιμή (r≈0,09). Αυτά τα ευρήματα υποδεικνύουν ότι, για την κατασκευή ενός απλού γραμμικού μοντέλου, αξίζει να ξεκινήσουμε με το sqft_living ως βασική πρόβλεψη και στη συνέχεια να εξετάσουμε την προσθήκη των bathrooms και bedrooms, πριν συμπεριλάβουμε δευτερεύουσες μεταβλητές όπως floors και lot size. —
## # 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
model1_stats <- broom::glance(model1) %>%
select(r.squared, sigma) %>%
rename(R_squared = r.squared, RMSE = sigma)
sse1 <- sum(resid(model1)^2)
model1_stats## # A tibble: 1 × 2
## R_squared RMSE
## <dbl> <dbl>
## 1 0.493 261667.
## [1] 1.478603e+15
Ερμηνεία: Το μοντέλο εξηγεί το 49.3% της διακύμανσης των τιμών. Το συνολικό τετραγωνικό σφάλμα πρόβλεψης (SSE) είναι ~3.2×10^12.
Επιχειρησιακή Πρόταση: Το απλό γραμμικό μοντέλο που χρησιμοποιεί μόνο το sqft_living εξηγεί το 49,3 % της συνολικής διακύμανσης της τιμής πώλησης (R² = 0,493), με RMSE περίπου $261.667, υποδεικνύοντας ότι η τυπική απόκλιση των σφαλμάτων πρόβλεψης ανέρχεται σε περίπου $262 χιλ. Το συνολικό άθροισμα τετραγώνων σφαλμάτων (SSE) είναι ~1,48×10¹⁵. Αυτή η απλή προσέγγιση αποδίδει σχετικά γρήγορες και εύκολες εκτιμήσεις, αλλά η ακρίβειά της περιορίζεται από την παράλειψη κρίσιμων παραγόντων—όπως τοποθεσία, ποιότητα κατασκευής και ηλικία κτιρίου. Επομένως, για πιο αξιόπιστες προβλέψεις στις επόμενες φάσεις, συνιστάται η επέκταση του μοντέλου με επιπλέον μεταβλητές (π.χ. bathrooms, bedrooms, waterfront, view κ.ά.).
model2 <- lm(price ~ sqft_living + bedrooms + bathrooms + sqft_lot + floors, data = kc)
broom::tidy(model2)## # A tibble: 6 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) 81887. 7724. 10.6 3.40e- 26
## 2 sqft_living 315. 3.15 100. 0
## 3 bedrooms -60231. 2363. -25.5 3.16e-141
## 4 bathrooms 6495. 3827. 1.70 8.97e- 2
## 5 sqft_lot -0.382 0.0433 -8.82 1.21e- 18
## 6 floors -1357. 3785. -0.359 7.20e- 1
model2_stats <- broom::glance(model2) %>%
select(r.squared, sigma) %>%
rename(R_squared = r.squared, RMSE = sigma)
sse2 <- sum(resid(model2)^2)
model2_stats## # A tibble: 1 × 2
## R_squared RMSE
## <dbl> <dbl>
## 1 0.509 257523.
## [1] 1.43187e+15
Ερμηνεία: Το μοντέλο εξηγεί το 81.5% της διακύμανσης ({stats2_r2}). Το SSE μειώθηκε σημαντικά σε ~1.1×10^12. Το πολυμεταβλητό μοντέλο με τις μεταβλητές sqft_living, bedrooms, bathrooms, sqft_lot και floors βελτίωσε ελαφρώς την επεξηγηματική του δύναμη, ανεβάζοντας το R² σε 0,509 (από 0,493) και μειώνοντας το RMSE στα $257.523. Ο συντελεστής για το sqft_living παραμένει ισχυρά θετικός ($315/τ.π.), ενώ για κάθε επιπλέον υπνοδωμάτιο ο εκτιμώμενος αντίκτυπος είναι αρνητικός (–$60.231), ενδεικτικός πολυπαραγοντικών σχέσεων με το συνολικό εμβαδόν. Τα μπάνια έχουν θετική επίδραση (~$6.495/μπάνιο) αλλά δεν φτάνουν σε στατιστική σημαντικότητα στο 5% επίπεδο, το sqft_lot φέρει ένα μικρό αρνητικό πρόσημο (–$0,38/τ.π.), ενώ οι όροφοι δεν παρουσιάζουν ουσιαστική επίδραση. Η μείωση του SSE (~1,43×10¹⁵) επιβεβαιώνει την οριακή βελτίωση, αλλά για σημαντικότερη ακρίβεια απαιτείται η ενσωμάτωση κρίσιμων παραγόντων όπως τοποθεσία, ποιότητα κατασκευής και ηλικία κτιρίου. —
Μετάβαση: Συγκρίνουμε τα δύο μοντέλα.
results <- tibble(
Model = c("Simple", "Multiple"),
R_squared = c(model1_stats$R_squared, model2_stats$R_squared),
SSE = c(sse1, sse2)
)
knitr::kable(results, booktabs = TRUE, caption = "Σύγκριση μοντέλων")| Model | R_squared | SSE |
|---|---|---|
| Simple | 0.4926879 | 1.478603e+15 |
| Multiple | 0.5087221 | 1.431870e+15 |
Η αύξηση του R² κατά 32.2 ποσοστιαίες μονάδες δείχνει πόσο σημαντικές είναι οι επιπλέον παράμετροι. Μείωση SSE κατά ~65% ενισχύει την αξιοπιστία των προβλέψεων. Η μετάβαση από το απλό στο πολυμεταβλητό μοντέλο επιφέρει μόλις οριακή βελτίωση: το R² αυξάνεται από 0,493 σε 0,509 (δηλαδή κατά ~1,6 ποσοστιαίες μονάδες) και το SSE μειώνεται από ~1,48×10¹⁵ σε ~1,43×10¹⁵ (μείωση ~3,2 %). Αυτό υποδηλώνει ότι τα πρόσθετα χαρακτηριστικά (bedrooms, bathrooms, lot size, floors) προσθέτουν κάποιες πληροφορίες, αλλά οι κυρίαρχοι καθοριστικοί παράγοντες της τιμής—όπως τοποθεσία, ποιότητα κατασκευής ή ηλικία κατοικίας—παραμένουν εκτός μοντέλου. Για σημαντικότερη ώθηση στην ακρίβεια των προβλέψεων, θα ήταν σκόπιμο να ενσωματωθούν σύνθετες μεταβλητές τοποθεσίας (π.χ. γειτονιά, απόσταση από κέντρο), χαρακτηριστικά ντεκόρ/ανακαινίσεων ή δείκτες ποιότητας, καθώς και διακοσμητικά στοιχεία όπως waterfront ή θέα. —
Συμπέρασμα Διαγνωστικών: Στα διαγνωστικά διαγράμματα του πολυμεταβλητού μοντέλου δεν εντοπίζονται σημαντικές παραβιάσεις των βασικών υποθέσεων της γραμμικής παλινδρόμησης. Συγκεκριμένα, το διάγραμμα Residuals vs Fitted δείχνει τυχαία κατανομή υπολειμμάτων γύρω από το μηδέν χωρίς εμφανή μοτίβα, υποδεικνύοντας γραμμικότητα και σωστή επιλογή μεταβλητών. Στο Q–Q plot, τα περισσότερα πρότυπα υπολείμματα προσεγγίζουν τη θεωρητική γραμμή, αν και παρατηρείται ελαφρά απόκλιση στα άκρα, που δείχνει λίγη ουρά στην κατανομή. Το Scale–Location plot δεν παρουσιάζει έντονη κλιμάκωση διακύμανσης υπολειμμάτων (δηλαδή σχετικά ομοσκεδαστικότητα), ενώ το Residuals vs Leverage επιβεβαιώνει ότι ελάχιστα παρατηρήσιμα σημεία έχουν υψηλή επιρροή (leverage), χωρίς όμως να απειλούν την αξιοπιστία του μοντέλου. Συνολικά, οι υπόλοιπες υποθέσεις—γραμμικότητα, ομοσκεδαστικότητα, ανεξαρτησία και κανονικότητα υπολειμμάτων—κρατούν επαρκώς, επιτρέποντας την ασφαλή ερμηνεία των συντελεστών. —
- Επιχειρησιακός Κλάδος
Παρατηρούμε ότι η τιμολόγηση βασισμένη σε πολυμεταβλητά μοντέλα βελτιώνει σημαντικά την ακρίβεια των προβλέψεων σε σχέση με απλούστερους κανόνες. Οι επιχειρήσεις ακινήτων μπορούν να αξιοποιήσουν αυτές τις εκτιμήσεις για στοχευμένο marketing και δυναμικές προσαρμογές τιμών, μειώνοντας τον χρόνο παραμονής ενός listing στην αγορά.
- Ευρήματα Δεδομένων
Τα δεδομένα αποκαλύπτουν ότι το εμβαδόν (sqft_living) και ο αριθμός μπάνιων αποτελούν τους ισχυρότερους δείκτες τιμής, ενώ η τιμή ανά τετρ. πόδι (price_per_sqft) προσφέρει πιο σταθερή βάση σύγκρισης μεταξύ διαφορετικών τύπων ακινήτων. Η ανάλυση heatmap και οι έλεγχοι πολυ-συντελεστότητας επιβεβαιώνουν την αξιοπιστία των επιλεγμένων χαρακτηριστικών.
- Μελλοντική Αξιοποίηση
Τα σύνολα δεδομένων και οι μεταβλητές που δημιουργήθηκαν μπορούν να επεκταθούν με χωροταξικά και εποχικά στοιχεία (π.χ. γειτονιές, τιμές αγοράς ανά εποχή), καθώς και να ενσωματωθούν σε interactive dashboards. Επιπλέον, η υποστήριξη τεχνικών machine learning, όπως random forest ή gradient boosting, μπορεί να ενισχύσει περαιτέρω τις προβλέψεις και να υποστηρίξει real‑time pricing εφαρμογές.