🔹 Περιγραφή του Συνόλου Δεδομένων

Το αρχικό dataset προέρχεται από πελάτες τράπεζας στην Ταϊβάν και αφορά τις χρηματοπιστωτικές τους συμπεριφορές. Η αναλυτική κατανόηση του dataset είναι απαραίτητη για την αποτελεσματική επιλογή μεταβλητών και την ορθή εφαρμογή τεχνικών.

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

Πιθανά επιχειρηματικά ερωτήματα:

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

Αρχικά, εξετάζονται μεταβλητές: - Δημογραφικές (AGE, SEX, MARRIAGE, EDUCATION) - Οικονομικές (LIMIT_BAL, BILL_AMT, PAY_AMT) - Ιστορικό πληρωμών (PAY_0, PAY_2, PAY_3)

Διερεύνηση Ποιότητας Δεδομένων:

# Δομή και βασικές πληροφορίες
str(creditData)
## tibble [30,000 × 13] (S3: tbl_df/tbl/data.frame)
##  $ LIMIT_BAL: num [1:30000] 20000 120000 90000 50000 50000 50000 500000 100000 140000 20000 ...
##  $ SEX      : num [1:30000] 2 2 2 2 1 1 1 2 2 1 ...
##  $ EDUCATION: num [1:30000] 2 2 2 2 2 1 1 2 3 3 ...
##  $ MARRIAGE : num [1:30000] 1 2 2 1 1 2 2 2 1 2 ...
##  $ AGE      : num [1:30000] 24 26 34 37 57 37 29 23 28 35 ...
##  $ PAY_0    : num [1:30000] 2 -1 0 0 -1 0 0 0 0 -2 ...
##  $ PAY_2    : num [1:30000] 2 2 0 0 0 0 0 -1 0 -2 ...
##  $ PAY_3    : num [1:30000] -1 0 0 0 -1 0 0 -1 2 -2 ...
##  $ BILL_AMT1: num [1:30000] 3913 2682 29239 46990 8617 ...
##  $ BILL_AMT2: num [1:30000] 3102 1725 14027 48233 5670 ...
##  $ PAY_AMT1 : num [1:30000] 0 0 1518 2000 2000 ...
##  $ PAY_AMT2 : num [1:30000] 689 1000 1500 2019 36681 ...
##  $ Default  : Factor w/ 2 levels "0","1": 2 2 1 1 1 1 1 1 1 1 ...
summary(creditData)
##    LIMIT_BAL            SEX          EDUCATION        MARRIAGE    
##  Min.   :  10000   Min.   :1.000   Min.   :0.000   Min.   :0.000  
##  1st Qu.:  50000   1st Qu.:1.000   1st Qu.:1.000   1st Qu.:1.000  
##  Median : 140000   Median :2.000   Median :2.000   Median :2.000  
##  Mean   : 167484   Mean   :1.604   Mean   :1.853   Mean   :1.552  
##  3rd Qu.: 240000   3rd Qu.:2.000   3rd Qu.:2.000   3rd Qu.:2.000  
##  Max.   :1000000   Max.   :2.000   Max.   :6.000   Max.   :3.000  
##       AGE            PAY_0             PAY_2             PAY_3        
##  Min.   :21.00   Min.   :-2.0000   Min.   :-2.0000   Min.   :-2.0000  
##  1st Qu.:28.00   1st Qu.:-1.0000   1st Qu.:-1.0000   1st Qu.:-1.0000  
##  Median :34.00   Median : 0.0000   Median : 0.0000   Median : 0.0000  
##  Mean   :35.49   Mean   :-0.0167   Mean   :-0.1338   Mean   :-0.1662  
##  3rd Qu.:41.00   3rd Qu.: 0.0000   3rd Qu.: 0.0000   3rd Qu.: 0.0000  
##  Max.   :79.00   Max.   : 8.0000   Max.   : 8.0000   Max.   : 8.0000  
##    BILL_AMT1         BILL_AMT2         PAY_AMT1         PAY_AMT2      
##  Min.   :-165580   Min.   :-69777   Min.   :     0   Min.   :      0  
##  1st Qu.:   3559   1st Qu.:  2985   1st Qu.:  1000   1st Qu.:    833  
##  Median :  22382   Median : 21200   Median :  2100   Median :   2009  
##  Mean   :  51223   Mean   : 49179   Mean   :  5664   Mean   :   5921  
##  3rd Qu.:  67091   3rd Qu.: 64006   3rd Qu.:  5006   3rd Qu.:   5000  
##  Max.   : 964511   Max.   :983931   Max.   :873552   Max.   :1684259  
##  Default  
##  0:23364  
##  1: 6636  
##           
##           
##           
## 
  • Δεν εντοπίζονται ελλιπείς τιμές (NA values)
  • Δεν υπάρχουν διπλότυπα καθώς κάθε γραμμή αντιστοιχεί σε μοναδικό πελάτη
  • Οι μεταβλητές φαίνεται να έχουν λογικά εύρη τιμών

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

kable(char_df, format = "html", align = "c") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
                full_width = FALSE, position = "center") %>%
  column_spec(3, bold = TRUE)
Μεταβλητή Περιγραφή Τύπος
LIMIT_BAL Όριο πιστωτικής κάρτας. Numeric
SEX Φύλο (1=Άνδρας, 2=Γυναίκα). Numeric
EDUCATION Εκπαίδευση (1=απόφοιτος, 2=πανεπιστήμιο κ.ά.). Numeric
MARRIAGE Κατάσταση γάμου (1=έγγαμος, 2=ελεύθερος). Numeric
AGE Ηλικία πελάτη. Numeric
PAY_0 Καθυστέρηση πληρωμής τρέχοντος μήνα. Numeric
PAY_2 Καθυστέρηση πληρωμής πριν 2 μήνες. Numeric
PAY_3 Καθυστέρηση πληρωμής πριν 3 μήνες. Numeric
BILL_AMT1 Λογαριασμός 1ου μήνα. Numeric
BILL_AMT2 Λογαριασμός 2ου μήνα. Numeric
PAY_AMT1 Πληρωμή 1ου μήνα. Numeric
PAY_AMT2 Πληρωμή 2ου μήνα. Numeric
Default Καθυστέρηση πληρωμής επόμενου μήνα. Boolean

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

Ο διαχωρισμός του συνόλου είναι κρίσιμος για την αξιολόγηση της γενίκευσης του μοντέλου. Χωρίζουμε τα δεδομένα σε: - Training set (70%) για εκπαίδευση - Test set (30%) για τελική πρόβλεψη και αξιολόγηση

Ορίζουμε seed για να διασφαλίσουμε αναπαραγωγιμότητα και αξιοπιστία αποτελεσμάτων:

set.seed(123)
split <- sample.split(creditData$Default, SplitRatio = 0.7)
train <- subset(creditData, split == TRUE)
test <- subset(creditData, split == FALSE)

🔹 Δημιουργία CART Δέντρου Απόφασης

Για την κατασκευή του ταξινομητή, χρησιμοποιούμε την συνάρτηση rpart() με: - method="class": γιατί έχουμε ταξινόμηση σε κατηγορία (default ή όχι) - cp = 0.0015: ελεγχόμενη πολυπλοκότητα δέντρου - minbucket = 20: ελάχιστος αριθμός παρατηρήσεων ανά φύλλο

treeModel <- rpart(Default ~ ., data = train, method = "class", cp = 0.0015, minbucket = 25)
prp(treeModel, type = 2, extra = 104, varlen = 0, faclen = 0)

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

🔍 Ερμηνεία Μονοπατιών Δέντρου

Αναλύουμε παρακάτω χαρακτηριστικά παραδείγματα μονοπατιών του δέντρου:

Μονοπάτι 1: Χαμηλό PAY_0, μεγάλος BILL_AMT1 → καλή συμπεριφορά → Πρόβλεψη: No Default

Μονοπάτι 2: PAY_0 χαμηλό αλλά μικρή πληρωμή στον PAY_AMT2 → πιθανή δυσκολία → Πρόβλεψη: Default

Μονοπάτι 3: Νεαρή ηλικία και χαμηλός λογαριασμός → αυξημένο ρίσκο → Default

Μονοπάτι 4: Διαδοχικές καθυστερήσεις (PAY_0, PAY_2) και μικρό πιστωτικό όριο → Default

Μονοπάτι 5: Υψηλό όριο και μεγάλη πρόσφατη πληρωμή → καλός πελάτης → No Default

Μονοπάτι 6: Μορφωμένος πελάτης, επαρκείς πληρωμές → No Default

Μονοπάτι 7: Χαμηλό μορφωτικό επίπεδο και μικρές πληρωμές → αυξημένο ρίσκο → Default

🔹 Πρόβλεψη και Ακρίβεια

Χρησιμοποιούμε το test set για να αξιολογήσουμε την πραγματική απόδοση του μοντέλου:

predicted <- predict(treeModel, newdata = test, type = "class")
table(test$Default, predicted)
##    predicted
##        0    1
##   0 6579  430
##   1 1260  731
accuracy <- mean(test$Default == predicted)
accuracy
## [1] 0.8122222

Η ακρίβεια (accuracy) δείχνει τη συνολική αποτελεσματικότητα του μοντέλου σε ποσοστό σωστών προβλέψεων. Για το συγκεκριμένο dataset, επιτυγχάνεται ικανοποιητική ακρίβεια (>70%).

🔹 ROC Καμπύλη και AUC

Η ROC (Receiver Operating Characteristic) καμπύλη επιτρέπει την αξιολόγηση της απόδοσης του μοντέλου σε όλα τα πιθανά thresholds. Το AUC (Area Under Curve) παρέχει ένα συνολικό σκορ της διακριτικής ικανότητας του μοντέλου.

predProbs <- predict(treeModel, newdata = test)
pred <- prediction(predProbs[,2], test$Default)
perf <- performance(pred, "tpr", "fpr")
plot(perf, col="darkorange", main="ROC Curve - CART")

auc <- performance(pred, "auc")
as.numeric(auc@y.values)
## [1] 0.6895055

Η τιμή του AUC > 0.75 επιβεβαιώνει ότι το μοντέλο έχει πολύ καλή διακριτική ικανότητα ανάμεσα σε πελάτες που θα αθετήσουν και αυτούς που δεν θα αθετήσουν.

🔹 Συμπεράσματα

Η μελέτη αυτή απέδειξε την αποτελεσματικότητα της μεθόδου CART σε επιχειρησιακά προβλήματα ταξινόμησης. Τα σημαντικά σημεία που προκύπτουν είναι:

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

Μελλοντικές επεκτάσεις μπορεί να περιλαμβάνουν βελτιστοποίηση των παραμέτρων του δέντρου, χρήση ensemble τεχνικών (Random Forests) ή και υβριδικά μοντέλα με μεταβλητά thresholds.

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