延滞確率の予測

Pythonで学ぶクレジットリスクモデリング

Michael Crabtree

Data Scientist, Ford Motor Company

ロジスティック回帰の係数

# モデルの切片
array([-3.30582292e-10])
# 係数 ['loan_int_rate','person_emp_length','person_income']
array([[ 1.28517496e-09, -2.27622202e-09, -2.17211991e-05]])

ロジスティック回帰での延滞確率の式

# 延滞確率の計算
int_coef_sum = -3.3e-10 +
    (1.29e-09 * loan_int_rate) + (-2.28e-09 * person_emp_length) + (-2.17e-05 * person_income)
prob_default = 1 / (1 + np.exp(-int_coef_sum))
prob_nondefault = 1 - (1 / (1 + np.exp(-int_coef_sum)))
Pythonで学ぶクレジットリスクモデリング

係数の解釈

# 切片
intercept = -1.02
# 勤続年数の係数
person_emp_length_coef = -0.056
  • person_emp_length が1年増えるごとに延滞しにくくなる
Pythonで学ぶクレジットリスクモデリング

係数の解釈

# 切片
intercept = -1.02
# 勤続年数の係数
person_emp_length_coef = -0.056
  • person_emp_length が1年増えるごとに延滞しにくくなる
intercept person_emp_length value * coef probability of default
-1.02 10 (10 * -0.06) .17
-1.02 11 (11 * -0.06) .16
-1.02 12 (12 * -0.06) .15
Pythonで学ぶクレジットリスクモデリング

非数値列の利用

  • 数値: loan_int_rate, person_emp_length, person_income

  • 非数値:

    cr_loan_clean['loan_intent']
    
EDUCATION            
MEDICAL              
VENTURE              
PERSONAL             
DEBTCONSOLIDATION   
HOMEIMPROVEMENT
  • 前処理しないと Python の機械学習でエラーになる
Pythonで学ぶクレジットリスクモデリング

ワンホットエンコード

  • 文字列を数値で表現

データ内の loan_intent の例

Pythonで学ぶクレジットリスクモデリング

ワンホットエンコード

  • 文字列を数値で表現
  • 新しい列 column_VALUE0 または 1

loan_intent 列のワンホットエンコード例

Pythonで学ぶクレジットリスクモデリング

get_dummies

  • pandasget_dummies() を使用
# 数値列を分離
cred_num = cr_loan.select_dtypes(exclude=['object'])
# 非数値列を分離
cred_cat = cr_loan.select_dtypes(include=['object'])
# 非数値列のみワンホットエンコード
cred_cat_onehot = pd.get_dummies(cred_cat)
# 数値列とエンコード列を結合
cr_loan = pd.concat([cred_num, cred_cat_onehot], axis=1)
Pythonで学ぶクレジットリスクモデリング

たぶん未来を予測

  • scikit-learn の .predict_proba() を使用
# 学習
clf_logistic.fit(X_train, np.ravel(y_train))
# 予測
clf_logistic.predict_proba(X_test)
  • 延滞確率の配列を返す
# 確率: [[非延滞, 延滞]]
array([[0.55, 0.45]])
Pythonで学ぶクレジットリスクモデリング

Let's practice!

Pythonで学ぶクレジットリスクモデリング

Preparing Video For Download...