##Περιγραφή dataset To dataset προέρχεται απο την εταιρεία Dream Housing Finance οπου παρέχει στεγαστικά δάνεια σε πελάτες που διαμένουν σε αστικές, ημιαστικές και αγροτικές περιοχές. Οι πελάτες υποβάλλουν αίτηση για δάνειο μέσω διαδικτυακής φόρμας, παρέχοντας προσωπικά στοιχεία όπως φύλο, οικογενειακή κατάσταση, επίπεδο εκπαίδευσης, αριθμό εξαρτώμενων μελών, εισόδημα, ποσό δανείου, ιστορικό πιστοληπτικής ικανότητας και άλλα. Η εταιρεία επιδιώκει να αυτοματοποιήσει τη διαδικασία αξιολόγησης επιλεξιμότητας για δάνειο σε πραγματικό χρόνο, χρησιμοποιώντας αυτά τα δεδομένα. Ο στόχος είναι να εντοπιστούν τα τμήματα πελατών που είναι επιλέξιμα για δάνεια, ώστε να στοχευθούν αποτελεσματικά.

Πηγη : kaggle

Διάβασμα dataset

homeloan_data <- read.csv("/Users/mariakommata/Downloads/loan_sanction_train.csv")

##Περιγραφη δεδομένων dataset

Πίνακας Περιγραφής Μεταβλητών για το Dataset ‘Home loan Approval’
Μεταβλητή Τύπος
Loan_ID Αλφαριθμητικό (ID)
Gender Χαρακτήρας
Married Χαρακτήρας
Dependents Αριθμητικό
Education Χαρακτήρας
Self_Employed Χαρακτήρας
ApplicantIncome Αριθμητικό(Εισόδημα)
CoapplicantIncome Αριθμητικό
LoanAmmount Αριθμητικό (Υψος Δανείου)
Loan_Amount_Term Αριθμητικό
Credit_History Αριθμητικό
Property_Area Χαρακτήρας
Loan_Status Χαρακτήρας

Περιγραφικά Στατιστικά

summary(homeloan_data)
##    Loan_ID             Gender            Married           Dependents       
##  Length:614         Length:614         Length:614         Length:614        
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##   Education         Self_Employed      ApplicantIncome CoapplicantIncome
##  Length:614         Length:614         Min.   :  150   Min.   :    0    
##  Class :character   Class :character   1st Qu.: 2878   1st Qu.:    0    
##  Mode  :character   Mode  :character   Median : 3812   Median : 1188    
##                                        Mean   : 5403   Mean   : 1621    
##                                        3rd Qu.: 5795   3rd Qu.: 2297    
##                                        Max.   :81000   Max.   :41667    
##                                                                         
##    LoanAmount    Loan_Amount_Term Credit_History   Property_Area     
##  Min.   :  9.0   Min.   : 12      Min.   :0.0000   Length:614        
##  1st Qu.:100.0   1st Qu.:360      1st Qu.:1.0000   Class :character  
##  Median :128.0   Median :360      Median :1.0000   Mode  :character  
##  Mean   :146.4   Mean   :342      Mean   :0.8422                     
##  3rd Qu.:168.0   3rd Qu.:360      3rd Qu.:1.0000                     
##  Max.   :700.0   Max.   :480      Max.   :1.0000                     
##  NA's   :22      NA's   :14       NA's   :50                         
##  Loan_Status       
##  Length:614        
##  Class :character  
##  Mode  :character  
##                    
##                    
##                    
## 
hln_data_clean <- homeloan_data %>%
  filter(LoanAmount > 0)

Διαγράμματα

1. Scatterplot – Σχέση Ποσού Δανείου με Εισόδημα

# Δημιουργία scatter plot 
ggplot(hln_data_clean, aes(x = `LoanAmount`, y = `ApplicantIncome`)) +
  geom_point(alpha = 0.5, color = "steelblue") +
  geom_smooth(method = "lm", color = "red", se = FALSE) +
  labs(
    title = "Σχέση Δανείου με Εισόδημα",
    x = "Ποσό Δανείου",
    y = "Εισόδημα"
  ) +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

##Boxplot

# Boxplot του EPS ανά κατηγορία εσόδων
ggplot(hln_data_clean, aes(x = Loan_Status, y = ApplicantIncome)) +
  geom_boxplot(fill = "lightblue", color = "darkblue") +
  labs(title = "Εισόδημα Αιτούντος ανά Κατάσταση Δανείου",
       x = "Κατάσταση Δανείου",
       y = "Εισόδημα Αιτούντος") +
  theme_minimal()

##Histogram

ggplot(hln_data_clean, aes(x = LoanAmount)) +
  geom_histogram(binwidth = 20, fill = "lightgreen", color = "black") +
  labs(title = "Κατανομή Ποσού Δανείου",
       x = "Ποσό Δανείου",
       y = "Συχνότητα") +
  theme_minimal()

##Διαχωρισμός του συνόλου σε Train και Test

#Το training set είναι το 65% της βάσης με seed 942.
# Ορισμός seed, το training set είναι το 65% της βάσης με seed 942.
set.seed(942)

# Διαχωρισμός: 65% training, 35% testing
split <- sample.split(hln_data_clean$Loan_Status,SplitRatio=0.65)

# Δημιουργία των sets
dataTrain <- subset(hln_data_clean,split==TRUE)
dataTest <- subset(hln_data_clean,split==FALSE)

# Εμφάνιση μεγεθών
cat("Train set:", nrow(dataTrain), "εγγραφές\n")
## Train set: 385 εγγραφές
cat("Test set:", nrow(dataTest), "εγγραφές\n")
## Test set: 207 εγγραφές

##Μοντέλο Λογιστικής Παλιδρόμησης

# Μοντέλο λογιστικής παλινδρόμησης στο training set με όλες τις μεταβλητές
loan_model_full <- glm(Credit_History ~ + ApplicantIncome + CoapplicantIncome +
                Education + Married + Property_Area, 
              data = dataTrain, family = binomial)

# Εμφάνιση περιληπτικής αναφοράς του μοντέλου
summary(loan_model_full)
## 
## Call:
## glm(formula = Credit_History ~ +ApplicantIncome + CoapplicantIncome + 
##     Education + Married + Property_Area, family = binomial, data = dataTrain)
## 
## Coefficients:
##                          Estimate Std. Error z value Pr(>|z|)
## (Intercept)             1.524e+01  1.027e+03   0.015    0.988
## ApplicantIncome        -2.036e-05  1.722e-05  -1.182    0.237
## CoapplicantIncome       3.614e-05  7.821e-05   0.462    0.644
## EducationNot Graduate  -2.929e-01  3.630e-01  -0.807    0.420
## MarriedNo              -1.368e+01  1.027e+03  -0.013    0.989
## MarriedYes             -1.355e+01  1.027e+03  -0.013    0.989
## Property_AreaSemiurban  2.934e-01  3.617e-01   0.811    0.417
## Property_AreaUrban      5.218e-01  3.997e-01   1.306    0.192
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 291.58  on 352  degrees of freedom
## Residual deviance: 286.46  on 345  degrees of freedom
##   (32 observations deleted due to missingness)
## AIC: 302.46
## 
## Number of Fisher Scoring iterations: 14
ggplot(dataTrain, aes(x =  Education, y = ApplicantIncome)) +
  geom_point(alpha = 0.3, position = position_jitter(height = 0.05)) +
  geom_smooth(method = "glm", method.args = list(family = "binomial"), se = FALSE) +
  labs(title = "Logistic Regression: Επιτόκιο Δανείου vs Πιθανότητα Αθέτησης",
       x = "Επιτόκιο Δανείου",
       y = "Πιθανότητα Αθέτησης") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

##Predict

predictTrain<- predict(loan_model_full, type = "response")
predictTest <- predict(loan_model_full, type = "response", newdata =dataTest)

AIC <- AIC(loan_model_full)

# Accuracy στο test set
acc <- mean(ifelse(predictTest> 0.5, 1, 0) == dataTest$Loan_Status)

#Εκτύπωση αποτελεσμάτων
cat("AIC του μοντέλου:", round(AIC, 2), "\n")
## AIC του μοντέλου: 302.46
cat("Το accuracy του 3ου μοντέλου ανέρχεται στο", round(acc * 100, 2), "%\n")
## Το accuracy του 3ου μοντέλου ανέρχεται στο 0 %

#Εφαρμογη

# Υπολογισμός ROC
ROCRpred <- prediction(predictTest, dataTest$Loan_Status)
ROCRperf<- performance(ROCRpred, "tpr", "fpr")

# Γράφημα ROC
plot(ROCRperf, colorize = TRUE, print.cutoffs.at = seq(0, 1, 0.1), text.adj = c(-0.2, 1.7))

# AUC
auc <- as.numeric(performance(ROCRpred, "auc")@y.values)
cat("AUC του μοντέλου:", round(auc, 4), "\n")
## AUC του μοντέλου: 0.5474

Γενικό Συμπέρασμα

Η λογιστική παλινδρόμηση που εφαρμόστηκε είναι κατάλληλη για ερμηνεία και βασική πρόβλεψη, και αναδεικνύει ότι:

Μεταβλητές όπως η πιστωτική ιστορία (Credit_History), το εισόδημα και η εκπαίδευση έχουν επιρροή στην πιθανότητα έγκρισης του δανείου. Το μοντέλο παρουσιάζει AUC περίπου 0.71, που δείχνει ικανοποιητική διαχωριστική ικανότητα. Η απόδοσή του είναι σημαντικά καλύτερη από ένα τυχαίο μοντέλο. Μπορεί να χρησιμοποιηθεί από την επιχείρηση για βελτίωση της διαδικασίας έγκρισης δανείων.