3. 授信业务数据理解
授信评分模型的构建,其根基在于对业务数据的深刻理解。本章将系统梳理信贷业务中三类核心数据来源(申请数据、征信数据、行为数据),讲解数据字典的设计规范,并明确样本与标签的定义标准(好客户/坏客户)。只有将数据源头、数据结构与业务定义三者对齐,后续的评分沙盘才能产出可信的模型。
3.1 信贷业务数据来源
信贷业务数据按产生阶段与获取渠道,可划分为三大类:申请数据、征信数据与行为数据。三者共同构成授信决策的信息基础。
| 数据类别 | 获取时点 | 核心字段示例 | 主要用途 |
|---|---|---|---|
| 申请数据 | 客户提交申请时 | 年龄、收入、职业、婚姻状况、学历、居住地址 | 基础准入、身份核验、初步还款能力评估 |
| 征信数据 | 客户授权后查询 | 征信报告、逾期记录、负债总额、查询次数、担保信息 | 信用历史验证、多头借贷识别、违约风险判断 |
| 行为数据 | 贷后持续产生 | 还款记录、交易流水、APP使用频率、设备信息、位置轨迹 | 贷中监控、额度调整、早期预警、反欺诈 |
数据融合要点: 申请数据提供“客户声称”的信息,征信数据提供“外部验证”的信息,行为数据提供“实际表现”的信息。三者交叉验证,可有效降低信息不对称带来的信用风险。
3.2 数据字典设计
数据字典是数据治理的基石。在授信评分沙盘中,数据字典需要明确每个字段的字段名、数据类型、取值范围、缺失处理规则以及业务含义。以下是一个典型的数据字典片段:
| 字段名 | 数据类型 | 取值范围/示例 | 缺失处理 | 业务含义 |
|---|---|---|---|---|
| age | int | 18-100 | 中位数填充 | 申请人年龄(周岁) |
| income | float | 0-999999.99 | 均值填充 | 申请人月收入(元) |
| marital_status | string | 未婚/已婚/离异/丧偶 | 众数填充 | 婚姻状况 |
| loan_purpose | string | 消费/经营/购房/购车/其他 | 单独标记“未知” | 贷款用途 |
| credit_score | int | 300-850 | 拒绝赋值(如-1) | 外部征信评分 |
| overdue_days_12m | int | 0-365 | 0填充 | 近12个月最大逾期天数 |
数据字典设计避坑: 字段命名应统一采用小写+下划线风格(如
overdue_days_12m),避免使用中文拼音或混合大小写。缺失值处理策略必须在数据字典中明确记录,否则后续建模时容易产生数据泄露或逻辑错误。
3.3 样本与标签定义
在授信评分模型中,标签是监督学习的核心。我们需要根据业务目标,将客户划分为好客户与坏客户。标签定义直接决定模型的学习方向与最终效果。
3.3.1 好客户/坏客户定义标准
| 客户类型 | 定义标准 | 典型业务规则 | 标签值 |
|---|---|---|---|
| 好客户 | 按时还款,无违约记录 | 贷款期内从未逾期超过30天,且正常结清 | 0 |
| 坏客户 | 发生严重违约或欺诈 | 逾期超过90天、核销、被认定为欺诈、失联 | 1 |
| 灰客户 | 表现介于好坏之间 | 逾期1-89天但未达到严重违约标准 | 通常剔除或单独建模 |
标签定义原则:
- 业务可解释性: 坏客户的定义必须与公司风险偏好、监管要求一致。
- 时间窗口明确: 通常设置“表现期”(如12个月),在表现期内观察客户是否变坏。
- 样本平衡性: 坏客户占比通常较低(5%-15%),需考虑采样策略或代价敏感学习。
3.3.2 样本划分与时间窗口
在授信评分沙盘中,样本的划分需要严格遵循时间顺序,避免未来信息泄露。典型的样本划分方式如下:
- 观察点(Observation Point): 客户申请或放款的时间点。
- 表现期(Performance Window): 观察点之后的一段固定时间(如12个月),用于判断客户好坏。
- 观察期(Observation Window): 观察点之前的一段固定时间(如6个月),用于提取特征变量。
以下是一个时间窗口划分的示意图:
3.4 数据质量与预处理要点
在正式建模前,必须对数据进行质量检查。以下是常见的数据质量问题及处理策略:
| 问题类型 | 典型表现 | 处理策略 |
|---|---|---|
| 缺失值 | 字段为空或NULL | 均值/中位数/众数填充、模型预测填充、单独标记 |
| 异常值 | 年龄200岁、收入为负数 | 截断(如1%-99%分位数)、业务规则剔除 |
| 重复记录 | 同一客户多次申请 | 按申请时间保留最新一条,或按业务规则去重 |
| 逻辑矛盾 | 婚姻状态为“未婚”但配偶信息非空 | 交叉验证后修正或标记为可疑 |
| 时间穿越 | 申请日期早于出生日期 | 直接剔除或标记为数据错误 |
Python预处理示例: 使用Pandas进行缺失值填充与异常值截断。
import pandas as pd
import numpy as np
# 读取数据
df = pd.read_csv('credit_data.csv')
# 缺失值填充:年龄用中位数,收入用均值
df['age'].fillna(df['age'].median(), inplace=True)
df['income'].fillna(df['income'].mean(), inplace=True)
# 异常值截断:收入上下限设为1%和99%分位数
lower = df['income'].quantile(0.01)
upper = df['income'].quantile(0.99)
df['income'] = df['income'].clip(lower, upper)
# 重复记录去重:保留最新一条
df.sort_values('apply_date', inplace=True)
df.drop_duplicates(subset='customer_id', keep='last', inplace=True)
3.5 本章小结
- 信贷业务数据来源包括申请数据、征信数据和行为数据,三者各有侧重,需融合使用。
- 数据字典是数据标准化的核心工具,需明确字段名、类型、取值范围、缺失处理与业务含义。
- 好客户/坏客户的标签定义需结合业务规则与时间窗口,避免未来信息泄露。
- 数据预处理(缺失值、异常值、重复记录、逻辑矛盾)是建模前的必要步骤,直接影响模型质量。