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 对齐流程

  1. 接收数据:从Kafka消费三类数据流,解析时间戳字段。
  2. 分配窗口:根据事件时间计算所属窗口ID(如 window_id = event_timestamp / window_size)。
  3. 缓存等待:将数据放入窗口缓存,等待窗口内所有数据到达。
  4. 触发对齐:窗口关闭时,将缓存中的埋点、交易、设备数据按用户ID+窗口ID进行关联。
  5. 输出特征:将对齐后的数据发送至特征计算模块。
多源数据时间序列对齐流程 埋点行为数据 交易流水数据 设备指纹数据 消息队列(Kafka)— 统一接入层 数据清洗与去重(完整性/时间戳/布隆过滤器) 时间窗口分配(事件时间 → 窗口ID) 对齐输出:用户ID + 窗口ID → 特征计算模块

4.4 数据质量监控:实时流中的“体检”机制

数据准备阶段必须建立实时质量监控,避免脏数据流入模型。建议在清洗、去重、对齐三个环节分别设置监控指标:

监控环节 监控指标 告警阈值 处理动作
数据接入 每秒接收条数、延迟时间 接收量突降>50% 或 延迟>10秒 自动切换备用数据源
数据清洗 丢弃率、字段缺失率 丢弃率>5% 或 缺失率>10% 暂停模型推理,人工排查
数据去重 重复率、布隆过滤器误判率 重复率>3% 或 误判率>5% 重置布隆过滤器或切换去重策略
时间对齐 窗口内数据完整率、迟到数据占比 完整率<80% 或 迟到占比>10% 调整窗口大小或延迟容忍度
关键产出物:数据准备阶段完成后,应输出一份数据质量报告,包含各数据源的接入延迟分布、清洗丢弃原因统计、去重命中率、时间对齐完整率。这份报告是后续特征工程与模型训练的数据准入凭证。