ローンデータの欠損リスク

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

Michael Crabtree

Data Scientist, Ford Motor Company

欠損データとは

  • 実値の代わりに行内が NULL
  • 空文字 ''
  • 完全な空行ではない
  • 任意の列で発生しうる

雇用年数が欠損しているデータフレームの例

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

外れ値と似た点

  • 機械学習モデルの性能を低下させる
  • 予期せぬ形でバイアスを生む
  • 一部のモデルでエラーの原因になる
Pythonで学ぶクレジットリスクモデリング

外れ値と似た点

  • 機械学習モデルの性能を低下させる
  • 予期せぬ形でバイアスを生む
  • 一部のモデルでエラーの原因になる
欠損データの種類 可能な結果
数値列の NULL エラー
文字列列の NULL エラー
Pythonで学ぶクレジットリスクモデリング

欠損データの扱い方

  • 欠損への対処は一般に3通り
    • 欠損箇所に値を補完
    • 欠損を含む行を削除
    • そのまま残す
  • データ理解に基づき選択する
Pythonで学ぶクレジットリスクモデリング

欠損データの扱い方

  • 欠損への対処は一般に3通り
    • 欠損箇所に値を補完
    • 欠損を含む行を削除
    • そのまま残す
  • データ理解に基づき選択する
欠損データ 解釈 対応
loan_status の NULL 直近で承認されたローン 予測用データから除外
person_age の NULL 年齢未記録・非開示 中央値で補完
Pythonで学ぶクレジットリスクモデリング

欠損データの検出

  • isnull() で欠損値を検出
  • sum() で欠損件数を集計
  • .any() は全列をチェック
null_columns = cr_loan.columns[cr_loan.isnull().any()]
cr_loan[null_columns].isnull().sum()
# 列ごとの欠損値合計
person_home_ownership          25
person_emp_length             895
loan_intent                    25
loan_int_rate                3140
cb_person_default_on_file      15
Pythonで学ぶクレジットリスクモデリング

欠損データの補完

  • .fillna() と集計関数などで欠損を補完
cr_loan['loan_int_rate'].fillna((cr_loan['loan_int_rate'].mean()), inplace = True)

平均で置換した欠損金利の例

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

欠損データの削除

  • 外れ値と同様にインデックスで対象行を特定
  • .drop() で該当行を削除
indices = cr_loan[cr_loan['person_emp_length'].isnull()].index
cr_loan.drop(indices, inplace=True)
Pythonで学ぶクレジットリスクモデリング

練習してみましょう!

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

Preparing Video For Download...