Modelowanie ryzyka kredytowego w Pythonie
Michael Crabtree
Data Scientist, Ford Motor Company
loan_status to klasy01y_train['loan_status'].value_counts()
| loan_status | Liczba w zbiorze treningowym | Procent całości |
|---|---|---|
| 0 | 13 798 | 78% |
| 1 | 3 877 | 22% |
xgboost używają funkcji straty log-loss| Rzeczywisty status | Prawdopodobieństwo predykcji | Log-loss |
|---|---|---|
| 1 | 0.1 | 2.3 |
| 0 | 0.9 | 2.3 |
| Osoba | Kwota pożyczki | Potencjalny zysk | Przewidziany status | Rzeczywisty status | Straty |
|---|---|---|---|---|---|
| A | 1 000 USD | 10 USD | Default | Brak defaultu | -10 USD |
| B | 1 000 USD | 10 USD | Brak defaultu | Default | -1 000 USD |
| Metoda | Zalety | Wady |
|---|---|---|
| Zebranie większej ilości danych | Zwiększa liczbę defaultów | Procent defaultów może się nie zmienić |
| Penalizacja modeli | Zwiększa recall dla defaultów | Model wymaga więcej strojenia i utrzymania |
| Inne próbkowanie danych | Najmniej techniczna korekta | Mniej defaultów w danych |
loan_status# Concat the training sets
X_y_train = pd.concat([X_train.reset_index(drop = True),
y_train.reset_index(drop = True)], axis = 1)
# Get the counts of defaults and non-defaults
count_nondefault, count_default = X_y_train['loan_status'].value_counts()
# Separate nondefaults and defaults
nondefaults = X_y_train[X_y_train['loan_status'] == 0]
defaults = X_y_train[X_y_train['loan_status'] == 1]
# Undersample the non-defaults using sample() in pandas
nondefaults_under = nondefaults.sample(count_default)
# Concat the undersampled non-defaults with the defaults
X_y_train_under = pd.concat([nondefaults_under.reset_index(drop = True),
defaults.reset_index(drop = True)], axis=0)
Modelowanie ryzyka kredytowego w Pythonie