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 比率变量衍生流程
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%)融入分箱边界。
- 多维度衍生:同一比率可衍生出金额口径、笔数口径、不同时间窗口等多个版本,供模型筛选。