4、探索性数据分析(EDA):目标变量定义、单变量分析、多变量分析、相关性分析、数据可视化在风控中的应用
探索性数据分析(Exploratory Data Analysis, EDA)是信用评分卡与贷后预警模型开发中承上启下的关键环节。在完成数据采集与清洗后,建模人员面对的是数百个潜在特征与数十万条样本记录。若直接进入特征工程或模型训练,往往会导致特征选择盲目、模型解释性差、过拟合风险高。EDA的核心价值在于:通过统计摘要、分布检验、交叉分析与可视化手段,系统性地理解数据的内在结构、变量间的关联模式以及目标变量的可预测性,从而为后续的特征筛选、分箱策略与算法选型提供坚实依据。本章将围绕目标变量定义、单变量分析、多变量分析、相关性分析及数据可视化五个维度,结合信贷风控实战场景展开深度解析。
上图展示了EDA在风控建模中的整体分析框架与时间窗口设计逻辑。在实际操作中,EDA并非一次性完成,而是随着对数据理解的深入不断迭代。以下各节将逐一拆解每个模块的具体实施方法、业务含义与常见陷阱。
4.1 目标变量定义:好坏客户的科学界定
核心原理:信用评分卡模型本质上是二分类问题,目标变量(Y)通常定义为“好客户”与“坏客户”。但“坏客户”的界定并非简单的“是否逾期”,而是需要结合业务策略、监管要求与数据可得性进行严谨设计。目标变量定义直接决定了模型的学习信号,若定义不当,后续所有工作都将失去意义。
判断方法与操作流程:
- 确定观察期与表现期:观察期是用于计算特征变量的时间窗口(通常为6-12个月),表现期是用于判断客户好坏的时间窗口(通常为12-24个月)。两者之间需有明确的时间切分点(T0)。
- 定义坏客户标准:常见标准包括:表现期内任意一笔逾期≥M3(逾期90天以上)、或累计逾期次数≥2次且金额超过阈值、或发生欺诈/失联等。建议结合业务容忍度设定。
- 排除灰样本:对于表现期不足、提前结清、或处于争议状态的样本,应单独标记或剔除,避免噪声。
- 样本平衡性检查:计算坏样本占比,若低于2%或高于20%,需考虑过采样/欠采样或调整定义。
实战案例:某消费金融公司开发循环贷产品,初始定义“坏客户”为表现期内任意逾期≥M2。EDA发现坏样本率仅1.2%,且大量M2客户在后续3个月内恢复正常还款。经与业务方讨论,将定义调整为“表现期内任意逾期≥M3或累计逾期≥3次”,坏样本率升至3.8%,模型区分度(KS值)从0.28提升至0.35。同时,将提前结清且无逾期的客户单独标记为“中性样本”,不参与训练。
| 定义维度 | 宽松定义 | 适中定义 | 严格定义 |
|---|---|---|---|
| 逾期阈值 | M1(30天) | M2(60天) | M3+(90天以上) |
| 坏样本率 | 8%-15% | 3%-8% | 1%-3% |
| 模型区分度 | 较低(KS≈0.2) | 适中(KS≈0.3) | 较高(KS≈0.4) |
| 业务风险 | 误杀率高 | 平衡较好 | 坏账遗漏风险 |
| 适用场景 | 高利润产品 | 标准信贷 | 低风险偏好机构 |
常见误区:① 直接使用当前逾期状态作为标签,忽略了时间窗口一致性;② 未剔除表现期不足的样本,导致标签噪声;③ 好坏客户比例严重失衡时不处理,导致模型偏向多数类。
4.2 单变量分析:洞察每个特征的分布与预测力
核心原理:单变量分析聚焦于单个特征自身的分布形态、缺失情况、异常值以及该特征与目标变量的初步关系。其核心目的是筛选出具有区分能力的特征,并为后续的分箱操作提供边界参考。
操作流程:
- 连续变量:计算均值、中位数、标准差、偏度、峰度;绘制直方图与箱线图,识别长尾分布与极端值。
- 分类变量:统计频数、占比、类别数量;对于高基数类别(如职业、地区),考虑合并或使用目标编码。
- 缺失率分析:计算缺失比例,超过30%的变量需谨慎处理,缺失本身可能具有业务含义(如客户未填写收入)。
- IV值(Information Value)计算:将特征分箱后,计算IV值衡量预测能力。IV<0.02视为无预测力,0.02-0.1为弱预测力,0.1-0.3为中等,>0.3为强(但需警惕过拟合)。
# 单变量分析示例(Python伪代码)
import pandas as pd
import numpy as np
def calc_iv(df, feature, target):
df = df[[feature, target]].dropna()
df['bin'] = pd.qcut(df[feature], q=10, duplicates='drop')
grouped = df.groupby('bin', as_index=False)[target].agg(
total='count', bad='sum')
grouped['good'] = grouped['total'] - grouped['bad']
grouped['bad_rate'] = grouped['bad'] / grouped['bad'].sum()
grouped['good_rate'] = grouped['good'] / grouped['good'].sum()
grouped['woe'] = np.log(grouped['bad_rate'] / grouped['good_rate'])
grouped['iv'] = (grouped['bad_rate'] - grouped['good_rate']) * grouped['woe']
return grouped['iv'].sum()
经验提醒:对于收入、负债等强偏态变量,建议先做对数变换或使用分位数分箱,避免极端值主导分箱边界。同时,IV值计算需保证每个分箱内好坏样本均不少于5个,否则WOE不稳定。
4.3 多变量分析与相关性分析:识别特征间的共线性与交互效应
核心原理:多变量分析关注特征与特征之间、特征与目标之间的联合关系。相关性分析是其中的核心工具,用于量化线性或单调关联强度。在信用评分卡中,特征共线性会导致模型系数不稳定、解释性变差,因此必须通过相关性矩阵和VIF(方差膨胀因子)进行诊断。
判断方法:
- Pearson相关系数:适用于连续变量间的线性关系,对异常值敏感。
- Spearman秩相关系数:适用于有序变量或非线性单调关系,更稳健。
- Cramér's V:用于分类变量间的关联强度。
- VIF(方差膨胀因子):VIF>10表示存在严重共线性,需考虑删除或合并特征。
| 相关系数范围 | 关联强度 | 风控处理建议 |
|---|---|---|
| |r| ≥ 0.8 | 极强 | 仅保留IV值高或业务含义更清晰的一个 |
| 0.5 ≤ |r| < 0.8 | 中等偏强 | 考虑PCA或业务加权融合 |
| 0.3 ≤ |r| < 0.5 | 中等 | 保留,但注意交互项构造 |
| |r| < 0.3 | 弱 | 正常保留 |
案例拆解:在某银行信用卡评分卡项目中,EDA发现“近6个月平均使用额度”与“近3个月平均使用额度”相关系数高达0.92,且两者IV值相近(0.25 vs 0.23)。通过VIF诊断,确认存在严重共线性。最终保留“近6个月平均使用额度”(业务含义更稳定),删除“近3个月”变量,模型VIF最大值从15.3降至4.2,逻辑回归系数符号与业务常识完全一致。
风险提示:相关性分析只能捕捉线性或单调关系,无法识别非线性交互效应。例如,年龄与逾期率呈U型关系(年轻人和老年人风险均高),此时应通过分箱WOE曲线观察,而非仅依赖相关系数。
4.4 数据可视化在风控中的应用:从全局到细节的洞察工具
核心原理:可视化是EDA的“眼睛”,能够将抽象统计量转化为直观图形,帮助建模人员、业务人员与风控管理层快速达成共识。在风控场景中,可视化不仅用于探索,还用于模型监控与报告输出。
常用可视化类型与风控应用:
- 直方图+密度曲线:观察连续变量分布形态,识别双峰、长尾等异常。
- 箱线图(按好坏分组):对比好客户与坏客户在同一特征上的分布差异,快速定位区分度高的特征。
- 相关性热力图:全局展示特征间相关性,辅助特征筛选。
- WOE曲线图:展示分箱后WOE值的变化趋势,验证单调性(逻辑回归要求WOE尽量单调)。
- 时间序列图:监控贷后逾期率随账龄(Vintage)的变化,评估模型稳定性。
实战场景:某互金平台在贷后预警模型开发中,通过可视化发现“借款用途”为“装修”的客户逾期率显著高于其他用途(9.2% vs 4.5%),且该特征在传统评分卡中常被忽略。进一步通过散点图与气泡图分析,发现“装修”用途与“借款金额>5万”、“收入证明缺失”存在强交互效应。模型团队据此构造了“装修用途×收入缺失”的交互特征,模型AUC提升0.03,并在贷后策略中对该客群提高了预警等级。
可视化最佳实践:
- 先全局后局部:先看整体分布,再深入异常点。
- 分组对比:所有可视化尽量按目标变量分组着色。
- 避免过度美化:图形应服务于决策,而非装饰。
- 输出标准化:为业务方提供统一模板的可视化报告,包含样本量、时间范围、版本号。
总结复盘:EDA的核心产出并非图表本身,而是三个关键决策:① 目标变量定义是否可靠;② 哪些特征值得进入后续建模;③ 数据中存在哪些需要特殊处理的质量问题。建议每次EDA结束后,输出一份《EDA分析报告》,包含数据质量摘要、特征筛选清单、风险提示与业务建议,作为模型开发文档的重要组成部分。