3. 数据基础:信贷评分卡数据简介
3.1 信贷评分卡数据概述
信贷评分卡是金融风控领域最经典、最成熟的量化决策工具之一。它通过历史借贷数据,将借款人的违约风险映射为一个可比较的分数,从而辅助信贷审批、额度管理和定价决策。在《额度定价漂移检测》课程中,我们使用的底层数据正是来源于这类评分卡系统。
评分卡数据通常包含三类核心信息:
- 申请信息:借款人提交的个人资料,如年龄、收入、职业、居住地等。
- 信用历史:征信报告中的过往借贷记录、还款行为、逾期情况等。
- 行为数据:在贷后管理过程中产生的动态行为,如消费习惯、还款方式变化等。
课程数据说明: 本章使用的数据集为脱敏后的模拟评分卡数据,保留了真实业务场景中的变量分布特征,但不包含任何真实个人隐私信息。数据仅用于教学演示额度定价漂移检测方法。
3.2 特征变量与目标变量
在建模和漂移检测任务中,我们需要明确区分两类变量:
| 变量类型 | 变量名称 | 含义说明 | 数据类型 |
|---|---|---|---|
| 特征变量 | age |
借款人年龄(岁) | 数值型 |
| 特征变量 | income |
年收入(万元) | 数值型 |
| 特征变量 | credit_score |
外部征信评分(300-850) | 数值型 |
| 特征变量 | loan_amount |
申请贷款金额(万元) | 数值型 |
| 特征变量 | loan_term |
贷款期限(月) | 数值型 |
| 特征变量 | debt_ratio |
负债收入比 | 数值型 |
| 特征变量 | employment_years |
工作年限(年) | 数值型 |
| 特征变量 | home_ownership |
房产拥有状态(自有/按揭/租房) | 类别型 |
| 特征变量 | purpose |
贷款用途(教育/医疗/消费等) | 类别型 |
| 目标变量 | default_flag |
是否违约(1=违约,0=正常) | 二分类 |
| 目标变量 | pricing_rate |
实际定价利率(%) | 数值型 |
关键理解: 在额度定价漂移检测中,
default_flag 用于评估风险模型的表现漂移,pricing_rate 用于监控定价策略的偏移。两者共同构成了漂移检测的双重目标。
3.3 数据加载与初步探索
我们使用 Python 的 pandas 库加载数据,并进行三个维度的初步探索:shape(数据形状)、info(数据类型与缺失值)、describe(统计描述)。
3.3.1 加载数据
import pandas as pd
# 加载评分卡数据
df = pd.read_csv('credit_scoring_data.csv')
# 查看数据形状
print("数据形状(行数, 列数):", df.shape)
输出示例:
数据形状(行数, 列数): (50000, 11)
数据集包含 50,000 条样本记录,11 个字段(9 个特征变量 + 2 个目标变量)。
3.3.2 数据类型与缺失值检查
# 查看数据类型和缺失值情况
df.info()
输出示例:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 50000 entries, 0 to 49999
Data columns (total 11 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 age 50000 non-null int64
1 income 50000 non-null float64
2 credit_score 49850 non-null float64
3 loan_amount 50000 non-null float64
4 loan_term 50000 non-null int64
5 debt_ratio 49720 non-null float64
6 employment_years 50000 non-null int64
7 home_ownership 50000 non-null object
8 purpose 50000 non-null object
9 default_flag 50000 non-null int64
10 pricing_rate 50000 non-null float64
dtypes: float64(5), int64(4), object(2)
memory usage: 4.2 MB
注意缺失值:
credit_score 和 debt_ratio 存在少量缺失值(分别缺失 150 条和 280 条),在后续漂移检测前需要进行处理。缺失比例均低于 1%,对整体分布影响有限。
3.3.3 统计描述
# 查看数值型变量的统计描述
df.describe()
输出示例:
age income credit_score loan_amount loan_term debt_ratio employment_years default_flag pricing_rate
count 50000.000 50000.00000 49850.00000 50000.000000 50000.0000 49720.00000 50000.00000 50000.000000 50000.000000
mean 35.420 12.35000 680.50000 15.200000 36.5000 0.35000 5.80000 0.120000 8.750000
std 10.150 8.20000 85.30000 12.800000 12.2000 0.18000 4.30000 0.325000 3.200000
min 18.000 2.00000 350.00000 1.000000 12.0000 0.02000 0.00000 0.000000 3.500000
25% 27.000 6.50000 620.00000 5.000000 24.0000 0.21000 2.00000 0.000000 6.500000
50% 33.000 10.80000 690.00000 11.000000 36.0000 0.32000 5.00000 0.000000 8.200000
75% 42.000 16.20000 750.00000 22.000000 48.0000 0.46000 8.00000 0.000000 10.500000
max 75.000 55.00000 850.00000 60.000000 72.0000 0.95000 20.00000 1.000000 18.000000
从统计描述中可以快速获取关键信息:
- 违约率:
default_flag均值为 0.12,即整体违约率约 12%。 - 定价利率:
pricing_rate均值 8.75%,范围从 3.5% 到 18%。 - 年龄分布:借款人年龄集中在 27-42 岁,符合信贷业务主流客群特征。
- 收入分布:年收入中位数 10.8 万元,75% 分位数为 16.2 万元,存在右偏分布。
3.4 数据探索流程总览
下图展示了从原始数据加载到初步探索的完整流程:
3.5 数据探索要点总结
通过上述三个步骤,我们完成了对评分卡数据的初步认知:
| 探索步骤 | 核心输出 | 业务意义 |
|---|---|---|
shape |
样本量 50,000,特征 11 个 | 数据量充足,适合进行分布漂移检测 |
info |
2 个字段存在缺失值 | 需在预处理阶段处理缺失,避免漂移检测偏差 |
describe |
违约率 12%,利率范围 3.5%-18% | 为后续漂移阈值设定提供基准参考 |
下一步准备: 在完成数据加载与初步探索后,我们将进入数据预处理阶段,包括缺失值处理、异常值检测、特征编码等,为后续的漂移检测模型构建打好基础。