4. 比率与百分比类变量衍生:资产负债比、收入负债比、还款率、逾期率

在风控建模中,绝对值变量(如总负债金额、月收入金额)往往无法直接反映借款人的真实偿债压力与信用风险水平。比率与百分比类变量通过将两个相关指标相除,消除了量纲与规模差异,能够更稳定地刻画借款人的财务健康度与还款意愿。本章将系统讲解资产负债比、收入负债比、还款率、逾期率等核心比率变量的构造逻辑与实战要点。

4.1 比率变量的核心优势

特性 绝对值变量 比率变量
量纲影响 受收入/负债规模影响大 消除量纲,跨客户可比
时间稳定性 随通胀/收入增长漂移 相对稳定,适合跨期建模
风险区分度 高收入≠低风险 比率直接反映偿债压力
业务解释性 需结合其他变量解读 阈值明确,易于风控规则化
建模建议:比率变量通常与绝对值变量配合使用。例如,同时保留“月收入”与“收入负债比”,前者用于评估还款能力上限,后者用于评估当前负债压力。

4.2 资产负债比(DTI 变体)

定义:总负债与总资产的比值,衡量借款人整体财务杠杆水平。

资产负债比 = 总负债 / 总资产

构造要点:

  • 负债口径:包括房贷、车贷、信用卡已用额度、消费贷、网贷等所有已知负债。
  • 资产口径:包括房产估值(非购入价)、车辆估值、存款、理财、股票等可变现资产。
  • 特殊处理:对于自雇人士,需将企业负债按持股比例计入个人负债。
常见陷阱:直接使用客户自报的“总资产”往往高估。建议优先使用第三方征信数据(如公积金基数、房产估值接口)进行交叉验证,或对自报资产进行打折处理(如按70%折算)。

4.3 收入负债比(PTI / DSR)

定义:月还款总额与月收入的比值,是信贷审批中最核心的偿债能力指标。

收入负债比 = 月还款总额 / 月收入

常见阈值参考:

产品类型 安全区间 关注区间 拒绝区间
房贷 ≤ 30% 30% – 50% > 50%
消费贷 ≤ 40% 40% – 60% > 60%
信用卡 ≤ 20% 20% – 40% > 40%

衍生变体:

  • 自由现金流比率:(月收入 - 月还款总额)/ 月收入,反映还款后的剩余可支配收入比例。
  • 刚性支出占比:(月还款总额 + 基本生活支出)/ 月收入,更严格地评估生存压力。

4.4 还款率与逾期率

这两类比率变量通常基于历史还款行为数据构造,是行为评分卡(Behavior Scorecard)的核心输入。

4.4.1 还款率

定义:已还款金额与应还款金额的比值,衡量借款人的还款履约程度。

还款率 = 累计已还金额 / 累计应还金额

时间窗口衍生:

变量名称 构造逻辑 业务含义
近3个月还款率 近3个月已还 / 近3个月应还 近期还款意愿
近6个月还款率 近6个月已还 / 近6个月应还 中期履约稳定性
全生命周期还款率 历史累计已还 / 历史累计应还 整体信用表现

4.4.2 逾期率

定义:逾期金额或逾期笔数与总体的比值,反映资产质量恶化程度。

逾期率(金额口径) = 逾期总金额 / 在贷总金额
逾期率(笔数口径) = 逾期笔数 / 在贷总笔数

按逾期天数分层:

  • M1 逾期率:逾期 1–30 天金额占比,反映短期流动性问题。
  • M2 逾期率:逾期 31–60 天金额占比,反映还款意愿可能恶化。
  • M3+ 逾期率:逾期 61 天以上金额占比,通常视为不良资产。
实战经验:在构造逾期率时,建议同时保留“金额口径”与“笔数口径”。金额口径对大户风险敏感,笔数口径对小微客户集中度敏感。两者结合可更全面评估资产组合风险。

4.5 比率变量衍生流程

比率变量衍生标准流程 原始数据采集 数据清洗与对齐 分子/分母口径定义 比率值计算 分箱与WOE转换 关键检查点 • 分母不为零 • 时间窗口对齐 • 异常值截尾 常见口径选择 • 金额 vs 笔数 • 含息 vs 不含息 • 含担保 vs 不含担保

4.6 Python 代码实现

以下代码演示如何基于原始字段构造核心比率变量,并进行异常值处理:

import pandas as pd
import numpy as np

# 示例数据
df = pd.DataFrame({
    'customer_id': [1001, 1002, 1003, 1004, 1005],
    'total_liability': [500000, 1200000, 300000, 800000, 0],
    'total_asset': [800000, 2000000, 600000, 1000000, 50000],
    'monthly_income': [15000, 30000, 8000, 20000, 6000],
    'monthly_repayment': [4500, 12000, 3200, 8000, 0],
    'total_due': [50000, 120000, 30000, 80000, 10000],
    'total_paid': [48000, 110000, 28000, 72000, 10000]
})

# 1. 资产负债比
df['debt_to_asset_ratio'] = np.where(
    df['total_asset'] > 0,
    df['total_liability'] / df['total_asset'],
    np.nan
)

# 2. 收入负债比
df['income_to_debt_ratio'] = np.where(
    df['monthly_income'] > 0,
    df['monthly_repayment'] / df['monthly_income'],
    np.nan
)

# 3. 还款率
df['repayment_rate'] = np.where(
    df['total_due'] > 0,
    df['total_paid'] / df['total_due'],
    1.0  # 无应还视为已履约
)

# 4. 异常值截尾(上下1%分位数)
def cap_outliers(series, lower=0.01, upper=0.99):
    q_low = series.quantile(lower)
    q_high = series.quantile(upper)
    return series.clip(q_low, q_high)

df['debt_to_asset_ratio'] = cap_outliers(df['debt_to_asset_ratio'])
df['income_to_debt_ratio'] = cap_outliers(df['income_to_debt_ratio'])

print(df[['customer_id', 'debt_to_asset_ratio', 
          'income_to_debt_ratio', 'repayment_rate']])

4.7 比率变量的分箱策略

比率变量通常具有单调性(如收入负债比越高,风险越高),因此分箱时优先选择单调分箱或U型分箱:

比率类型 风险趋势 推荐分箱策略 示例分箱
资产负债比 越高风险越大(单调) 等频单调分箱 [0-0.3), [0.3-0.6), [0.6-0.9), [0.9+)
收入负债比 越高风险越大(单调) 等距单调分箱 [0-0.2), [0.2-0.4), [0.4-0.6), [0.6+)
还款率 越低风险越大(单调) 等频单调分箱 [0-0.7), [0.7-0.9), [0.9-0.99), [0.99-1]
逾期率 越高风险越大(单调) 自定义阈值分箱 [0), (0-0.05), (0.05-0.1), (0.1+)
分箱注意事项:比率变量在 0 或 1 附近往往存在极端值聚集(如还款率=1的客户占比很高)。建议在分箱前先对极端值做截尾或单独成箱,避免信息损失。

4.8 本章小结

比率与百分比类变量是风控模型中最具解释力与稳定性的特征类型。构造时需重点关注:

  • 口径一致性:分子分母的时间窗口、统计口径必须严格对齐。
  • 分母非零处理:对分母为零的情况赋予特殊值(如 -1 或 NaN),并在分箱时单独处理。
  • 业务阈值嵌入:结合监管要求与产品特性,将业务阈值(如收入负债比≤50%)融入分箱边界。
  • 多维度衍生:同一比率可衍生出金额口径、笔数口径、不同时间窗口等多个版本,供模型筛选。