##Περιγραφή dataset To dataset προέρχεται απο την εταιρεία Dream Housing Finance οπου παρέχει στεγαστικά δάνεια σε πελάτες που διαμένουν σε αστικές, ημιαστικές και αγροτικές περιοχές. Οι πελάτες υποβάλλουν αίτηση για δάνειο μέσω διαδικτυακής φόρμας, παρέχοντας προσωπικά στοιχεία όπως φύλο, οικογενειακή κατάσταση, επίπεδο εκπαίδευσης, αριθμό εξαρτώμενων μελών, εισόδημα, ποσό δανείου, ιστορικό πιστοληπτικής ικανότητας και άλλα. Η εταιρεία επιδιώκει να αυτοματοποιήσει τη διαδικασία αξιολόγησης επιλεξιμότητας για δάνειο σε πραγματικό χρόνο, χρησιμοποιώντας αυτά τα δεδομένα. Ο στόχος είναι να εντοπιστούν τα τμήματα πελατών που είναι επιλέξιμα για δάνεια, ώστε να στοχευθούν αποτελεσματικά.
Πηγη : kaggle
homeloan_data <- read.csv("/Users/mariakommata/Downloads/loan_sanction_train.csv")
##Περιγραφη δεδομένων dataset
| Μεταβλητή | Τύπος |
|---|---|
| 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)
# Δημιουργία 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, που δείχνει ικανοποιητική διαχωριστική ικανότητα. Η απόδοσή του είναι σημαντικά καλύτερη από ένα τυχαίο μοντέλο. Μπορεί να χρησιμοποιηθεί από την επιχείρηση για βελτίωση της διαδικασίας έγκρισης δανείων.