题目3:数据收集与探索 —— 数据源、数据类型与EDA

做信用评分,第一步不是什么高深的模型,而是把手头的数据搞清楚。我见过不少团队,上来就堆XGBoost,结果数据质量一塌糊涂,跑半天全白费。所以这一章,咱们老老实实把数据收齐、看好、摸透。

3.1 数据源:你的素材从哪来?

信用评分用的数据,主要分三类。我习惯列个清单,挨个确认。

数据源类型典型内容特点
内部数据申请信息、还款记录、交易流水最可靠,但范围有限
征信机构数据央行征信、百行征信报告权威,但更新可能滞后
替代数据手机账单、电商消费、社保公积金覆盖广,但噪声大
我的经验:替代数据这两年火得不行,但千万别迷信“全都要”。我曾经接过一个项目,把30多个第三方数据源全接了,结果一半字段空到没法用,反而拖慢了上线节奏。先挑3-5个最稳的,跑通再说。

还有一个容易踩的坑——数据授权。信用评分是强监管领域,没有用户授权,任何外部数据都不能直接用。你想想看,出了问题可不是模型不准,而是合规红线。所以数据接入前,一定要法务和合规同学先过一遍。

3.2 数据类型:真正认识你的字段

拿到数据后,第一件事不是画图,是先看懂每个字段的“脾气”。我一般这么分类:

  • 数值型:年龄、收入、负债率。可以直接算均值方差,也可以做分箱。
  • 类别型:职业、学历、婚姻状况。注意顺序是否重要,比如教育程度就是有序的。
  • 时间型:开户日期、逾期时间。很多特征工程都从这里挖。
  • 文本型:备注、拒绝原因。信用评分里不太常见,但偶尔能提取关键词。

哦对,有一种很容易被忽略的——缺失值本身也是一种信号。比如某些字段缺失率特别高,可能是用户故意不填,这往往意味着更大的风险。我做过一个案例,缺失值特征直接贡献了5%的AUC提升。

3.3 EDA:动手之前先动眼

EDA不是流水账,而是带着问题去看数据。你想想看,如果连数据长什么样都不清楚,模型凭什么靠谱?我推荐的流程分四步:

  1. 缺失值分析——逐列统计缺失比例,决定是删、是补还是单独标记。
  2. 异常值检测——收入1000万?年龄200岁?这些得先拿掉或封顶。
  3. 分布观察——直方图、箱线图,看是否偏态、有没有多重峰。
  4. 相关性分析——数值看皮尔逊,类别看卡方,避免多重共线性。
避坑指南:我曾经有一次犯傻,直接用默认参数跑相关性矩阵,结果发现“月收入”和“月还款额”相关系数0.99,以为是强线性关系。后来仔细一看,两个字段是同一个系统中互为计算的……这种伪相关在真实数据里特别多,一定要结合业务逻辑看。

说到具体的工具,Python里我常用pandas_profiling(现在叫ydata-profiling)做快速概览,再用matplotlib/seaborn做定制分析。但注意,自动报告只能帮你扫一眼,真正的洞察还得靠手动排查。

import pandas as pd
import ydata_profiling as pp

df = pd.read_csv('credit_data.csv')
profile = pp.ProfileReport(df, title='信用数据EDA报告')
profile.to_file('eda_report.html')

上面这段代码一跑,缺失值、分布、相关性全出来了。但别直接拿去用——你还要结合下面这张图,理清楚数据采集的完整链路。

核心思路:数据收集不是终点,而是特征工程的起点。这一章做完,你应该能回答三个问题:①哪些数据可用?②每个字段是什么类型?③有哪些明显的质量问题?搞定这些,下一章才能放心干特征构造。
数据收集与探索流程 内部数据 征信机构数据 替代数据 数据整合 去重 合并主键 字段映射 数据类型 数值 / 类别 / 时间 有序 / 无序 缺失模式 EDA 四步走 ① 缺失值统计 ② 异常值检测 ③ 分布可视化 ④ 相关性矩阵 输出:特征质量报告 缺失本身就是特征 注意伪相关性

图里的流程,就是我每次做新项目时的标准动作。先把数据源摆出来,做整合,然后明确每个字段的类型,最后用EDA撕开一道口子,看看里面有没有“妖怪”。这个流程走完,你对数据的掌控力就会强很多。

一个小习惯:我会在EDA阶段专门建一个“数据质量日志”,把每一个发现的异常、缺失原因、处理决策记下来,哪怕是一行备注。后来做模型复盘时,这些日志救了我好几次——解释为什么某个特征被废弃,比拍脑袋编理由靠谱多了。

嗯,这一章差不多就这些。数据收集与探索看似基础,但越是基础的东西,越容易翻车。你只要把上面这张图里的步骤走扎实,后续的特征工程就会顺很多。