核貸接受率

以 Python 進行信用風險建模

Michael Crabtree

Data Scientist, Ford Motor Company

門檻與貸款狀態

  • 之前我們為一組 prob_default 值設定了門檻
    • 用來改變貸款的預測 loan_status
preds_df['loan_status'] = preds_df['prob_default'].apply(lambda x: 1 if x > 0.4 else 0)
Loan prob_default threshold loan_status
1 0.25 0.4 0
2 0.42 0.4 1
3 0.75 0.4 1
以 Python 進行信用風險建模

門檻與接受率

  • 用模型預測來設定更合理的門檻
    • 也可用來核准或拒絕新貸款
  • 對所有新貸款,我們要拒絕高機率違約者
    • 以測試資料作為新貸款範例
  • 接受率:為保持投資組合違約數量偏低,接受的新貸款占比
    • 被接受且違約的貸款,影響類似於假陰性
以 Python 進行信用風險建模

理解接受率

  • 範例:接受 prob_default 最低的 85% 貸款

預測機率分佈的直方圖

以 Python 進行信用風險建模

計算門檻值

  • 計算 85% 接受率所對應的門檻值
import numpy as np
# Compute the threshold for 85% acceptance rate
threshold = np.quantile(prob_default, 0.85)
0.804
Loan prob_default Threshold Predicted loan_status Accept or Reject
1 0.65 0.804 0 Accept
2 0.85 0.804 1 Reject
以 Python 進行信用風險建模

套用計算出的門檻

  • 以新門檻重新指定 loan_status
# Compute the quantile on the probabilities of default
preds_df['loan_status'] = preds_df['prob_default'].apply(lambda x: 1 if x > 0.804 else 0)
以 Python 進行信用風險建模

不良率(Bad Rate)

  • 即使有計算出的門檻,部分被接受的貸款仍會違約
  • 這些貸款的 prob_default 多落在模型校準不佳的區域

突出顯示不良率的已接受貸款長條圖

以 Python 進行信用風險建模

不良率計算

不良率公式

#Calculate the bad rate
np.sum(accepted_loans['true_loan_status']) / accepted_loans['true_loan_status'].count()
  • 若非違約為 0、違約為 1,則 sum() 即為違約筆數
  • 單一欄位的 .count() 等同於該資料框的列數
以 Python 進行信用風險建模

一起來練習吧!

以 Python 進行信用風險建模

Preparing Video For Download...