第1章:数据采集与预处理——数据源介绍、数据清洗、特征工程基础
各位同学,咱们今天聊点实在的。
做风控,说白了就是跟数据打交道。你算法再牛,模型再花哨,数据不行,一切都是白搭。我见过太多团队,上来就搞深度学习,结果数据质量一塌糊涂,最后跑出来的结果连自己都不敢信。
所以,这一章咱们把地基打牢。我会从数据源讲起,再到清洗,最后聊特征工程。嗯,都是我在项目里踩过坑、流过泪之后总结出来的经验。
1.1 数据源介绍:风控的三驾马车
做异常交易识别,我们主要依赖三类数据。我个人习惯把它们叫做「风控三驾马车」。
核心数据源一览:
- 交易流水:最核心的数据,记录每一笔交易的细节
- 用户行为:用户在平台上的操作轨迹
- 设备指纹:用户使用的设备信息,用于识别设备风险
1.1.1 交易流水数据
交易流水,这是风控的命根子。每一笔交易的时间、金额、对手方、渠道,这些信息缺一不可。
我在项目中遇到过,有些团队只关注交易金额,忽略了交易时间。结果呢?凌晨3点的批量小额转账,这种典型的洗钱特征,他们完全没发现。
典型的交易流水字段如下:
| 字段名 | 说明 | 示例值 |
|---|---|---|
| trans_id | 交易唯一标识 | TXN202403010001 |
| user_id | 用户ID | U10086 |
| trans_time | 交易时间(精确到秒) | 2024-03-01 03:15:22 |
| amount | 交易金额(单位:分) | 50000 |
| trans_type | 交易类型 | 转账/消费/充值 |
| counterparty | 对手方账号 | U20001 |
| channel | 交易渠道 | APP/网页/线下POS |
小提示:交易金额建议统一用「分」存储,避免浮点数精度问题。这个坑我踩过,血泪教训。
1.1.2 用户行为数据
用户行为数据,说白了就是用户在平台上的「一举一动」。登录、浏览、点击、修改密码,这些行为背后都藏着风险信号。
你想想看,一个用户平时每天登录1次,突然某天登录了50次,这正常吗?肯定不正常。这就是行为数据的价值。
常见的行为事件包括:
- 登录事件:登录时间、IP地址、登录结果(成功/失败)
- 操作事件:修改密码、绑定手机、更换设备
- 浏览事件:浏览商品、查看订单、查询余额
注意:行为数据量通常很大,一天几亿条很常见。采集时一定要做采样或聚合,否则存储成本会让你哭。
1.1.3 设备指纹数据
设备指纹,这是风控里比较「硬核」的一块。每个设备都有自己独特的「DNA」,比如IMEI、MAC地址、CPU序列号、屏幕分辨率等等。
我曾经处理过一个案子,一个团伙用同一台设备注册了上千个账号。如果没有设备指纹,这种批量注册根本发现不了。
设备指纹的核心字段:
- 硬件信息:IMEI、IMSI、MAC地址、CPU型号
- 软件信息:操作系统版本、浏览器指纹、安装的应用列表
- 网络信息:IP地址、WiFi SSID、基站信息
1.2 数据清洗:脏数据是风控的头号敌人
数据清洗,这步最枯燥,但也最重要。我见过太多人,数据都没洗干净就开始建模,结果模型上线后一塌糊涂。
常见的脏数据问题:
- 缺失值:比如交易对手方为空,这种怎么处理?
- 异常值:交易金额为负数,或者金额大得离谱
- 重复数据:同一笔交易被记录了两次
- 格式不一致:时间格式有的是"2024-01-01",有的是"2024/01/01"
我个人的清洗流程是这样的:
# 伪代码示例:数据清洗流程
def clean_transaction_data(df):
# 1. 去除重复交易
df = df.drop_duplicates(subset=['trans_id'])
# 2. 处理缺失值
df['counterparty'] = df['counterparty'].fillna('UNKNOWN')
# 3. 过滤异常金额(比如金额为0或负数)
df = df[df['amount'] > 0]
# 4. 统一时间格式
df['trans_time'] = pd.to_datetime(df['trans_time'])
return df
避坑指南:我曾经因为没处理重复数据,导致模型把同一笔交易识别了两次异常,误报率直接翻倍。所以,去重这步千万别省。
1.3 特征工程基础:从原始数据到风控特征
特征工程,说白了就是把原始数据变成模型能「听懂」的语言。这一步做得好,模型效果能提升30%以上。
1.3.1 统计类特征
这是最基础的特征。比如:
- 过去1小时内的交易次数
- 过去24小时内的交易总金额
- 过去7天内的平均交易金额
嗯,这些特征虽然简单,但非常有效。我记得有个项目,光靠「过去5分钟内的交易次数」这一个特征,就抓到了80%的批量交易异常。
1.3.2 时序类特征
交易是有时间规律的。凌晨交易多?周末交易多?这些都能反映风险。
常见的时序特征:
- 交易间隔:上一笔交易到当前交易的时间差
- 时段特征:是否在凌晨(0点-6点)交易
- 节假日特征:是否在法定节假日交易
1.3.3 关系类特征
这个稍微复杂一点,但非常强大。比如:
- 当前交易的对手方,之前是否和多个高风险用户交易过?
- 当前交易的IP地址,是否关联了多个不同用户?
说白了,就是看「谁和谁有关系」。这种特征在团伙欺诈识别中特别有用。
特征工程的核心原则:
- 特征要有业务含义,不要为了加特征而加特征
- 特征要稳定,不要今天有效明天就失效
- 特征要可解释,模型上线后出了问题,你得能说清楚为什么
本章知识体系总览
下面这张图,是我自己总结的本章知识结构。你可以把它当作一张「地图」,随时回来查阅。
好了,这一章的内容就到这里。数据采集和预处理,听起来简单,但真正做好不容易。我建议你动手试试,找一份真实的交易数据,按照我上面说的流程走一遍。嗯,只有亲手做过,才能真正理解。