1 Περιγραφή dataset

Το dataset προέρχεται από το Kaggle και αφορά πελάτες τραπεζών. Περιλαμβάνει 10000 εγγραφές/πελάτες τράπεζας το οποίο αποτελείται από 12 ανεξάρτητες μεταβλητές (χαρακτηριστικά πελατών) και 1 εξαρτημένη μεταβλητή, που δείχνει αν ένας πελάτης αποχωρεί (churn) ή παραμένει.

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

2 Περιγραφή Μεταβλητών

Παρακάτω περιγράφονται οι μεταβλητές του dataset, μαζί με τους τύπους τους:


3 Εξερεύνηση Δομής Dataset

#Εισαγωγή dataset
Churn_Modeling <- read.csv("C:/Users/dadak/Documents/sxoli/Business_Analytics/Assignment2/Churn_Modelling.csv")
library(ggplot2)
# Προβολή δομής dataset
str(Churn_Modeling)
## 'data.frame':    10002 obs. of  14 variables:
##  $ RowNumber      : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ CustomerId     : int  15634602 15647311 15619304 15701354 15737888 15574012 15592531 15656148 15792365 15592389 ...
##  $ Surname        : chr  "Hargrave" "Hill" "Onio" "Boni" ...
##  $ CreditScore    : int  619 608 502 699 850 645 822 376 501 684 ...
##  $ Geography      : chr  "France" "Spain" "France" "France" ...
##  $ Gender         : chr  "Female" "Female" "Female" "Female" ...
##  $ Age            : num  42 41 42 39 43 44 50 29 44 NA ...
##  $ Tenure         : int  2 1 8 1 2 8 7 4 4 2 ...
##  $ Balance        : num  0 83808 159661 0 125511 ...
##  $ NumOfProducts  : int  1 1 3 2 1 2 2 4 2 1 ...
##  $ HasCrCard      : int  1 0 1 0 NA 1 1 1 0 1 ...
##  $ IsActiveMember : int  1 1 0 0 1 0 1 0 NA 1 ...
##  $ EstimatedSalary: num  101349 112543 113932 93827 79084 ...
##  $ Exited         : int  1 0 1 0 0 1 0 1 0 0 ...
# Προβολή μεγέθους dataset
dim(Churn_Modeling)
## [1] 10002    14

4 Προεπεξεργασία Δεδομένων

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

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

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

# Εύρεση και αφαίρεση διπλότυπων
# Πλήθος συνολικών γραμμών πριν
nrow_before <- nrow(Churn_Modeling)

# Πόσες διπλότυπες γραμμές υπάρχουν;
duplicates_found <- sum(duplicated(Churn_Modeling))

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

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

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

5 Γραμμική Παλινδρόμηση

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

Τα αποτελέσματα δείχνουν ότι η EstimatedSalary εμφανίζει πολύ χαμηλή συσχέτιση με τις περισσότερες μεταβλητές του συνόλου δεδομένων, γεγονός που υποδηλώνει την απουσία ισχυρών γραμμικών σχέσεων. Παρ’ όλα αυτά, μεταβλητές όπως το NumOfProducts και το Balance παρουσιάζουν σχετικά υψηλότερες, αν και ασθενείς, συσχετίσεις, και συνεπώς επιλέγονται για να χρησιμοποιηθούν στα επόμενα μοντέλα γραμμικής παλινδρόμησης.

## ---- Ανάλυση Γραμμικής Παλινδρόμησης για EstimatedSalary ----
## Σκοπός: Να εξεταστεί αν το EstimatedSalary μπορεί να προβλεφθεί από άλλες μεταβλητές.

## ---- Correlation with EstimatedSalary (excluding CustomerId) ----

# Επιλογή μόνο αριθμητικών και έγκυρων μεταβλητών για ανάλυση
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
numeric_vars_clean <- Churn_Modeling %>%
  select(CreditScore, Age, Tenure, Balance, NumOfProducts, HasCrCard, 
         IsActiveMember, Exited, EstimatedSalary)

# Υπολογισμός συσχέτισης
cor_matrix <- cor(numeric_vars_clean, use = "complete.obs")

# Συσχέτιση των μεταβλητών με τον EstimatedSalary
cor_salary <- cor_matrix[, "EstimatedSalary"] %>%
  sort(decreasing = TRUE)

# Εμφάνιση συσχετίσεων (εκτός του ίδιου του EstimatedSalary)
cor_salary[-1]
##  NumOfProducts        Balance         Exited         Tenure    CreditScore 
##    0.014163288    0.012920171    0.012032105    0.007680142   -0.001359972 
##            Age      HasCrCard IsActiveMember 
##   -0.007212858   -0.009947528   -0.011297582
## ---- Γραμμικό Μοντέλο με NumOfProducts ----

# Δημιουργία μοντέλου με την πιο σχετική μεταβλητή (NumOfProducts)
model_salary_numprod <- lm(EstimatedSalary ~ NumOfProducts, data = Churn_Modeling)

# Αξιολόγηση
summary(model_salary_numprod)
## 
## Call:
## lm(formula = EstimatedSalary ~ NumOfProducts, data = Churn_Modeling)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -100660  -49047      17   49079  100625 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    97941.2     1618.6   60.51   <2e-16 ***
## NumOfProducts   1404.4      988.7    1.42    0.156    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 57510 on 9998 degrees of freedom
## Multiple R-squared:  0.0002018,  Adjusted R-squared:  0.0001018 
## F-statistic: 2.018 on 1 and 9998 DF,  p-value: 0.1555

5.1 Μεθοδολογία Γραμμικής Παλινδρόμησης

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

Βάσει αυτής της συσχέτισης, δημιουργήθηκε ένα απλό γραμμικό μοντέλο με τη μορφή EstimatedSalary ~ NumOfProducts, προκειμένου να διερευνηθεί η προβλεπτική ικανότητα του πλήθους των προϊόντων για το εισόδημα του πελάτη. Το μοντέλο αξιολογήθηκε χρησιμοποιώντας τον συντελεστή προσδιορισμού () και το μέσο τετραγωνικό σφάλμα (RMSE). Το R² μετρά την ικανότητα του μοντέλου να εξηγεί τη διακύμανση της εξαρτημένης μεταβλητής, ενώ το RMSE εκφράζει το μέσο σφάλμα των προβλέψεων.

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

# Υπολογισμός προβλέψεων και μετρικών
pred_salary_np <- predict(model_salary_numprod)
rmse_np <- sqrt(mean((Churn_Modeling$EstimatedSalary - pred_salary_np)^2))
r2_np <- summary(model_salary_numprod)$r.squared

cat("📈 RMSE:", rmse_np, "\n")
## 📈 RMSE: 57501.82
cat("📊 R²:", r2_np, "\n")
## 📊 R²: 0.0002017592

5.2 Σχολιασμός Αποτελεσμάτων

Τα αποτελέσματα του αρχικού μοντέλου EstimatedSalary ~ NumOfProducts δείχνουν ότι η προβλεπτική του ικανότητα είναι εξαιρετικά περιορισμένη. Ο συντελεστής προσδιορισμού R² = 0.0002 υποδηλώνει ότι το μοντέλο εξηγεί μόλις το 0.02% της διακύμανσης του εκτιμώμενου μισθού, ενώ η τιμή του RMSE ≈ 57,502 δείχνει μεγάλο μέσο σφάλμα πρόβλεψης σε απόλυτες μονάδες. Αυτό επιβεβαιώνει ότι η μεταβλητή NumOfProducts, από μόνη της, δεν επαρκεί για την ακριβή πρόβλεψη του EstimatedSalary και απαιτείται η ενίσχυση του μοντέλου με επιπλέον σχετικές μεταβλητές.

5.3 Περιγραφή Δεύτερου Μοντέλου

Στο δεύτερο μοντέλο γραμμικής παλινδρόμησης χρησιμοποιήθηκαν δύο ανεξάρτητες μεταβλητές: NumOfProducts και Balance, με στόχο τη βελτίωση της ακρίβειας πρόβλεψης του EstimatedSalary. Η επιλογή της μεταβλητής Balance βασίστηκε στη σχετική συσχέτισή της με τον εκτιμώμενο μισθό, όπως προέκυψε από την ανάλυση Pearson. Η προσθήκη αυτής της μεταβλητής επιτρέπει στο μοντέλο να ενσωματώσει χρηματοοικονομικές πληροφορίες που δεν καλύπτονται από το πλήθος των προϊόντων, αυξάνοντας δυνητικά την ερμηνευτική του ικανότητα. Το μοντέλο αξιολογήθηκε ξανά με τα ίδια κριτήρια (R² και RMSE) για να διαπιστωθεί αν παρατηρείται ουσιαστική βελτίωση ως προς την προβλεπτική του απόδοση.

## ---- Νέο Μοντέλο: EstimatedSalary ~ NumOfProducts + Balance ----

# Δημιουργία δεύτερου μοντέλου με προσθήκη της μεταβλητής Balance
model_salary_2 <- lm(EstimatedSalary ~ NumOfProducts + Balance, data = Churn_Modeling)

# Αξιολόγηση
summary(model_salary_2)
## 
## Call:
## lm(formula = EstimatedSalary ~ NumOfProducts + Balance, data = Churn_Modeling)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -102208  -49123     -11   49063  101576 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   9.574e+04  2.029e+03  47.198   <2e-16 ***
## NumOfProducts 1.972e+03  1.038e+03   1.900   0.0575 .  
## Balance       1.739e-02  9.674e-03   1.797   0.0723 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 57500 on 9997 degrees of freedom
## Multiple R-squared:  0.0005247,  Adjusted R-squared:  0.0003247 
## F-statistic: 2.624 on 2 and 9997 DF,  p-value: 0.07257
# Προβλέψεις και μετρικά
pred_salary_2 <- predict(model_salary_2)
rmse_2 <- sqrt(mean((Churn_Modeling$EstimatedSalary - pred_salary_2)^2))
r2_2 <- summary(model_salary_2)$r.squared

cat("📈 RMSE Model 2:", rmse_2, "\n")
## 📈 RMSE Model 2: 57492.53
cat("📊 R² Model 2:", r2_2, "\n")
## 📊 R² Model 2: 0.0005246665

5.4 Σχολιασμός Δεύτερου Μοντέλου

Η προσθήκη της μεταβλητής Balance στο δεύτερο μοντέλο οδήγησε σε ελαφρώς βελτιωμένα αποτελέσματα σε σχέση με το αρχικό μοντέλο. Η τιμή του R² αυξήθηκε σε 0.00052, υποδεικνύοντας ότι πλέον εξηγείται περίπου το 0.05% της διακύμανσης του EstimatedSalary – μια μικρή αλλά υπαρκτή βελτίωση. Αντίστοιχα, η τιμή του RMSE μειώθηκε οριακά σε 57,492, γεγονός που σημαίνει ότι το μοντέλο εξακολουθεί να έχει υψηλό μέσο σφάλμα πρόβλεψης. Παρά τη μικρή πρόοδο, τα αποτελέσματα παραμένουν αδύναμα, κάτι που υποδεικνύει την ανάγκη ενίσχυσης του μοντέλου με επιπλέον χαρακτηριστικά που ενδέχεται να σχετίζονται με τον μισθό.

5.5 Περιγραφή Τρίτου Μοντέλου

Στο τρίτο μοντέλο γραμμικής παλινδρόμησης προστέθηκε η μεταβλητή Age, η οποία αν και είχε αρνητική συσχέτιση με τον EstimatedSalary, κρίθηκε κατάλληλη για διερεύνηση λόγω της θεματικής της συνάφειας. Ο στόχος ήταν να εμπλουτιστεί το μοντέλο με δημογραφική πληροφορία, ώστε να εξεταστεί κατά πόσο η ηλικία μπορεί να ενισχύσει τη συνολική προβλεπτική ικανότητα σε συνδυασμό με τις οικονομικές μεταβλητές Balance και NumOfProducts. Το νέο μοντέλο αξιολογήθηκε, όπως και τα προηγούμενα, με βάση το R² και το RMSE.

## ---- Τρίτο Μοντέλο: EstimatedSalary ~ NumOfProducts + Balance + Age ----

# Δημιουργία τρίτου μοντέλου με προσθήκη της μεταβλητής Age
model_salary_3 <- lm(EstimatedSalary ~ NumOfProducts + Balance + Age, data = Churn_Modeling)

# Αξιολόγηση
summary(model_salary_3)
## 
## Call:
## lm(formula = EstimatedSalary ~ NumOfProducts + Balance + Age, 
##     data = Churn_Modeling)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -102100  -49084     -42   49135  101995 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    9.730e+04  2.962e+03  32.850   <2e-16 ***
## NumOfProducts  1.951e+03  1.038e+03   1.879   0.0602 .  
## Balance        1.756e-02  9.677e-03   1.814   0.0696 .  
## Age           -3.938e+01  5.487e+01  -0.718   0.4730    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 57500 on 9995 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.0005761,  Adjusted R-squared:  0.0002762 
## F-statistic: 1.921 on 3 and 9995 DF,  p-value: 0.1239
# Υπολογισμός RMSE & R²
pred_salary_3 <- predict(model_salary_3)
rmse_3 <- sqrt(mean((Churn_Modeling$EstimatedSalary - pred_salary_3)^2))
## Warning in Churn_Modeling$EstimatedSalary - pred_salary_3: longer object length
## is not a multiple of shorter object length
r2_3 <- summary(model_salary_3)$r.squared

cat("📈 RMSE Model 3:", rmse_3, "\n")
## 📈 RMSE Model 3: 57516.45
cat("📊 R² Model 3:", r2_3, "\n")
## 📊 R² Model 3: 0.0005761297

5.6 Σχολιασμός Τρίτου Μοντέλου

Η προσθήκη της μεταβλητής Age στο μοντέλο οδήγησε σε ελαφρώς υψηλότερο R² (0.000576) σε σύγκριση με το δεύτερο μοντέλο, υποδηλώνοντας ότι εξηγείται ένα οριακά μεγαλύτερο ποσοστό της διακύμανσης του EstimatedSalary. Ωστόσο, η τιμή του RMSE αυξήθηκε σε 57,516, γεγονός που υποδεικνύει επιδείνωση της ακρίβειας των προβλέψεων. Αυτό δείχνει ότι η μεταβλητή Age ενδέχεται να εισήγαγε θόρυβο αντί για χρήσιμη πληροφορία. Το μοντέλο δεν παρουσιάζει ουσιαστική βελτίωση και επομένως απαιτείται προσοχή στην επιλογή των επόμενων μεταβλητών.

5.7 Μεθοδολογία Τέταρτου Μοντέλου

Στο τέταρτο μοντέλο γραμμικής παλινδρόμησης προστέθηκε η μεταβλητή Tenure, η οποία αντιπροσωπεύει τον αριθμό ετών που ένας πελάτης παραμένει στην τράπεζα. Στόχος της προσθήκης αυτής ήταν να ενσωματωθεί πληροφορία που σχετίζεται με τη διάρκεια της πελατειακής σχέσης, προκειμένου να ενισχυθεί η ερμηνευτική ικανότητα του μοντέλου. Το νέο μοντέλο περιλαμβάνει πλέον τέσσερις μεταβλητές: NumOfProducts, Balance, Age και Tenure.

## ---- Τέταρτο Μοντέλο: EstimatedSalary ~ NumOfProducts + Balance + Age + Tenure ----

# Προσθήκη της μεταβλητής Tenure (χρόνια ως πελάτης)
model_salary_4 <- lm(EstimatedSalary ~ NumOfProducts + Balance + Age + Tenure, data = Churn_Modeling)

# Αξιολόγηση του νέου μοντέλου
summary(model_salary_4)
## 
## Call:
## lm(formula = EstimatedSalary ~ NumOfProducts + Balance + Age + 
##     Tenure, data = Churn_Modeling)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -102558  -49081    -290   49135  101529 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    9.653e+04  3.129e+03  30.853   <2e-16 ***
## NumOfProducts  1.943e+03  1.038e+03   1.872   0.0613 .  
## Balance        1.762e-02  9.677e-03   1.821   0.0687 .  
## Age           -3.898e+01  5.488e+01  -0.710   0.4775    
## Tenure         1.517e+02  1.989e+02   0.763   0.4455    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 57510 on 9994 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.0006343,  Adjusted R-squared:  0.0002344 
## F-statistic: 1.586 on 4 and 9994 DF,  p-value: 0.175
# Προβλέψεις και μέτρα απόδοσης
pred_salary_4 <- predict(model_salary_4)
rmse_4 <- sqrt(mean((Churn_Modeling$EstimatedSalary - pred_salary_4)^2))
## Warning in Churn_Modeling$EstimatedSalary - pred_salary_4: longer object length
## is not a multiple of shorter object length
r2_4 <- summary(model_salary_4)$r.squared

cat("📈 RMSE Model 4:", rmse_4, "\n")
## 📈 RMSE Model 4: 57526.86
cat("📊 R² Model 4:", r2_4, "\n")
## 📊 R² Model 4: 0.0006343432

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

Το τέταρτο μοντέλο παρουσιάζει ελάχιστη βελτίωση στον συντελεστή R², ο οποίος ανέρχεται πλέον σε 0.00063, δείχνοντας ότι το μοντέλο εξηγεί ένα ελάχιστα μεγαλύτερο ποσοστό της διακύμανσης του EstimatedSalary. Παράλληλα, η τιμή του RMSE αυξήθηκε περαιτέρω στα 57,527, υποδεικνύοντας ότι η ακρίβεια των προβλέψεων χειροτέρεψε σε σχέση με τα προηγούμενα μοντέλα. Η μεταβλητή Tenure, αν και εννοιολογικά σχετική, φαίνεται να μην προσφέρει ουσιαστική προβλεπτική δύναμη και πιθανώς ενισχύει το πρόβλημα υπερπροσαρμογής (overfitting).

5.9 Μεθοδολογία Πέμπτου Μοντέλου

Το πέμπτο μοντέλο γραμμικής παλινδρόμησης επεκτάθηκε με την προσθήκη της μεταβλητής CreditScore, η οποία σχετίζεται με την πιστοληπτική ικανότητα του πελάτη. Σκοπός της προσθήκης ήταν να εξεταστεί εάν η χρηματοοικονομική φερεγγυότητα επηρεάζει την εκτιμώμενη τιμή του μισθού. Το μοντέλο πλέον περιλαμβάνει πέντε μεταβλητές: NumOfProducts, Balance, Age, Tenure και CreditScore.

## ---- Πέμπτο Μοντέλο: EstimatedSalary ~ NumOfProducts + Balance + Age + Tenure + CreditScore ----

# Προσθήκη της μεταβλητής CreditScore
model_salary_5 <- lm(EstimatedSalary ~ NumOfProducts + Balance + Age + Tenure + CreditScore, data = Churn_Modeling)

# Αξιολόγηση μοντέλου
summary(model_salary_5)
## 
## Call:
## lm(formula = EstimatedSalary ~ NumOfProducts + Balance + Age + 
##     Tenure + CreditScore, data = Churn_Modeling)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -102501  -49082    -306   49047  101613 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    9.721e+04  4.959e+03  19.602   <2e-16 ***
## NumOfProducts  1.946e+03  1.038e+03   1.874   0.0610 .  
## Balance        1.764e-02  9.678e-03   1.822   0.0684 .  
## Age           -3.902e+01  5.488e+01  -0.711   0.4771    
## Tenure         1.518e+02  1.989e+02   0.763   0.4454    
## CreditScore   -1.049e+00  5.951e+00  -0.176   0.8601    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 57510 on 9993 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.0006374,  Adjusted R-squared:  0.0001374 
## F-statistic: 1.275 on 5 and 9993 DF,  p-value: 0.2716
# Υπολογισμός προβλέψεων και δεικτών
pred_salary_5 <- predict(model_salary_5)
rmse_5 <- sqrt(mean((Churn_Modeling$EstimatedSalary - pred_salary_5)^2))
## Warning in Churn_Modeling$EstimatedSalary - pred_salary_5: longer object length
## is not a multiple of shorter object length
r2_5 <- summary(model_salary_5)$r.squared

cat("📈 RMSE Model 5:", rmse_5, "\n")
## 📈 RMSE Model 5: 57526.09
cat("📊 R² Model 5:", r2_5, "\n")
## 📊 R² Model 5: 0.0006374493

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

Η προσθήκη της μεταβλητής CreditScore δεν οδήγησε σε ουσιαστική βελτίωση της απόδοσης του μοντέλου. Ο συντελεστής προσδιορισμού R² παρέμεινε σχεδόν στάσιμος στο 0.00064, ενώ και το RMSE διατηρήθηκε ουσιαστικά αμετάβλητο στα 57,526. Αυτό καταδεικνύει ότι η νέα μεταβλητή δεν συνέβαλε ουσιαστικά στην εξήγηση της διακύμανσης του EstimatedSalary, ενισχύοντας την παρατήρηση ότι τα διαθέσιμα χαρακτηριστικά του dataset δεν έχουν ισχυρή γραμμική σχέση με τον εκτιμώμενο μισθό. Το μοντέλο εμφανίζει στασιμότητα στην απόδοση, γεγονός που αποτελεί ένδειξη ότι περαιτέρω προσθήκες μεταβλητών δεν αναμένεται να βελτιώσουν ουσιαστικά τα αποτελέσματα.