3. 数据采集与预处理:实时数据源与特征工程
实时风险拦截模型的核心挑战在于“快”与“准”。数据从产生到进入模型推理,延迟必须控制在毫秒级。本章聚焦实时数据流的接入、清洗、特征构造与质量保障,构建从原始日志到可用特征的完整管道。
3.1 实时数据源:埋点、API 与消息队列
保险实时风险场景的数据源主要分为三类:客户端埋点、业务系统 API 以及消息队列中间件。下表对比了各自特点与适用场景:
| 数据源类型 | 典型数据 | 延迟要求 | 可靠性 | 适用场景 |
|---|---|---|---|---|
| 客户端埋点 | 点击流、页面停留、设备指纹 | < 1s | 中(可能丢包) | 欺诈行为识别、异常操作检测 |
| 业务系统 API | 保单信息、核保结果、支付状态 | < 200ms | 高(同步调用) | 实时决策、黑白名单查询 |
| 消息队列 | 承保流水、理赔事件、风控日志 | < 100ms(端到端) | 极高(持久化+ACK) | 高吞吐异步处理、削峰填谷 |
实战建议:在保险核心链路中,建议采用“API 同步 + 消息队列异步”的双通道模式。高风险操作(如大额支付)走 API 实时拦截,非关键行为(如页面浏览)走消息队列做离线补充分析。
下图展示了实时数据采集的典型三层架构:
3.2 数据清洗:实时流中的脏数据处理
实时数据流中常见的脏数据包括:字段缺失、格式异常、时间乱序、重复消息。清洗策略必须兼顾低延迟与准确性。
- 字段缺失处理:对关键字段(如用户ID、保单号)采用“丢弃”策略;对非关键字段(如设备型号)采用“默认值填充”。
- 格式标准化:统一时间戳为毫秒级 Unix 时间戳;金额字段统一为分(整数)存储,避免浮点精度问题。
- 去重机制:基于消息唯一 ID(如 traceId)在窗口内(通常 5 秒)做幂等去重,防止重复计算特征。
- 乱序处理:设置 watermark 延迟容忍度(如 10 秒),超出窗口的迟到数据直接丢弃或发往死信队列。
代码示例:Flink 实时清洗算子(伪代码)
DataStream<RawEvent> cleanedStream = rawStream
// 过滤空事件
.filter(event -> event.getUserId() != null && event.getPolicyNo() != null)
// 标准化时间戳
.map(event -> {
event.setTimestamp(convertToMillis(event.getTimestamp()));
return event;
})
// 基于 traceId 去重(5秒滚动窗口)
.keyBy(event -> event.getTraceId())
.process(new DeduplicateFunction(5000L))
// 处理乱序:允许 10 秒延迟
.assignTimestampsAndWatermarks(
WatermarkStrategy.<RawEvent>forBoundedOutOfOrderness(Duration.ofSeconds(10))
.withTimestampAssigner((event, timestamp) -> event.getTimestamp())
);
3.3 特征工程基础:从原始日志到风险特征
实时特征工程的目标是在毫秒级时间内,将原始数据转化为模型可用的数值化特征。保险场景下,特征通常分为三类:
| 特征类别 | 示例 | 计算方式 | 存储要求 |
|---|---|---|---|
| 统计聚合特征 | 过去 1 小时该用户投保次数 | 滑动窗口计数 / 求和 | Redis 计数器 + TTL |
| 序列行为特征 | 最近 5 次操作的时间间隔 | 维护定长队列,计算差分 | Redis List / 本地缓存 |
| 交叉特征 | 设备指纹 + IP 归属地组合 | 预计算字典映射 | 本地 HashMap / 布隆过滤器 |
下图展示了实时特征工程的计算流程:
避坑提醒:实时特征计算中,务必为每个特征设置 TTL(过期时间)。例如“过去 1 小时投保次数”的 Redis 计数器应设置 3600 秒过期,防止内存泄漏。同时,特征版本管理不可忽视——模型上线后,特征逻辑变更必须同步更新存储结构,否则会导致线上推理错误。
3.4 数据质量监控:实时管道的“体检”体系
数据质量是实时模型的命脉。必须建立覆盖全链路的监控体系,确保“脏数据不进、特征不丢、延迟不超”。
核心监控指标如下:
| 监控维度 | 指标 | 告警阈值 | 处理动作 |
|---|---|---|---|
| 数据完整性 | 字段缺失率 | > 5% | 触发熔断,切换降级模型 |
| 数据时效性 | 端到端延迟(P99) | > 500ms | 扩容消费线程,排查瓶颈 |
| 数据准确性 | 特征值分布漂移 | PSI > 0.1 | 回滚特征版本,通知算法团队 |
| 数据吞吐量 | QPS / TPS | 低于基线 30% | 检查上游数据源是否异常 |
监控实现要点:
- 使用 Prometheus + Grafana 实时展示管道健康度仪表盘。
- 每个特征计算节点输出“处理记录数”和“异常记录数”两个计数器。
- 设置“静默告警”机制:连续 3 个窗口触发阈值才真正告警,避免抖动误报。
- 关键特征(如用户历史欺诈标签)必须做“非空校验”,空值直接拒绝本次推理请求。