3. 数据探索性分析(EDA):数据质量检查、缺失值分布、异常值检测、单变量与双变量分析

数据探索性分析(EDA)是特征工程的基石。在构建任何评分模型之前,必须对原始数据进行彻底的“体检”。本章将系统性地讲解数据质量检查、缺失值分布、异常值检测以及单变量与双变量分析的核心方法与实战技巧。

核心原则:EDA 不是一次性任务,而是一个迭代过程。每次发现数据问题,都应回溯至上游数据源或调整特征工程策略,形成闭环。

3.1 数据质量检查

数据质量直接决定模型的上限。质量检查通常从以下四个维度展开:

维度 检查内容 常见问题 处理建议
完整性 缺失值比例、空字符串、占位符 关键字段缺失率 > 50% 删除字段或使用强相关特征插补
准确性 数据类型、取值范围、逻辑一致性 年龄为负数、收入为 0 设定业务阈值截断或标记为异常
一致性 编码统一、单位换算、时间格式 性别编码 1/2 与 M/F 混用 统一映射为标准编码表
唯一性 主键重复、样本重复 同一客户 ID 出现多次 按时间戳保留最新记录或去重
实战提示:在风控场景中,准确性和一致性比完整性更致命。一个错误的收入字段可能直接导致信用评分偏差超过 50 个点。

3.2 缺失值分布分析

缺失值不是简单的“空”,其分布模式往往蕴含业务信息。我们需要区分三种缺失机制:

  • 完全随机缺失(MCAR):缺失与数据本身无关,如系统随机故障。可直接删除或均值填充。
  • 随机缺失(MAR):缺失依赖于其他观测变量,如高收入人群更不愿填写收入。需用模型预测填充。
  • 非随机缺失(MNAR):缺失依赖于缺失值本身,如违约客户故意隐瞒负债。这是风控中最危险的情况,需单独编码为“缺失”类别。

以下是一个典型的缺失值分布可视化流程(使用 Python 伪代码示意):

import pandas as pd
import missingno as msno

# 加载数据
df = pd.read_csv('credit_data.csv')

# 缺失值矩阵图(白色为缺失)
msno.matrix(df)

# 缺失值相关性热力图
msno.heatmap(df)

# 按缺失率排序输出
missing_ratio = df.isnull().mean().sort_values(ascending=False)
print(missing_ratio[missing_ratio > 0.05])
避坑指南:不要对缺失率超过 70% 的字段做复杂填充。在风控评分卡中,这类字段通常直接删除,或仅保留“是否缺失”作为二值特征。

3.3 异常值检测

异常值在风控中可能是欺诈信号,也可能是数据录入错误。常用检测方法分为统计法和距离法:

方法 适用场景 阈值设定 风控案例
Z-Score 近似正态分布 |Z| > 3 交易金额异常
IQR 四分位距 偏态分布 Q1 - 1.5*IQR 或 Q3 + 1.5*IQR 收入字段
孤立森林 高维数据 异常得分 > 0.6 多头借贷特征组合
DBSCAN 密度分布不均 核心点距离 > ε 地理位置异常

以下 SVG 图展示了异常值检测的完整流程与决策路径:

异常值检测流程与决策路径 原始特征数据 数据分布形态判断 Z-Score 检测 IQR 四分位距 异常值标记与业务复核 截断 / 分箱 / 单独编码

3.4 单变量分析

单变量分析关注每个特征自身的分布特性,是特征筛选的第一步。核心指标包括:

  • 集中趋势:均值、中位数、众数——判断特征是否偏态。
  • 离散程度:标准差、方差、极差——衡量特征波动性。
  • 分布形状:偏度(Skewness)和峰度(Kurtosis)——决定是否需要做 Box-Cox 变换。
  • 类别平衡:对于分类特征,计算每个类别的占比,警惕长尾类别。
风控经验:在信用评分中,偏度 > 2 的特征通常需要做对数变换或分箱处理,否则模型会过度关注极端值。

3.5 双变量分析

双变量分析揭示特征与目标变量(如是否违约)之间的关系,是特征有效性的直接证据。常用方法如下:

特征类型 目标类型 分析方法 关键指标
连续型 二分类 箱线图、小提琴图、KS 检验 KS 统计量、IV 值
连续型 连续型 散点图、Pearson/Spearman 相关系数 相关系数 r、p 值
分类型 二分类 堆叠柱状图、卡方检验 卡方值、WOE 编码
分类型 分类型 交叉表、Cramér's V V 值(0~1)

以下 SVG 图展示了双变量分析中连续特征与二分类目标的典型分析框架:

连续特征 vs 二分类目标:双变量分析框架 连续特征 X (如:收入、年龄) 二分类目标 Y (如:违约/非违约) 箱线图 / 小提琴图 KS 检验 / 统计量 IV 值 / WOE 编码 特征区分度评估 (保留 / 变换 / 删除)

3.6 EDA 实战清单

在实际项目中,建议按以下步骤执行 EDA,确保不遗漏关键环节:

  1. 数据概览:使用 df.info() 和 df.describe() 快速了解字段数量、类型和基本统计量。
  2. 缺失值矩阵:使用 missingno 库绘制缺失值矩阵,识别缺失模式。
  3. 异常值扫描:对每个连续特征绘制箱线图,标记超出 1.5 倍 IQR 的样本。
  4. 单变量分布:绘制直方图 + 核密度曲线,计算偏度和峰度。
  5. 双变量交叉:对每个特征计算 IV 值(信息量),筛选 IV > 0.02 的特征进入建模。
  6. 相关性矩阵:计算 Pearson 相关系数,剔除相关性 > 0.8 的特征对,避免多重共线性。
效率技巧:使用 pandas-profiling 或 ydata-profiling 可以一键生成 EDA 报告,但务必人工复核异常值标记和缺失模式,避免自动化误判。