1 Introduction

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

#Εισαγωγή dataset
dataset<-read.csv("C:/Users/dadak/Desktop/exams/housing.csv")
#Προβολή μεγέθους dataset
dim(dataset)
## [1] 21597    21

2 Dataset description

Το dataset προέρχεται απο το Github.Περιλαμβάνει 21.597 εγγραφές (κατοικίες). Αποτελείται από 20 ανεξάρτητες μεταβλητές (features), οι οποίες περιγράφουν τα χαρακτηριστικά κάθε κατοικίας, καθώς και μία εξαρτημένη μεταβλητή, την «price», η οποία εκφράζει το εκτιμώμενο κόστος της κατοικίας.

Ακολουθεί ο πίνακας με τα ονόματα και τις περιγραφές των μεταβλητών του συνόλου δεδομένων Kings County:

Τέλος παρουσιάζεται ένα Histogram και ενα boxplot με την κατανομή και την διασπορά της τιμής κατοικίας για την περαιτέρω κατανόηση του σύνόλου δεδομένων.

3 Exploratory Data Analysis

Η Εξερευνητική Ανάλυση Δεδομένων (EDA) αποτελεί ουσιώδες στάδιο σε κάθε ερευνητική διαδικασία, καθώς επιτρέπει την εις βάθος κατανόηση της δομής και των χαρακτηριστικών του συνόλου δεδομένων. Στο παρόν τμήμα πραγματοποιείται η προβολή της δομής του dataset, η εμφάνιση των πρώτων γραμμών για μια πρώτη οπτική επισκόπηση, καθώς και η συνοπτική στατιστική ανάλυση των μεταβλητών. Μέσω αυτών των διαδικασιών επιτυγχάνεται ο εντοπισμός πιθανών ακραίων τιμών, ελλειπτικών δεδομένων ή άλλων ανωμαλιών που ενδέχεται να επηρεάσουν την ορθή εφαρμογή των μεθόδων ανάλυσης που θα ακολουθήσουν.

#Προβολη δομής dataset
str(dataset)
## 'data.frame':    21597 obs. of  21 variables:
##  $ id           : num  7.13e+09 6.41e+09 5.63e+09 2.49e+09 1.95e+09 ...
##  $ date         : chr  "10/13/2014" "12/9/2014" "2/25/2015" "12/9/2014" ...
##  $ price        : int  221900 538000 180000 604000 510000 1230000 257500 291850 229500 323000 ...
##  $ bedrooms     : int  3 3 2 4 3 4 3 3 3 3 ...
##  $ bathrooms    : num  1 2.25 1 3 2 4.5 2.25 1.5 1 2.5 ...
##  $ sqft_living  : int  1180 2570 770 1960 1680 5420 1715 1060 1780 1890 ...
##  $ sqft_lot     : int  5650 7242 10000 5000 8080 101930 6819 9711 7470 6560 ...
##  $ floors       : num  1 2 1 1 1 1 2 1 1 2 ...
##  $ waterfront   : int  NA 0 0 0 0 0 0 0 0 0 ...
##  $ view         : int  0 0 0 0 0 0 0 NA 0 0 ...
##  $ condition    : int  3 3 3 5 3 3 3 3 3 3 ...
##  $ grade        : int  7 7 6 7 8 11 7 7 7 7 ...
##  $ sqft_above   : int  1180 2170 770 1050 1680 3890 1715 1060 1050 1890 ...
##  $ sqft_basement: chr  "0" "400" "0" "910" ...
##  $ yr_built     : int  1955 1951 1933 1965 1987 2001 1995 1963 1960 2003 ...
##  $ yr_renovated : int  0 1991 NA 0 0 0 0 0 0 0 ...
##  $ zipcode      : int  98178 98125 98028 98136 98074 98053 98003 98198 98146 98038 ...
##  $ lat          : num  47.5 47.7 47.7 47.5 47.6 ...
##  $ long         : num  -122 -122 -122 -122 -122 ...
##  $ sqft_living15: int  1340 1690 2720 1360 1800 4760 2238 1650 1780 2390 ...
##  $ sqft_lot15   : int  5650 7639 8062 5000 7503 101930 6819 9711 8113 7570 ...
head(dataset)
##           id       date   price bedrooms bathrooms sqft_living sqft_lot floors
## 1 7129300520 10/13/2014  221900        3      1.00        1180     5650      1
## 2 6414100192  12/9/2014  538000        3      2.25        2570     7242      2
## 3 5631500400  2/25/2015  180000        2      1.00         770    10000      1
## 4 2487200875  12/9/2014  604000        4      3.00        1960     5000      1
## 5 1954400510  2/18/2015  510000        3      2.00        1680     8080      1
## 6 7237550310  5/12/2014 1230000        4      4.50        5420   101930      1
##   waterfront view condition grade sqft_above sqft_basement yr_built
## 1         NA    0         3     7       1180             0     1955
## 2          0    0         3     7       2170           400     1951
## 3          0    0         3     6        770             0     1933
## 4          0    0         5     7       1050           910     1965
## 5          0    0         3     8       1680             0     1987
## 6          0    0         3    11       3890          1530     2001
##   yr_renovated zipcode     lat     long sqft_living15 sqft_lot15
## 1            0   98178 47.5112 -122.257          1340       5650
## 2         1991   98125 47.7210 -122.319          1690       7639
## 3           NA   98028 47.7379 -122.233          2720       8062
## 4            0   98136 47.5208 -122.393          1360       5000
## 5            0   98074 47.6168 -122.045          1800       7503
## 6            0   98053 47.6561 -122.005          4760     101930
summary(dataset)
##        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  
## 

4 Data preprocessing

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

#Οπτικοποίηση ελλιπών τιμών
library(naniar)
gg_miss_var(dataset)
**Figure3: Εμφάνιση ελλιπών τιμών ανά μεταβλητή**

Figure3: Εμφάνιση ελλιπών τιμών ανά μεταβλητή

#Οπτικοποιώ την κατανομή τιμών για τα features με πολλά missing values
table(dataset$yr_renovated, useNA = "ifany")
## 
##     0  1934  1940  1944  1945  1946  1948  1950  1951  1953  1954  1955  1956 
## 17011     1     2     1     3     1     1     1     1     1     1     3     3 
##  1957  1958  1959  1960  1962  1963  1964  1965  1967  1968  1969  1970  1971 
##     2     3     1     3     2     4     5     4     2     7     4     9     1 
##  1972  1973  1974  1975  1976  1977  1978  1979  1980  1981  1982  1983  1984 
##     3     4     2     5     1     7     3     7     8     4     8    15    16 
##  1985  1986  1987  1988  1989  1990  1991  1992  1993  1994  1995  1996  1997 
##    14    14    14    11    20    22    16    13    12    14    12    11    12 
##  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010 
##    16    15    29    15    17    31    22    29    20    30    15    21    15 
##  2011  2012  2013  2014  2015  <NA> 
##     9     8    31    73    14  3842
table(dataset$waterfront, useNA = "ifany")
## 
##     0     1  <NA> 
## 19075   146  2376
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
#Αφαίρεση feature year renovated
dataset <- dataset %>% select(-yr_renovated)
#Αντικατάσταση feature waterfront σε 0
dataset$waterfront[is.na(dataset$waterfront)] <- 0

Παρατηρείται απο τον πίνακα ότι η μεταβλητή yr_renovated έχει 3842 missing values και 17011 εγγραφές μη καταχωρημένες (year renovated=0). Για τον λόγο αυτό αφαιρείται από το dataset καθώς δεν προσθέτει καμία αξία και διαφοροποίηση για την πρόβλεψη.

Η μεταβλητή waterfront περιέχει missing values που ερμηνεύονται ως έλλειψη θέας σε υδάτινη επιφάνεια (Καθώς αποτελεί το 99,3% του dataset). Για το λόγο αυτό, τα NA αντικαταστάθηκαν με μηδενικές τιμές (0).

## Αρχικός αριθμός γραμμών: 21597
## Αριθμός γραμμών μετά την αφαίρεση: 21534
## Γραμμές που αφαιρέθηκαν: 63

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

#Εύρεση και αφαίρεση διπλότυπων
nrow_before<-nrow(dataset)
# Πόσες διπλότυπες γραμμές υπάρχουν;
duplicates_found <- sum(duplicated(dataset))

# Αφαίρεση διπλότυπων
dataset <- dataset[!duplicated(dataset), ]

# Πλήθος συνολικών γραμμών μετά
nrow_after <- nrow(dataset)

# Εκτύπωση αποτελεσμάτων
cat("Διπλότυπες εγγραφές που εντοπίστηκαν και αφαιρέθηκαν:", duplicates_found, "\n")
## Διπλότυπες εγγραφές που εντοπίστηκαν και αφαιρέθηκαν: 0
cat("Γραμμές πριν:", nrow_before, "- Γραμμές μετά:", nrow_after, "\n")
## Γραμμές πριν: 21534 - Γραμμές μετά: 21534

5 Feature Selection

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

# Αφαιρώ το id γιατί δεν παρέχει προβλεπτική αξία
dataset <- dataset %>% select(-id)

# Βρίσκω τις αριθμητικές στήλες (εκτός από την εξαρτημένη price)
numeric_cols <- dataset %>%
  select(where(is.numeric)) %>%
  select(-price)

# Υπολογίζω διακύμανση για κάθε μεταβλητή
variances <- sapply(numeric_cols, var, na.rm = TRUE)

# Υπολογίζω το εύρος (range) για κανονικοποίηση
ranges <- sapply(numeric_cols, function(x) diff(range(x, na.rm = TRUE)))

# Υπολογίζω την αναλογία διακύμανσης προς εύρος
var_ratio <- variances / ranges

# Ορίζω κατώφλι: 10% του εύρους
threshold <- 0.1

# Διατηρώ μεταβλητές που ξεπερνούν το όριο
keep_features <- names(var_ratio[var_ratio > threshold])

# Αποθηκεύω μεταβλητές που αφαιρώ
drop_features <- setdiff(names(numeric_cols), keep_features)

# Ενημερώνω το dataset (κρατώ και την price)
dataset <- dataset %>% select(all_of(keep_features), price)

# Πόσα πριν - πόσα μετά
features_before <- length(names(numeric_cols)) + 1  # +1 για το id που έριξα
features_after <- length(keep_features)

# Δείχνω σύνοψη
cat("Αρχικός αριθμός μεταβλητών (χωρίς την price):", features_before, "\n")
## Αρχικός αριθμός μεταβλητών (χωρίς την price): 17
cat("Αριθμός μεταβλητών που διατηρώ:", features_after, "\n")
## Αριθμός μεταβλητών που διατηρώ: 11
cat("Μεταβλητές που διατηρώ:", keep_features, "\n")
## Μεταβλητές που διατηρώ: sqft_living sqft_lot floors view condition grade sqft_above yr_built zipcode sqft_living15 sqft_lot15
cat("Μεταβλητές που αφαιρώ:", drop_features, "\n")
## Μεταβλητές που αφαιρώ: bedrooms bathrooms waterfront lat long

6 Dataset split with stratified fold

Για την αξιόπιστη αξιολόγηση της γενικευσιμότητας του μοντέλου γραμμικής παλινδρόμησης, εφαρμόζω cross-validation με διαστρωμάτωση. Συγκεκριμένα, το σύνολο δεδομένων χωρίζεται σε τέσσερις ισομεγέθεις υποομάδες (4-fold), διατηρώντας την κατανομή της εξαρτημένης μεταβλητής στα διαφορετικά folds. Η μεθοδολογία αυτή μειώνει τον κίνδυνο υπερεκπαίδευσης (overfitting) και επιτρέπει την πιο ακριβή εκτίμηση της απόδοσης του μοντέλου σε νέα, αδημοσίευτα δεδομένα.

library(caret)
## Loading required package: lattice
# Δημιουργώ κατηγορική εκδοχή της τιμής για διαστρωμάτωση (π.χ. 4 κατηγορίες)
dataset$strata <- cut(
  dataset$price,
  breaks = quantile(dataset$price, probs = seq(0, 1, by = 0.25)),
  include.lowest = TRUE,
  labels = FALSE
)

# Ορίζω 4-fold cross-validation με διαστρωμάτωση
train_control <- trainControl(
  method = "cv",
  number = 4,
  verboseIter = TRUE,
  savePredictions = TRUE
)

7 Linear Regression

7.1 Correlation Heatmap

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

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

# Φορτώνεις πακέτα


library(reshape2)  # Για να κάνεις melt το correlation matrix

# Κράτησε ΜΟΝΟ αριθμητικές στήλες
num_data <- dataset %>%
  select(where(is.numeric))

cor_matrix <- cor(num_data,use = "complete.obs")
knitr::kable(round(cor_matrix, 2), caption = "Πίνακας Συσχετίσεων Μεταβλητών")
Πίνακας Συσχετίσεων Μεταβλητών
sqft_living sqft_lot floors view condition grade sqft_above yr_built zipcode sqft_living15 sqft_lot15 price strata
sqft_living 1.00 0.17 0.35 0.28 -0.06 0.76 0.88 0.32 -0.20 0.76 0.18 0.70 0.60
sqft_lot 0.17 1.00 -0.01 0.08 -0.01 0.12 0.18 0.05 -0.13 0.15 0.72 0.09 0.10
floors 0.35 -0.01 1.00 0.03 -0.26 0.46 0.52 0.49 -0.06 0.28 -0.01 0.26 0.29
view 0.28 0.08 0.03 1.00 0.05 0.25 0.17 -0.05 0.09 0.28 0.07 0.40 0.27
condition -0.06 -0.01 -0.26 0.05 1.00 -0.15 -0.16 -0.36 0.00 -0.09 0.00 0.04 0.03
grade 0.76 0.12 0.46 0.25 -0.15 1.00 0.76 0.45 -0.19 0.71 0.12 0.67 0.62
sqft_above 0.88 0.18 0.52 0.17 -0.16 0.76 1.00 0.42 -0.26 0.73 0.20 0.61 0.52
yr_built 0.32 0.05 0.49 -0.05 -0.36 0.45 0.42 1.00 -0.35 0.33 0.07 0.05 0.06
zipcode -0.20 -0.13 -0.06 0.09 0.00 -0.19 -0.26 -0.35 1.00 -0.28 -0.15 -0.05 -0.02
sqft_living15 0.76 0.15 0.28 0.28 -0.09 0.71 0.73 0.33 -0.28 1.00 0.18 0.59 0.55
sqft_lot15 0.18 0.72 -0.01 0.07 0.00 0.12 0.20 0.07 -0.15 0.18 1.00 0.08 0.09
price 0.70 0.09 0.26 0.40 0.04 0.67 0.61 0.05 -0.05 0.59 0.08 1.00 0.72
strata 0.60 0.10 0.29 0.27 0.03 0.62 0.52 0.06 -0.02 0.55 0.09 0.72 1.00
# Υπολογίζεις τον πίνακα συσχετίσεων
corr_matrix <- cor(num_data, use = "complete.obs")

# Μετατρέπεις σε μακρά μορφή
melted_corr <- melt(corr_matrix)

# Σχεδιάζεις το heatmap
ggplot(melted_corr, aes(x = Var1, y = Var2, fill = value)) +
  geom_tile(color = "white") +
  scale_fill_gradient2(low = "blue", high = "red", mid = "white",
                       midpoint = 0, limit = c(-1,1), space = "Lab",
                       name = "Pearson\nCorrelation") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  coord_fixed()

7.2 First model

Σύμφωνα με το correlation matrix η μεταβλητή price φαίνεται να έχει την υψηλότερη συσχέτιση με το feature ‘sqft_living’ (0.70). Για τον λόγο αυτό στο 1ο πείραμα μοντέλων γραμμικής παλινδρόμησης επιλέγεται μόνο αυτό το feature για την πρόβλεψη.

## + Fold1: intercept=TRUE 
## - Fold1: intercept=TRUE 
## + Fold2: intercept=TRUE 
## - Fold2: intercept=TRUE 
## + Fold3: intercept=TRUE 
## - Fold3: intercept=TRUE 
## + Fold4: intercept=TRUE 
## - Fold4: intercept=TRUE 
## Aggregating results
## Fitting final model on full training set
## # A tibble: 1 × 4
##   Model     R_squared     SSE    RMSE
##   <chr>         <dbl>   <dbl>   <dbl>
## 1 1 Feature     0.492 1.47e15 260896.
##     Model             R_squared           SSE                 RMSE       
##  Length:1           Min.   :0.4917   Min.   :1.465e+15   Min.   :260896  
##  Class :character   1st Qu.:0.4917   1st Qu.:1.465e+15   1st Qu.:260896  
##  Mode  :character   Median :0.4917   Median :1.465e+15   Median :260896  
##                     Mean   :0.4917   Mean   :1.465e+15   Mean   :260896  
##                     3rd Qu.:0.4917   3rd Qu.:1.465e+15   3rd Qu.:260896  
##                     Max.   :0.4917   Max.   :1.465e+15   Max.   :260896

Σχολιασμός Αποτελεσμάτων 1ου Μοντέλου

Το πρώτο μοντέλο γραμμικής παλινδρόμησης, το οποίο βασίζεται αποκλειστικά στη μεταβλητή sqft_living, παρουσιάζει συντελεστή προσδιορισμού (R²) περίπου 0.49. Αυτό σημαίνει ότι το μοντέλο εξηγεί περίπου το 49% της διακύμανσης της τιμής των κατοικιών, γεγονός που είναι αναμενόμενο, καθώς χρησιμοποιείται μόνο μία ανεξάρτητη μεταβλητή. Η τιμή του SSE (1.47e15) και του RMSE (~260,863) υποδεικνύουν ότι η ακρίβεια πρόβλεψης μπορεί να βελτιωθεί περαιτέρω με την προσθήκη επιπλέον σχετικών χαρακτηριστικών στο μοντέλο.

## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `geom_smooth()` using formula = 'y ~ x'

Στο παραπάνω διάγραμμα παρουσιάζεται η σχέση μεταξύ της τιμής κατοικίας και του εμβαδού κατοικίας (sqft_living) για το πρώτο μοντέλο γραμμικής παλινδρόμησης. Παρατηρείται μια σαφής θετική γραμμική συσχέτιση, όπως καταδεικνύεται από τη γραμμή παλινδρόμησης, η οποία επιβεβαιώνει ότι η αύξηση του εμβαδού συνδέεται με αύξηση της τιμής. Ωστόσο, η διασπορά των σημείων γύρω από τη γραμμή υποδεικνύει την ύπαρξη σημαντικής μεταβλητότητας, γεγονός που αιτιολογεί την ανάγκη ενίσχυσης του μοντέλου με επιπλέον μεταβλητές.

7.3 Second model

Για το 2ο μοντέλο γραμμικής παλινδρόμησης αυξάνεται η πολυπλοκότητα του μοντέλου και χρησιμοποιείται και το feature ‘grade’ που έχει την 2η μεγαλύτερη συσχέτιση, με στόχο να αυξήσουμε την προβλεπτική ικανότητα του μοντέλου.

## + Fold1: intercept=TRUE 
## - Fold1: intercept=TRUE 
## + Fold2: intercept=TRUE 
## - Fold2: intercept=TRUE 
## + Fold3: intercept=TRUE 
## - Fold3: intercept=TRUE 
## + Fold4: intercept=TRUE 
## - Fold4: intercept=TRUE 
## Aggregating results
## Fitting final model on full training set
## # A tibble: 1 × 4
##   Model      R_squared     SSE    RMSE
##   <chr>          <dbl>   <dbl>   <dbl>
## 1 2 Features     0.535 1.34e15 249696.
## 
## Call:
## lm(formula = .outcome ~ ., data = dat)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1060805  -138190   -25053   100386  4803911 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -6.022e+05  1.331e+04  -45.24   <2e-16 ***
## sqft_living  1.830e+02  2.866e+00   63.85   <2e-16 ***
## grade        9.946e+04  2.242e+03   44.35   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 249700 on 21531 degrees of freedom
## Multiple R-squared:  0.5347, Adjusted R-squared:  0.5347 
## F-statistic: 1.237e+04 on 2 and 21531 DF,  p-value: < 2.2e-16

Σχολιασμός Αποτελεσμάτων 2ου Μοντέλου

Στο δεύτερο μοντέλο γραμμικής παλινδρόμησης, η χρήση της πρόσθετης μεταβλητής grade είχε ως αποτέλεσμα τη βελτίωση του συντελεστή προσδιορισμού (R²) από 0.49 σε περίπου 0.53. Αυτό δείχνει ότι το μοντέλο εξηγεί πλέον περίπου το 53% της διακύμανσης της τιμής κατοικίας, έναντι του 49% που επιτύγχανε το απλούστερο μοντέλο με μόνο το sqft_living. Παράλληλα, παρατηρείται μείωση του RMSE (από ~260,863 σε ~249,838) και μείωση του SSE, γεγονός που υποδηλώνει μικρότερο συνολικό σφάλμα πρόβλεψης. Η σύγκριση αυτή καταδεικνύει ότι η προσθήκη ενός σχετικού χαρακτηριστικού μπορεί να βελτιώσει σημαντικά την προβλεπτική ικανότητα του μοντέλου.

7.4 Third model

Για το 3ο μοντέλο γραμμικής παλινδρόμησης αυξάνεται η πολυπλοκότητα του μοντέλου και χρησιμοποιείται όλα τα features που έχουμε επιλέξει απο το feature selection ώστε να αυξηθεί ακόμα περισσότερο η ικανότητα του μοντέλου να προβλέπει σωστά τις τιμές μειώνοντας τo σφάλμα

## + Fold1: intercept=TRUE 
## - Fold1: intercept=TRUE 
## + Fold2: intercept=TRUE 
## - Fold2: intercept=TRUE 
## + Fold3: intercept=TRUE 
## - Fold3: intercept=TRUE 
## + Fold4: intercept=TRUE 
## - Fold4: intercept=TRUE 
## Aggregating results
## Fitting final model on full training set
## # A tibble: 1 × 4
##   Model        R_squared     SSE    RMSE
##   <chr>            <dbl>   <dbl>   <dbl>
## 1 All Features     0.689 8.96e14 204123.
## 
## Call:
## lm(formula = .outcome ~ ., data = dat)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1024685   -90572    -6462    65762  4922391 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    1.401e+07  2.949e+06   4.751 2.04e-06 ***
## sqft_living    1.216e+02  3.748e+00  32.457  < 2e-16 ***
## sqft_lot      -9.669e-02  4.847e-02  -1.995 0.046073 *  
## floors         2.052e+03  3.536e+03   0.580 0.561750    
## view           7.111e+04  1.989e+03  35.750  < 2e-16 ***
## condition      7.783e+03  2.349e+03   3.313 0.000926 ***
## grade          7.967e+04  2.241e+03  35.550  < 2e-16 ***
## sqft_above     1.864e+01  4.288e+00   4.347 1.39e-05 ***
## yr_built      -2.188e+03  6.613e+01 -33.093  < 2e-16 ***
## zipcode       -1.055e+02  2.964e+01  -3.558 0.000374 ***
## sqft_living15 -1.721e+01  3.491e+00  -4.928 8.35e-07 ***
## sqft_lot15    -4.068e-01  7.398e-02  -5.499 3.86e-08 ***
## strata         1.141e+05  1.775e+03  64.259  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 204000 on 21521 degrees of freedom
## Multiple R-squared:  0.6896, Adjusted R-squared:  0.6895 
## F-statistic:  3985 on 12 and 21521 DF,  p-value: < 2.2e-16

Το τρίτο μοντέλο γραμμικής παλινδρόμησης, το οποίο περιλαμβάνει όλα τα χαρακτηριστικά που επιλέχθηκαν στο στάδιο επιλογής μεταβλητών, παρουσιάζει αισθητά βελτιωμένη επίδοση σε σχέση με τα προηγούμενα πειράματα. Ο συντελεστής προσδιορισμού (R²) ανέρχεται πλέον σε περίπου 0.69, γεγονός που σημαίνει ότι το μοντέλο εξηγεί σχεδόν το 69% της συνολικής διακύμανσης της τιμής κατοικίας. Παράλληλα, το RMSE μειώθηκε σημαντικά (~204,059), υποδεικνύοντας χαμηλότερο μέσο σφάλμα πρόβλεψης. Η σύγκριση αυτή επιβεβαιώνει ότι η ενσωμάτωση περισσότερων κατάλληλων χαρακτηριστικών συμβάλλει ουσιαστικά στη βελτίωση της ακρίβειας του μοντέλου.

8 Conclusions

Η παρούσα εργασία ανέδειξε τη σημασία της δομημένης και συστηματικής ανάλυσης ενός συνόλου δεδομένων που αφορά τιμές κατοικιών στην περιοχή του Kings County. Η αρχική διερεύνηση (EDA) επέτρεψε την κατανόηση της δομής και των βασικών στατιστικών χαρακτηριστικών του dataset, αναδεικνύοντας πιθανά προβλήματα όπως ελλειπτικά δεδομένα, ακραίες τιμές και διπλότυπες εγγραφές. Μέσα από στοχευμένη προεπεξεργασία, αφαιρέθηκαν μη χρήσιμα χαρακτηριστικά (π.χ. id), αντικαταστάθηκαν τιμές με λογικές παραδοχές (π.χ. waterfront), αφαιρέθηκαν γραμμές με περιορισμένα ελλείποντα δεδομένα και αντιμετωπίστηκαν οι διπλότυπες εγγραφές, διασφαλίζοντας έτσι την αξιοπιστία της περαιτέρω ανάλυσης.

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

Η σύγκριση τριών διαφορετικών πειραμάτων γραμμικής παλινδρόμησης ανέδειξε τη σημασία της προσεκτικής επιλογής και συνδυαστικής αξιοποίησης των κατάλληλων χαρακτηριστικών. Το αρχικό μοντέλο, που βασίστηκε αποκλειστικά στο sqft_living, πέτυχε ένα R² περίπου 49%, δείχνοντας τις περιορισμένες δυνατότητες ενός απλού μονοδιάστατου μοντέλου. Η προσθήκη του grade αύξησε το R² σε περίπου 53% και μείωσε το μέσο σφάλμα πρόβλεψης (RMSE), επιβεβαιώνοντας την προστιθέμενη αξία της σωστής επιλογής πρόσθετων μεταβλητών. Το τελικό μοντέλο, που αξιοποίησε το πλήρες σύνολο των επιλεγμένων χαρακτηριστικών, κατέγραψε περαιτέρω αύξηση του R² σε περίπου 69% και σημαντική μείωση του RMSE, καταδεικνύοντας την ισχυρή συμβολή της πολυπαραγοντικής προσέγγισης στην ακρίβεια της πρόβλεψης.

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