数据准备与清洗:数据源选择、缺失值处理、异常值检测、数据标准化
各位同学,咱们直接进入正题。数据准备与清洗,说白了就是建模前的「扫雷」工作。我见过太多人,模型跑出来效果不错,一上线就崩盘。为什么?数据没洗干净。你想想看,垃圾进,垃圾出,这个道理在风控领域尤其残酷。
一、数据源选择:内部 vs 外部
数据源的选择,是建模的第一步,也是最容易踩坑的地方。我个人习惯,先问自己三个问题:数据够不够?数据准不准?数据能不能用?
1. 内部数据
内部数据,就是你自己公司系统里沉淀下来的数据。比如客户申请信息、还款记录、交易流水、催收记录等。这类数据最大的优势是「可控」。我在项目中遇到过,某家消费金融公司,内部数据质量其实很高,但没人去清洗,直接拿来建模,结果模型区分度很差。后来我们花了三周时间做数据治理,效果立竿见影。
- 客户申请表(年龄、收入、职业等)
- 历史借贷记录(借还款时间、金额、逾期天数)
- 交易行为数据(消费频次、金额分布、时间规律)
- 催收记录(催收次数、承诺还款率)
2. 外部数据
外部数据,说白了就是「借力」。征信报告、多头借贷数据、黑名单、甚至社交网络数据,都可以作为补充。但这里有个坑:外部数据的时效性和合规性。我曾经用过某家第三方数据商提供的多头借贷数据,结果发现数据更新滞后了两个月,模型跑出来的结果完全失真。嗯,这里要注意,外部数据一定要做「新鲜度检验」。
| 数据源类型 | 优势 | 劣势 | 我的建议 |
|---|---|---|---|
| 内部数据 | 可控、成本低、隐私合规 | 样本量有限、可能存在偏差 | 优先使用,但必须做质量审计 |
| 外部数据 | 覆盖面广、信息维度丰富 | 成本高、时效性难保证、合规风险 | 作为补充,不要过度依赖 |
二、缺失值处理:别让「空」坑了你
缺失值,是数据清洗中最常见的问题。你想想看,一个客户的收入字段是空的,你怎么办?直接删掉?还是填个平均值?这里没有标准答案,但有一些「潜规则」。
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 | 数据有异常值,适合稳健模型 |
五、知识体系总览
下面这张图,是我自己总结的数据准备与清洗的核心逻辑。你可以把它当作一个「检查清单」,每次建模前过一遍。
这张图把整个流程串起来了。从数据源选择开始,到缺失值处理、异常值检测,最后做标准化。每一步都有坑,但只要你按这个流程走,基本不会出大问题。