4. 数据准备:数据源接入、清洗与时间序列对齐
滚动率模型依赖多源、高维、时序敏感的实时数据。数据准备阶段的质量直接决定模型上线后的拦截精度与稳定性。本节从数据源接入、清洗去重、时间序列对齐三个核心环节展开,确保后续特征工程与模型训练建立在干净、一致的数据基础上。
4.1 数据源接入:三大核心数据流
实时风险拦截场景下,模型通常需要同时接入三类数据源:埋点行为数据、交易流水数据、设备指纹数据。三类数据在时效性、结构、接入方式上存在显著差异,需分别设计接入策略。
| 数据源类型 | 典型字段 | 接入方式 | 实时性要求 | 数据量级(日均) |
|---|---|---|---|---|
| 埋点行为数据 | 事件ID、用户ID、页面路径、点击坐标、停留时长、时间戳 | SDK上报 → 消息队列(Kafka) | 秒级 | 千万~亿级 |
| 交易流水数据 | 订单ID、用户ID、金额、商品类目、支付渠道、交易时间 | 业务库CDC → 消息队列 / API推送 | 毫秒~秒级 | 百万~千万级 |
| 设备指纹数据 | 设备ID、IP、UA、屏幕分辨率、安装应用列表、GPS | SDK采集 → 设备指纹服务 → 消息队列 | 秒级 | 百万~千万级 |
实战建议:埋点数据通常存在10%~30%的延迟上报,建议在消息队列侧设置5秒的“延迟等待窗口”,避免因数据未到齐导致模型特征缺失。交易数据建议采用CDC(Change Data Capture)方式接入,保证数据变更的完整性与低延迟。
4.2 数据清洗与去重:实时流中的“脏数据”处理
实时数据流中常见的脏数据包括:重复记录、字段缺失、异常时间戳、格式错误、恶意构造数据。清洗与去重必须在数据进入特征工程之前完成,否则会污染模型训练与在线推理。
4.2.1 清洗规则清单
- 字段完整性校验:核心字段(用户ID、事件ID、时间戳、设备ID)不可为空,缺失则丢弃或填充默认值。
- 时间戳合理性校验:时间戳不能超过当前时间+5秒(允许时钟偏差),不能早于当前时间-7天(防止历史数据回放攻击)。
- 格式标准化:金额字段统一为分(整数),时间戳统一为Unix毫秒,设备ID统一为小写无分隔符。
- 异常值过滤:交易金额≤0、页面停留时间<0、GPS坐标超出合理范围等直接丢弃。
4.2.2 实时去重策略
实时流去重不能依赖全量存储,需采用窗口+布隆过滤器的组合方案:
# 伪代码:基于Redis的滑动窗口去重
def is_duplicate(event_id, user_id, timestamp, window_seconds=60):
key = f"dedup:{user_id}:{event_id}"
# 使用Redis SETNX + EXPIRE实现窗口去重
if redis.setnx(key, timestamp):
redis.expire(key, window_seconds)
return False # 非重复
else:
return True # 重复,丢弃
| 去重方案 | 适用场景 | 内存占用 | 误判率 | 实时性 |
|---|---|---|---|---|
| 布隆过滤器 | 海量事件ID去重 | 低 | 可控(1%~5%) | 高 |
| Redis SETNX + 过期 | 精确去重(交易订单) | 中 | 0% | 高 |
| Flink 窗口去重 | 复杂事件序列去重 | 高 | 0% | 中 |
避坑提示:布隆过滤器无法删除元素,当窗口滑动时需重建过滤器。建议按时间窗口(如每5分钟)创建新的布隆过滤器实例,同时保留上一个窗口的过滤器用于延迟到达数据的去重。
4.3 时间序列对齐:多源数据的“时间轴”统一
三类数据源的时间戳来自不同系统,存在时钟偏差、上报延迟、批次差异等问题。时间序列对齐的目标是:将同一用户、同一事件窗口内的多源数据,对齐到统一的时间轴上,确保特征计算时数据在时间上具有因果关系。
4.3.1 对齐策略
- 事件时间对齐:以用户行为事件的发生时间(而非系统接收时间)作为主时间轴。
- 窗口对齐:设定固定时间窗口(如5秒、30秒、5分钟),将窗口内的所有数据视为同一批次。
- 延迟数据处理:允许数据在窗口关闭后延迟到达,设置“迟到容忍度”(如10秒),超时则丢弃或单独标记。
4.3.2 对齐流程
- 接收数据:从Kafka消费三类数据流,解析时间戳字段。
- 分配窗口:根据事件时间计算所属窗口ID(如 window_id = event_timestamp / window_size)。
- 缓存等待:将数据放入窗口缓存,等待窗口内所有数据到达。
- 触发对齐:窗口关闭时,将缓存中的埋点、交易、设备数据按用户ID+窗口ID进行关联。
- 输出特征:将对齐后的数据发送至特征计算模块。
4.4 数据质量监控:实时流中的“体检”机制
数据准备阶段必须建立实时质量监控,避免脏数据流入模型。建议在清洗、去重、对齐三个环节分别设置监控指标:
| 监控环节 | 监控指标 | 告警阈值 | 处理动作 |
|---|---|---|---|
| 数据接入 | 每秒接收条数、延迟时间 | 接收量突降>50% 或 延迟>10秒 | 自动切换备用数据源 |
| 数据清洗 | 丢弃率、字段缺失率 | 丢弃率>5% 或 缺失率>10% | 暂停模型推理,人工排查 |
| 数据去重 | 重复率、布隆过滤器误判率 | 重复率>3% 或 误判率>5% | 重置布隆过滤器或切换去重策略 |
| 时间对齐 | 窗口内数据完整率、迟到数据占比 | 完整率<80% 或 迟到占比>10% | 调整窗口大小或延迟容忍度 |
关键产出物:数据准备阶段完成后,应输出一份数据质量报告,包含各数据源的接入延迟分布、清洗丢弃原因统计、去重命中率、时间对齐完整率。这份报告是后续特征工程与模型训练的数据准入凭证。