数据准备与清洗:数据源选择、缺失值处理、异常值检测、数据标准化

各位同学,咱们直接进入正题。数据准备与清洗,说白了就是建模前的「扫雷」工作。我见过太多人,模型跑出来效果不错,一上线就崩盘。为什么?数据没洗干净。你想想看,垃圾进,垃圾出,这个道理在风控领域尤其残酷。

一、数据源选择:内部 vs 外部

数据源的选择,是建模的第一步,也是最容易踩坑的地方。我个人习惯,先问自己三个问题:数据够不够?数据准不准?数据能不能用?

1. 内部数据

内部数据,就是你自己公司系统里沉淀下来的数据。比如客户申请信息、还款记录、交易流水、催收记录等。这类数据最大的优势是「可控」。我在项目中遇到过,某家消费金融公司,内部数据质量其实很高,但没人去清洗,直接拿来建模,结果模型区分度很差。后来我们花了三周时间做数据治理,效果立竿见影。

内部数据常见来源:
  • 客户申请表(年龄、收入、职业等)
  • 历史借贷记录(借还款时间、金额、逾期天数)
  • 交易行为数据(消费频次、金额分布、时间规律)
  • 催收记录(催收次数、承诺还款率)

2. 外部数据

外部数据,说白了就是「借力」。征信报告、多头借贷数据、黑名单、甚至社交网络数据,都可以作为补充。但这里有个坑:外部数据的时效性和合规性。我曾经用过某家第三方数据商提供的多头借贷数据,结果发现数据更新滞后了两个月,模型跑出来的结果完全失真。嗯,这里要注意,外部数据一定要做「新鲜度检验」。

数据源类型 优势 劣势 我的建议
内部数据 可控、成本低、隐私合规 样本量有限、可能存在偏差 优先使用,但必须做质量审计
外部数据 覆盖面广、信息维度丰富 成本高、时效性难保证、合规风险 作为补充,不要过度依赖
我的经验: 内部数据能解决80%的问题,外部数据用来补那20%的短板。别贪多,数据不是越多越好,而是越「干净」越好。

二、缺失值处理:别让「空」坑了你

缺失值,是数据清洗中最常见的问题。你想想看,一个客户的收入字段是空的,你怎么办?直接删掉?还是填个平均值?这里没有标准答案,但有一些「潜规则」。

1. 缺失值类型

首先,你得搞清楚缺失值是怎么产生的。随机缺失、非随机缺失、完全随机缺失,处理方式完全不同。我记得有一次,一个项目里客户的「职业」字段缺失率高达40%,后来一查,是因为系统升级时那个字段没迁移过来。这种非随机缺失,直接填充平均值就是找死。

2. 处理方法

  • 删除法: 缺失率低于5%,且样本量充足,直接删除。简单粗暴,但有效。
  • 填充法: 均值/中位数/众数填充,适合随机缺失。我个人习惯用中位数,因为不受极端值影响。
  • 模型预测法: 用其他字段预测缺失值,适合重要字段。比如用年龄、学历预测收入。
  • 标记法: 把缺失值单独作为一个类别,比如「未知」。这在风控模型中很常见,因为「缺失」本身可能就是一个风险信号。
避坑指南: 我曾经在一个信贷项目中,直接用均值填充了「负债收入比」的缺失值,结果模型把高风险的客户误判成了低风险。后来才发现,缺失负债数据的客户,恰恰是那些不愿意透露真实负债的人。所以,缺失值处理前,一定要先做「缺失模式分析」。

三、异常值检测:揪出「捣乱分子」

异常值,就是数据里的「刺头」。比如一个客户的年收入填了1个亿,或者年龄填了200岁。这些数据不处理,模型会被带偏。你想想看,线性回归对异常值极其敏感,一个极端值就能把回归线拉歪。

1. 检测方法

  • 3σ原则: 适用于正态分布的数据。超过均值±3个标准差的值,视为异常。
  • 箱线图法: 用四分位数和IQR(四分位距)来识别。低于Q1-1.5*IQR或高于Q3+1.5*IQR的值,视为异常。这个方法不要求数据正态分布,更实用。
  • 业务规则法: 比如年龄不能超过120岁,收入不能为负数。这些规则来自业务常识,比任何统计方法都靠谱。

2. 处理方法

  • 截尾处理: 把异常值替换为边界值。比如把超过99%分位数的值,统一设为99%分位数。
  • 删除: 如果异常值明显是录入错误,直接删除。
  • 单独建模: 如果异常值本身有业务含义(比如欺诈交易),可以单独建一个异常检测模型。
我的习惯: 先用箱线图快速扫一遍,再用业务规则做二次校验。别完全依赖统计方法,业务经验才是王道。

四、数据标准化:让所有变量「站在同一起跑线」

数据标准化,说白了就是把不同量纲的数据拉到同一个尺度。比如年龄是0-100,收入是0-100万,如果不做标准化,模型会天然认为收入更重要。这显然不合理。

1. 常用方法

方法 公式 适用场景
Z-score标准化 (x - μ) / σ 数据近似正态分布,适合线性模型
Min-Max归一化 (x - min) / (max - min) 数据有明确边界,适合神经网络
Robust标准化 (x - median) / IQR 数据有异常值,适合稳健模型
我的建议: 如果你用逻辑回归或SVM,Z-score是首选。如果你用树模型(比如XGBoost),其实不需要标准化,因为树模型对尺度不敏感。但如果你不确定,那就做一下,反正不亏。

五、知识体系总览

下面这张图,是我自己总结的数据准备与清洗的核心逻辑。你可以把它当作一个「检查清单」,每次建模前过一遍。

数据准备与清洗核心流程 数据源选择 缺失值处理 异常值检测 数据标准化 干净可用的数据集 内部/外部 删除/填充/预测/标记 3σ/箱线图/业务规则 Z-score/Min-Max/Robust ⚠ 注意合规性 ⚠ 先做缺失模式分析 ⚠ 结合业务经验 ⚠ 树模型可不做

这张图把整个流程串起来了。从数据源选择开始,到缺失值处理、异常值检测,最后做标准化。每一步都有坑,但只要你按这个流程走,基本不会出大问题。

最后提醒一句: 数据清洗没有「银弹」。每个项目的数据都不一样,你得学会「因地制宜」。我见过最离谱的一个案例,有人把所有缺失值都填了0,结果模型把「0收入」的客户全判为高风险,但实际上那些客户只是没填收入而已。所以,动手之前,先花时间理解你的数据。

专注资料整理