第3章:数据采集与治理:风控数据源、清洗与特征工程
各位同学,今天我们来聊聊风控系统的“粮食”——数据。
我常说一句话:模型决定上限,数据决定下限。再牛的算法,喂进去的是垃圾,吐出来的只能是垃圾。这一章,咱们就把数据从采集到加工成特征的全链路捋一遍。
3.1 风控数据源:你的弹药库
做风控,首先得知道能从哪儿搞到数据。我个人习惯把数据源分成三大类:
3.1.1 征信数据
这是最传统的“硬通货”。央行征信、百行征信、朴道征信……这些数据权威性高,但有个问题——覆盖人群有限。很多年轻人、小微商户在征信系统里几乎是“白户”。
我记得在2018年做现金贷项目时,发现30%的申请人在央行征信里只有一条信用卡记录。这时候你光靠征信打分,基本等于瞎猜。
3.1.2 行为数据
说白了,就是用户在你这儿留下的“脚印”。
- 申请行为:填写时长、修改次数、是否复制粘贴
- 登录行为:登录频率、设备更换、地理位置
- 交易行为:消费金额、频次、时间分布
我在项目中遇到过一件有意思的事:有个用户申请贷款时,填写手机号用了整整5分钟,中间还删了3次。后来一查,这个手机号是刚买的黑号。你看,行为数据有时候比征信还灵敏。
3.1.3 设备指纹
设备指纹是什么?就是给每个手机、电脑发一张“身份证”。
嗯,这里要注意:设备指纹不是简单的IMEI或MAC地址。真正的设备指纹是综合了硬件参数、系统属性、网络环境等上百个维度算出来的一个哈希值。
3.2 数据清洗与标准化:去伪存真
数据拿到手,别急着建模。先问问自己:这数据靠谱吗?
3.2.1 常见的数据脏问题
| 问题类型 | 举例 | 处理方式 |
|---|---|---|
| 缺失值 | 收入字段为空 | 均值填充、模型预测、单独作为一类 |
| 异常值 | 年龄填了200岁 | 截断、剔除、标记为异常 |
| 重复数据 | 同一用户提交两次 | 按时间戳去重 |
| 格式不一致 | 手机号有的带86,有的不带 | 正则统一格式化 |
3.2.2 标准化:让数据“说同一种语言”
你想想看,如果A系统里“性别”存的是“男/女”,B系统里存的是“1/0”,C系统里存的是“M/F”。这模型怎么学?
所以标准化是必须的。我个人习惯的做法是:
# 伪代码示例:标准化流程
def standardize_data(df):
# 1. 统一日期格式
df['apply_date'] = pd.to_datetime(df['apply_date'], format='%Y-%m-%d')
# 2. 手机号去噪
df['phone'] = df['phone'].str.replace(r'\D', '', regex=True)
df['phone'] = df['phone'].apply(lambda x: x[-11:] if len(x) >= 11 else None)
# 3. 金额统一到分
df['amount'] = df['amount'].apply(lambda x: int(x * 100) if x < 1000 else int(x))
return df
3.3 特征工程基础:从数据到“武器”
特征工程,说白了就是把原始数据变成模型能听懂的语言。这是风控中最吃经验的部分。
3.3.1 特征分类
- 数值特征:年龄、收入、负债比。直接输入或做分箱。
- 类别特征:职业、学历、婚姻状况。需要做one-hot或label encoding。
- 时序特征:近7天申请次数、近30天逾期天数。这是风控的“金矿”。
- 交叉特征:收入×负债比、年龄×职业。往往能发现非线性关系。
3.3.2 一个经典的特征工程案例
我曾经做过一个电商分期项目。原始数据里只有“注册时间”和“申请时间”两个字段。很多人直接忽略,但我算了一个特征:“注册到申请的天数”。
结果你猜怎么着?这个特征的IV值(信息量)排到了前五。那些刚注册就申请的用户,逾期率是注册超过30天用户的3倍。为什么?因为“刚注册就借钱”这个行为本身,就暗示了资金极度紧张。
3.3.3 特征工程流程
# 特征工程流水线
1. 基础特征提取(从原始字段直接映射)
2. 统计特征(均值、方差、最大值、最小值)
3. 时序特征(滑动窗口统计)
4. 交叉特征(笛卡尔积或业务组合)
5. 特征筛选(IV值、相关系数、XGBoost重要性)
6. 特征变换(标准化、对数变换、分箱)
3.4 知识体系总览
下面这张图,是我自己总结的数据采集与治理的完整链路。你可以把它当作本章的“地图”。
你看,从数据源到最终的特征集,中间要经过清洗、标准化、特征提取三道关卡。每一关都可能出问题,每一关也都有优化的空间。
好了,这一章的内容就到这里。数据采集与治理是风控的根基,打好这个基础,后面的模型才能站得稳。