4. 数据探索与质量初检:数据完整性检查、缺失值与异常值初步分析、数据分布概览与可视化
在风控建模中,数据质量直接决定模型的上限。本章聚焦于样本构建后的第一道关卡——数据探索与质量初检。通过系统化的完整性检查、缺失值与异常值分析、分布概览与可视化,快速识别数据中的“脏、乱、差”问题,为后续清洗与特征工程奠定基础。
核心原则:先全局后局部,先结构后数值,先单变量后多变量。切勿跳过此步骤直接建模,否则极易导致模型失效或过拟合。
4.1 数据完整性检查
完整性检查旨在确认数据集的行数、列数、主键唯一性、字段类型与业务预期是否一致。常见检查项如下:
| 检查维度 | 具体内容 | 常见问题 |
|---|---|---|
| 行数校验 | 对比源系统与样本库的记录数 | 重复抽取、遗漏分区 |
| 主键唯一性 | 检查用户ID、订单ID是否重复 | 重复申请、数据合并错误 |
| 字段类型 | 数值型、字符型、日期型是否匹配 | 金额字段存为字符串、日期格式不统一 |
| 取值范围 | 枚举字段是否在合法值列表内 | 性别出现“未知”、省份出现空字符串 |
# Python 示例:完整性检查核心代码
import pandas as pd
df = pd.read_parquet('sample.parquet')
print(f"行数: {len(df)}, 列数: {len(df.columns)}")
print(f"主键重复数: {df['user_id'].duplicated().sum()}")
print(f"字段类型:\n{df.dtypes}")
print(f"枚举字段唯一值:\n{df['gender'].value_counts()}")
4.2 缺失值与异常值初步分析
缺失值和异常值是风控数据中最常见的质量问题,需区分随机缺失与系统性缺失,以及业务异常与数据错误。
4.2.1 缺失值分析
- 缺失率统计:计算每列的缺失比例,设定阈值(如 >50%)标记为高缺失字段。
- 缺失模式:使用热力图或矩阵图观察缺失是否集中在特定样本或特定时间窗口。
- 业务归因:例如“收入”字段缺失可能来自自由职业者或数据源未对接。
# 缺失率计算
missing_rate = df.isnull().mean().sort_values(ascending=False)
print(missing_rate[missing_rate > 0.1]) # 输出缺失率超过10%的字段
4.2.2 异常值分析
异常值检测常用方法包括统计阈值法(如3σ原则、IQR)、业务规则法(如年龄>120岁)和分布观察法。风控场景中,异常值可能代表欺诈行为或数据录入错误。
| 方法 | 适用场景 | 示例 |
|---|---|---|
| 3σ原则 | 近似正态分布的连续变量 | 交易金额超出均值±3倍标准差 |
| IQR法 | 偏态分布或含离群点的变量 | 年龄低于Q1-1.5*IQR或高于Q3+1.5*IQR |
| 业务规则 | 有明确上下界的字段 | 申请次数为负数、手机号位数不对 |
实战提示:异常值不一定要删除。在反欺诈模型中,极端值往往是最强信号。建议先标记,再结合业务判断是否保留。
4.3 数据分布概览与可视化
通过可视化手段快速理解数据分布形态,识别偏态、双峰、长尾等特征,为特征变换和分箱提供依据。
4.3.1 单变量分布
- 连续变量:直方图 + 核密度估计曲线,观察集中趋势与离散程度。
- 离散变量:柱状图展示频次,关注类别不平衡问题。
4.3.2 多变量关系
- 相关性矩阵:热力图展示数值变量间的线性相关强度。
- 分组箱线图:按目标变量(如好坏客户)分组,观察特征区分度。
4.4 实战:数据质量初检报告模板
完成上述分析后,建议输出一份结构化的数据质量初检报告,包含以下模块:
- 数据集概览:样本量、特征数、时间跨度。
- 完整性结果:重复记录数、字段类型异常清单。
- 缺失值统计:高缺失字段列表及缺失模式描述。
- 异常值清单:各字段异常样本数及典型值。
- 分布特征:关键变量的偏度、峰度、类别分布。
- 处理建议:删除、填充、标记或保留。
避坑提醒:不要一次性对所有字段做缺失值填充。先区分缺失类型:随机缺失可用均值/中位数填充;系统性缺失(如特定渠道全部缺失)需单独处理,否则会引入偏差。
4.5 本章小结
数据探索与质量初检是风控建模的基石环节。通过完整性检查、缺失值与异常值分析、分布概览与可视化,能够快速定位数据问题,为后续清洗、特征工程和模型训练提供可靠输入。建议将上述流程固化到每日/每周的数据监控脚本中,实现质量问题的早发现、早处理。