Εισαγωγή στο Dataset

Η παρούσα ανάλυση βασίζεται στο dataset kc_house_data.csv, το οποίο περιέχει πληροφορίες για πωλήσεις κατοικιών στο King County, Washington (ΗΠΑ). Κάθε γραμμή αντιστοιχεί σε μία κατοικία και καταγράφει χαρακτηριστικά που επηρεάζουν την τιμή της.

Βασικές Πληροφορίες

  • Παρατηρήσεις (γραμμές): περίπου 21.600
  • Μεταβλητές (στήλες): 21
  • Περίοδος δεδομένων: 2014 – 2015

Είδη Μεταβλητών

  • Αριθμητικές: price, sqft_living, bedrooms, bathrooms, sqft_lot, lat, long, κ.ά.
  • Κατηγορικές: waterfront, view, grade, condition, zipcode
  • Ημερομηνίες: date (ημερομηνία πώλησης)
  • Αναγνωριστικό: 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, που σημαίνει ότι πλέον εξηγείται μεγαλύτερο μέρος της μεταβλητότητας. Όλοι οι συντελεστές είναι στατιστικά σημαντικοί.

Σύγκριση SSE και R-squared

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% της διακύμανσης και παρουσιάζει μικρότερα σφάλματα πρόβλεψης.