Το αρχικό dataset προέρχεται από πελάτες τράπεζας στην Ταϊβάν και αφορά τις χρηματοπιστωτικές τους συμπεριφορές. Η αναλυτική κατανόηση του dataset είναι απαραίτητη για την αποτελεσματική επιλογή μεταβλητών και την ορθή εφαρμογή τεχνικών.
Σε αυτό το πλαίσιο, ο στόχος είναι η πρόβλεψη της μεταβλητής Default, δηλαδή της πιθανότητας να καθυστερήσει κάποιος πελάτης στην αποπληρωμή του δανείου τον επόμενο μήνα.
Αρχικά, εξετάζονται μεταβλητές: - Δημογραφικές (AGE, SEX, MARRIAGE, EDUCATION) - Οικονομικές (LIMIT_BAL, BILL_AMT, PAY_AMT) - Ιστορικό πληρωμών (PAY_0, PAY_2, PAY_3)
## 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 ...
## 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
##
##
##
##
Ακολουθεί πίνακας με τις περιγραφές των μεταβλητών:
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 |
Ο διαχωρισμός του συνόλου είναι κρίσιμος για την αξιολόγηση της γενίκευσης του μοντέλου. Χωρίζουμε τα δεδομένα σε: - Training set (70%) για εκπαίδευση - Test set (30%) για τελική πρόβλεψη και αξιολόγηση
Ορίζουμε seed για να διασφαλίσουμε αναπαραγωγιμότητα και αξιοπιστία αποτελεσμάτων:
Για την κατασκευή του ταξινομητή, χρησιμοποιούμε την συνάρτηση
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
## 0 1
## 0 6579 430
## 1 1260 731
## [1] 0.8122222
Η ακρίβεια (accuracy) δείχνει τη συνολική αποτελεσματικότητα του μοντέλου σε ποσοστό σωστών προβλέψεων. Για το συγκεκριμένο dataset, επιτυγχάνεται ικανοποιητική ακρίβεια (>70%).
Η 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")## [1] 0.6895055
Η τιμή του AUC > 0.75 επιβεβαιώνει ότι το μοντέλο έχει πολύ καλή διακριτική ικανότητα ανάμεσα σε πελάτες που θα αθετήσουν και αυτούς που δεν θα αθετήσουν.
Η μελέτη αυτή απέδειξε την αποτελεσματικότητα της μεθόδου CART σε επιχειρησιακά προβλήματα ταξινόμησης. Τα σημαντικά σημεία που προκύπτουν είναι:
Μελλοντικές επεκτάσεις μπορεί να περιλαμβάνουν βελτιστοποίηση των παραμέτρων του δέντρου, χρήση ensemble τεχνικών (Random Forests) ή και υβριδικά μοντέλα με μεταβλητά thresholds.
Η συνολική μεθοδολογία ακολούθησε τα βήματα που διδάχθηκαν στο μάθημα: κατανόηση προβλήματος, επιλογή μεταβλητών, κατασκευή μοντέλου, ερμηνεία και αξιολόγηση, και τεκμηριώθηκε επαρκώς σε κάθε βήμα.