लोन डेटा में क्लास असंतुलन

Python में क्रेडिट रिस्क मॉडलिंग

Michael Crabtree

Data Scientist, Ford Motor Company

डेटा में डिफॉल्ट कम हैं

  • loan_status के मान ही क्लास हैं
    • Non-default: 0
    • Default: 1
y_train['loan_status'].value_counts()
loan_status Training Data Count Percentage of Total
0 13,798 78%
1 3,877 22%
Python में क्रेडिट रिस्क मॉडलिंग

मॉडल की loss function

  • xgboost में Gradient Boosted Trees की loss function log-loss होती है
    • लक्ष्य है इस मान को न्यूनतम करना

Log loss का सूत्र

True loan status Predicted probability Log Loss
1 0.1 2.3
0 0.9 2.3
  • गलत तरीके से भविष्यवाणी किया गया default वित्तीय रूप से अधिक नकारात्मक असर डालता है
Python में क्रेडिट रिस्क मॉडलिंग

असंतुलन की लागत

  • False negative (default को non-default बताना) बहुत महँगा पड़ता है
Person Loan Amount Potential Profit Predicted Status Actual Status Losses
A $1,000 $10 Default Non-Default -$10
B $1,000 $10 Non-Default Default -$1,000
  • मॉडल का log-loss दोनों के लिए समान है, पर असली नुकसान अलग है
Python में क्रेडिट रिस्क मॉडलिंग

असंतुलन के कारण

  • डेटा समस्याएँ
    • क्रेडिट डेटा का सही सैंपल नहीं लिया गया
    • डेटा स्टोरेज समस्याएँ
  • बिज़नेस प्रक्रियाएँ:
    • संभावित defaults को न स्वीकारने के उपाय पहले से मौजूद
    • संभावित defaults जल्दी अन्य फर्मों को बेच दिए जाते हैं
  • व्यवहारगत कारक:
    • सामान्यतः लोग अपने लोन पर default नहीं करते
      • जितनी कम बार default होगा, उतनी उच्च उनकी क्रेडिट रेटिंग
Python में क्रेडिट रिस्क मॉडलिंग

Class असंतुलन से निपटना

  • डेटा में class असंतुलन से निपटने के कई तरीके
Method Pros Cons
Gather more data defaults की संख्या बढ़ती है defaults का प्रतिशत बदल न भी सके
Penalize models defaults के लिए recall बढ़ता है मॉडल को अधिक ट्यूनिंग और मेंटेनेंस चाहिए
Sample data differently सबसे कम तकनीकी बदलाव डेटा में defaults कम हो सकते हैं
Python में क्रेडिट रिस्क मॉडलिंग

Undersampling रणनीति

  • Non-defaults का छोटा random sample लें और defaults के साथ जोड़ें

Undersampling रणनीति का डायग्राम

Python में क्रेडिट रिस्क मॉडलिंग

स्प्लिट डेटा सेट जोड़ना

  • Test और training सेट को फिर साथ जोड़ें
  • असली 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]
Python में क्रेडिट रिस्क मॉडलिंग

Non-defaults का undersampling

  • Non-defaults डेटा सेट से random sample लें
  • Defaults डेटा सेट के साथ concatenate करें
# 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)
Python में क्रेडिट रिस्क मॉडलिंग

अभ्यास करते हैं!

Python में क्रेडिट रिस्क मॉडलिंग

Preparing Video For Download...