2. 风控数据体系基础

做数据回补、补数与审计追溯,第一步不是写SQL,而是把“数据从哪来、长什么样、怎么流动、落在哪张表”讲清楚。风控数据体系如果没梳理明白,回补时就会出现补错分区、补重数据、口径不一致、审计断链等典型事故。本节从四个维度建立基础认知:数据分类、数据源、流转链路、常见表与字段。

一、核心原理:风控数据为什么要先分类

风控数据的本质是“用历史行为与属性判断当前风险”。不同数据在时效性、准确性、可回溯性上的要求差异极大,因此必须先分类,才能决定存储方式、保留周期和回补策略。

  • 按来源分:内部业务数据(订单、支付、登录)、外部三方数据(征信、设备指纹、黑名单)、衍生数据(规则命中、模型分、标签)。
  • 按时效分:实时流数据(毫秒级决策)、准实时数据(分钟级)、离线批量数据(T+1)。
  • 按可变性分:事实数据(一旦产生不可变,如交易流水)、状态数据(会更新,如用户风险等级)、快照数据(按时间切片,如每日额度)。
  • 按敏感度分:一般数据、敏感个人信息、需脱敏或加密存储的数据。
分类的直接价值:事实数据适合按分区回补,状态数据回补时必须还原“当时状态”,快照数据回补要严格对齐业务日期。分类错了,回补逻辑一定错。

二、数据源与接入方式

风控系统的数据源通常分为四类,接入方式与回补难度各不相同。

数据源类型 典型内容 接入方式 回补难度
业务库 订单、支付、用户、账户 Binlog订阅、离线抽数 中,需处理更新与删除
日志埋点 登录、设备、行为事件 Kafka、日志采集 高,易丢失、格式多变
三方接口 征信、黑名单、评分 API调用、文件交换 高,依赖对方可重放性
衍生计算 规则命中、模型分、标签 离线任务、流计算 低,可重跑但需版本对齐

接入时最关键的是保留“原始层”。原始层不做业务清洗,只做落地和分区,这样回补时才有可信的源头。很多团队跳过原始层直接进明细层,一旦口径变更就无法追溯。

三、数据流转链路

典型风控数据链路可以概括为:采集 → 原始层 → 明细层 → 汇总/特征层 → 服务层 → 决策与审计。

业务库/日志/三方
      │
      ▼
  ODS 原始层(按天分区,保留原始报文)
      │
      ▼
  DWD 明细层(清洗、标准化、去重)
      │
      ▼
  DWS/DWT 汇总与特征层(用户维度、设备维度)
      │
      ▼
  ADS 服务层(规则输入、模型输入、报表)
      │
      ▼
  决策引擎 → 风控结果 → 审计追溯表

回补和补数通常发生在ODS到ADS之间。审计追溯则要求每一层都能回答三个问题:这条数据什么时候进来的、经过了哪些加工、当时用的哪个版本。因此链路设计必须保留分区字段、批次号、任务版本、数据版本。

建议在每层都增加 etl_batch_id(批次号)和 data_version(数据版本)。回补时用批次号隔离,避免覆盖正常数据;审计时用版本号还原当时口径。

四、常见数据表与字段说明

风控域常见表可以按“事件表、状态表、快照表、结果表”四类理解。

  • 事件表:记录发生了什么,如交易事件表、登录事件表。字段通常包括 event_id、user_id、device_id、event_time、amount、ip、status。
  • 状态表:记录当前状态,如用户风险等级表。字段包括 user_id、risk_level、update_time、operator。
  • 快照表:按日期切片,如每日额度快照。字段包括 dt、user_id、credit_limit、used_amount。
  • 结果表:记录决策输出,如规则命中表、模型分表。字段包括 request_id、rule_id、hit_flag、score、decision、create_time。

下面是一张典型的风控决策结果表字段示例:

CREATE TABLE risk_decision_result (
  request_id      STRING  COMMENT '请求唯一ID',
  user_id         STRING  COMMENT '用户ID',
  device_id       STRING  COMMENT '设备ID',
  rule_id         STRING  COMMENT '规则编号',
  hit_flag        INT     COMMENT '是否命中 0/1',
  model_score     DOUBLE  COMMENT '模型分',
  decision        STRING  COMMENT '决策结果 PASS/REJECT/REVIEW',
  data_version    STRING  COMMENT '数据版本',
  etl_batch_id    STRING  COMMENT '批次号',
  dt              STRING  COMMENT '业务日期分区',
  create_time     TIMESTAMP COMMENT '创建时间'
);

五、案例与场景:一次补数为什么补出了双倍命中

某团队发现某天规则命中率异常偏低,决定对DWD层做补数。操作时直接按dt重跑并覆盖原分区,但没有清理下游DWS汇总表。结果DWS中旧数据与新数据叠加,命中次数翻倍,报表显示命中率暴涨。审计时无法判断哪份数据是最终版本。

复盘结论有三点:第一,补数必须走批次隔离,不能直接覆盖;第二,下游汇总表要同步重算或标记失效;第三,审计表要记录补数操作人、时间、影响范围。这正是数据分类和链路设计不到位的代价。

常见误区:把“补数”当成简单重跑。实际上补数涉及分区、批次、下游依赖、版本和审计五件事。缺少任何一件,都会在追溯时断链。

六、方法流程:梳理风控数据体系的五步法

  1. 盘点数据源:列出所有内部库、日志、三方接口,标注时效与可重放性。
  2. 定义分类:按事实/状态/快照/结果四类归档,明确保留周期。
  3. 绘制链路:从ODS到ADS逐层标注表名、分区字段、更新方式。
  4. 补齐元数据:为每张表登记字段含义、口径、版本、负责人。
  5. 设计审计字段:统一加入批次号、数据版本、来源标识,确保可追溯。