3、数据采集与预处理:数据源类型、清洗与特征提取
数据采集和预处理,说白了就是给信任评分模型「喂饭」。饭好不好,直接决定模型能不能干活。我见过太多项目,算法选得天花乱坠,最后栽在数据质量上——嗯,这章咱们就把这顿饭怎么做透。
3.1 数据源类型:日志、行为、身份
信任评分需要三类数据源。我个人习惯把它们比作「三维画像」:
- 日志数据:系统留下的痕迹。比如登录时间、IP地址、操作记录。
- 行为数据:用户怎么用系统。比如点击路径、停留时长、输入节奏。
- 身份数据:你是谁。比如账号、设备指纹、生物特征。
我在项目中遇到过一个问题:只采了日志数据,结果模型把凌晨3点的批量任务全判成异常。为什么?因为没引入行为上下文。你想想看,运维脚本凌晨跑是常态,但用户凌晨手动操作就值得怀疑。所以三类数据必须配合。
核心原则:日志定「发生了什么」,行为定「怎么发生的」,身份定「是谁干的」。缺一个,信任评分就瘸腿。
下面这张图展示了三类数据源如何汇聚到预处理管道:
3.2 数据清洗与标准化
数据进了管道,第一件事就是洗。我曾经接手过一个项目,原始数据里时间戳格式有5种:Unix毫秒、Unix秒、ISO8601、YYYYMMDD、甚至还有「2024/1/1 12:00」。你想想看,这种数据直接喂模型,结果能好吗?
3.2.1 常见脏数据类型
| 脏数据类型 | 典型表现 | 处理方式 |
|---|---|---|
| 缺失值 | 字段为空或NULL | 填充默认值/插值/删除 |
| 重复记录 | 同一条数据出现多次 | 去重(保留最新或最完整) |
| 格式不一致 | 时间、IP、手机号格式混乱 | 统一格式转换 |
| 异常值 | 登录次数=999999 | 截断/分箱/标记为异常 |
| 噪声数据 | 乱码、特殊字符 | 正则过滤/规则清洗 |
避坑指南:我曾经在清洗阶段直接把缺失值全删了,结果模型训练完发现样本量少了30%,而且删掉的都是夜间低频用户的数据。后来我改成按业务场景分策略填充——高频用户用均值,低频用户用中位数,冷启动用户用默认值。效果好了很多。
3.2.2 标准化方法
标准化说白了就是把不同量纲的数据拉到同一个尺度。我常用的方法有三种:
- Min-Max归一化:把数据映射到[0,1]区间。适合有明确上下界的特征,比如年龄、评分。
- Z-Score标准化:减去均值除以标准差。适合数据分布近似正态的场景,比如登录频率。
- Robust标准化:用中位数和四分位距。适合有异常值的数据——嗯,安全数据里异常值特别多,这个我常用。
举个例子,假设我们要标准化「每日登录次数」:
# 原始数据:登录次数 [1, 3, 5, 100, 2, 4]
# 100 明显是异常值(可能是扫描攻击)
# Min-Max 归一化(受异常值影响大)
# 100 被映射到 1.0,其他值被压缩到 0~0.04
# Robust 标准化(推荐)
# 中位数=3.5, Q1=2, Q3=5, IQR=3
# 100 标准化后 ≈ (100-3.5)/3 ≈ 32.2
# 正常值标准化后 ≈ (-0.5 ~ 0.5)
# 异常值仍然突出,但不会被「压扁」
我的习惯:安全场景优先用Robust标准化。为什么?因为攻击行为本身就是异常值,你把它归一化到正常范围,模型就学不到异常模式了。
3.3 特征提取方法
特征提取,就是从原始数据里挖出对信任评分有用的信息。我个人把它分成三类:统计特征、时序特征、行为特征。
3.3.1 统计特征
最基础,也最有效。比如:
- 过去24小时登录次数
- 过去7天失败登录占比
- 操作金额的均值、标准差、最大值
- IP地址的地理位置变化次数
这些特征计算简单,但信息量很大。我记得有一次做金融风控,光是一个「过去1小时交易金额标准差」就帮我们抓到了80%的盗刷行为——因为盗刷者通常会在短时间内频繁小额测试。
3.3.2 时序特征
用户行为是有时间模式的。我常用的时序特征包括:
| 特征类型 | 示例 | 业务含义 |
|---|---|---|
| 周期性 | 是否在工作时间登录 | 识别非正常时段操作 |
| 趋势 | 登录频率是否突然上升 | 检测账号被盗后的批量操作 |
| 间隔 | 两次操作之间的时间差 | 人类操作 vs 脚本操作的差异 |
| 序列模式 | 操作顺序是否异常 | 正常用户先看余额再转账,攻击者可能直接转账 |
关键洞察:时序特征对信任评分特别重要。为什么?因为攻击行为往往在时间维度上留下「痕迹」——要么太快(脚本),要么太慢(潜伏),要么时间不对(凌晨3点)。
3.3.3 行为特征
这部分最考验经验。我常用的行为特征提取方法:
- 鼠标轨迹:人类鼠标移动有加速度,脚本是直线。提取轨迹的曲率、速度变化率。
- 键盘节奏:按键间隔、击键时长。每个人打字节奏不同,可以用于身份验证。
- 浏览路径:用户从A页面到B页面的跳转方式。正常用户会按导航走,攻击者可能直接跳转到敏感URL。
- 设备指纹:屏幕分辨率、浏览器插件列表、字体列表。这些组合起来可以唯一标识设备。
我曾经遇到一个案例:攻击者用脚本批量登录,但脚本的鼠标轨迹是完美的直线。我们提取了鼠标轨迹的「抖动率」特征,直接把这个攻击模式识别出来了。嗯,这就是行为特征的价值。
3.4 特征工程避坑指南
我曾经踩过的坑:
- 特征冗余:同时用了「登录次数」和「登录频率」,结果模型学到的是两者的线性组合,白白增加计算量。后来我用相关性矩阵做预筛选,相关系数>0.9的只保留一个。
- 特征泄露:用未来数据构造特征。比如用「当天是否被锁定」来预测「当天是否异常」——这不叫预测,叫事后诸葛亮。一定要确保特征只依赖历史数据。
- 过度离散:把连续特征分箱分得太细,比如年龄按1岁一档。结果模型学到了噪声,泛化能力变差。我一般控制在5-10个分箱。
数据采集和预处理,说到底就是「垃圾进,垃圾出」的反面——好数据进,好模型出。这三步走扎实了,后面的信任评分模型才能站得住脚。