贷款数据中的缺失值风险

Python 信用风险建模

Michael Crabtree

Data Scientist, Ford Motor Company

什么是缺失值?

  • 行中为 NULL 而非实际值
  • 空字符串 ''
  • 不是完全空行
  • 可出现在任意列

示例:缺少就业年限的数据框

Python 信用风险建模

与离群点的相似性

  • 会降低机器学习模型表现
  • 可能以意想不到的方式引入偏差
  • 可能使部分模型报错
Python 信用风险建模

与离群点的相似性

  • 会降低机器学习模型表现
  • 可能以意想不到的方式引入偏差
  • 可能使部分模型报错
缺失值类型 可能结果
数值列中的 NULL 错误
字符串列中的 NULL 错误
Python 信用风险建模

如何处理缺失值

  • 处理缺失值一般有三种方式
    • 在缺失处填充值
    • 删除含缺失的行
    • 保留含缺失的行不变
  • 处理方式取决于对数据的理解
Python 信用风险建模

如何处理缺失值

  • 处理缺失值一般有三种方式
    • 在缺失处填充值
    • 删除含缺失的行
    • 保留含缺失的行不变
  • 处理方式取决于对数据的理解
缺失项 解释 处理
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 信用风险建模

Passons à la pratique !

Python 信用风险建模

Preparing Video For Download...