第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 数据清洗:脏数据是风控的头号敌人

数据清洗,这步最枯燥,但也最重要。我见过太多人,数据都没洗干净就开始建模,结果模型上线后一塌糊涂。

常见的脏数据问题:

  1. 缺失值:比如交易对手方为空,这种怎么处理?
  2. 异常值:交易金额为负数,或者金额大得离谱
  3. 重复数据:同一笔交易被记录了两次
  4. 格式不一致:时间格式有的是"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地址,是否关联了多个不同用户?

说白了,就是看「谁和谁有关系」。这种特征在团伙欺诈识别中特别有用。

特征工程的核心原则:

  • 特征要有业务含义,不要为了加特征而加特征
  • 特征要稳定,不要今天有效明天就失效
  • 特征要可解释,模型上线后出了问题,你得能说清楚为什么

本章知识体系总览

下面这张图,是我自己总结的本章知识结构。你可以把它当作一张「地图」,随时回来查阅。

数据采集与预处理知识体系 数据源介绍 数据清洗 特征工程基础 交易流水 用户行为 设备指纹 缺失值处理 异常值过滤 去重与格式化 统计类特征 时序类特征 关系类特征 核心目标:将原始数据转化为 高质量、可解释、有业务含义的风控特征

好了,这一章的内容就到这里。数据采集和预处理,听起来简单,但真正做好不容易。我建议你动手试试,找一份真实的交易数据,按照我上面说的流程走一遍。嗯,只有亲手做过,才能真正理解。