4. 数据采集与预处理:数据源识别、数据清洗、缺失值处理、异常值检测
做风控模型,圈内有个共识:数据质量决定了模型的天花板。算法再牛,喂进去的是垃圾,出来的还是垃圾。我见过太多团队花三个月调参,结果回头一看,原始数据里有一半是空值——那真是白忙活。
这一章,咱们就聊聊数据预处理那些绕不开的坑。说白了,就是怎么把脏活累活干漂亮。
4.1 数据源识别:你得知道你的数据从哪来
做风控预警,数据源五花八门。我个人习惯,第一步先画一张数据地图。你想想看,连数据源头都搞不清,后面清洗、建模全是空中楼阁。
常见的风控数据源,我归纳成三类:
- 内部业务数据:交易流水、用户画像、历史逾期记录。这些最可靠,但往往分散在不同部门。
- 外部征信数据:央行征信、百行征信、多头借贷记录。嗯,这里要注意,外部数据接口调用有延迟,别等模型跑完了才发现数据是昨天的。
- 行为日志数据:登录频次、操作路径、设备指纹。这类数据量大,但噪声也大。
我在项目中遇到过一件事:某次做企业贷预警,业务方说数据源是“实时接口”。结果上线后才发现,接口每天凌晨才更新一次。那天的预警模型,整整晚了12个小时。所以啊,数据源的时效性,比数据量更重要。
4.2 数据清洗:把脏数据挡在门外
数据清洗,说白了就是“去伪存真”。我见过最离谱的案例:某个字段“年龄”居然出现了-999和888。你猜怎么着?那是系统用-999表示“未知”,用888表示“企业用户”。这种编码规则,如果不提前清洗,模型直接学歪。
清洗的常规操作,我列个清单:
- 格式统一:日期格式、电话号码、身份证号,必须标准化。比如“2024-01-01”和“2024/01/01”不能混着来。
- 去重:同一个用户出现多条记录,保留最新一条还是合并?我建议按业务场景定规则,别一刀切。
- 逻辑校验:比如“放款日期”早于“申请日期”,这种明显矛盾的数据,直接标记为异常。
- 字段拆分:有些系统把“地址”塞在一个字段里,你得拆成省、市、区三级。不然模型没法用。
4.3 缺失值处理:别让空值毁了你的模型
缺失值,是风控数据里的常客。为什么会有缺失?原因很多:用户没填、系统没采集、接口超时。但不管原因是什么,模型不认识“空值”。
处理缺失值,我一般分三步走:
- 诊断缺失模式:是随机缺失?还是系统缺失?比如“收入”字段,高收入人群往往不填,这就不是随机缺失。
- 选择填充策略:
- 均值/中位数填充:适合连续变量,但会降低方差。
- 众数填充:适合分类变量,比如“性别”缺失,填“未知”类。
- 模型预测填充:用其他字段预测缺失值。我常用随机森林做填充,效果不错。
- 不填充:如果缺失率超过70%,我建议直接删除该字段。
- 生成缺失指示变量:新增一列“是否缺失”,让模型自己学缺失模式。这个技巧,我屡试不爽。
4.4 异常值检测:揪出那些“不寻常”的数据点
异常值,就是数据里的“害群之马”。一个极端值,可能把整个模型的均值拉偏。做风控预警,异常值往往意味着欺诈、操作失误或者系统故障。
检测异常值,我常用的方法有四种:
| 方法 | 适用场景 | 我的经验 |
|---|---|---|
| 3σ原则 | 正态分布的数据 | 简单粗暴,但遇到偏态分布就失效 |
| 箱线图(IQR) | 任意分布 | 我最常用,鲁棒性好 |
| Z-Score | 标准化后的数据 | 适合多维度联合检测 |
| 孤立森林 | 高维数据 | 计算快,但解释性差 |
举个例子。某次做信用卡交易预警,我用箱线图检测“单笔交易金额”。正常交易在100-5000元之间,但有个账户连续10笔交易都是99999元。箱线图一跑,这些点全在上下边界之外。后来一查,果然是盗刷。
4.5 知识体系总览
说了这么多,我画了一张图,把数据采集与预处理的整个流程串起来。你一看就明白:
这张图把整个流程串起来了。你看,数据源识别是起点,然后经过清洗、缺失值处理、异常值检测,最后才进入特征工程和模型训练。而且别忘了,预警输出之后还要监控反馈,形成一个闭环。我每次做项目,都会把这张图贴在墙上,提醒自己别漏了哪一步。
好了,数据采集与预处理就聊到这儿。记住一句话:预处理花的时间,会在模型效果上加倍还给你。别急着调参,先把数据洗干净。