3. 数据采集与ETL:商户基本信息、交易流水、行为日志、外部征信数据的采集与清洗

在商户风险评分模型的生命周期中,数据采集与ETL(Extract, Transform, Load)是决定模型上限的基础环节。本章聚焦于四类核心数据源:商户基本信息、交易流水、行为日志与外部征信数据。我们将从数据源特征、采集策略、清洗规则到ETL架构,系统梳理构建高质量训练数据集的全流程。

3.1 四类数据源的特征与采集策略

不同数据源在时效性、结构化程度、数据量级上差异显著,需要匹配差异化的采集方案。下表总结了四类数据源的核心特征与采集方式:

数据源类型 数据特征 采集频率 典型采集方式 数据量级(日)
商户基本信息 静态/低频变更;结构化;字段固定 每日增量 + 全量快照 业务库CDC(Change Data Capture)或API拉取 MB ~ GB
交易流水 高频实时;强时序;含金额/渠道/状态 准实时(分钟级) 消息队列(Kafka) + 流处理 TB ~ PB
行为日志 半结构化/非结构化;含点击/停留/操作路径 实时(秒级) 埋点SDK + 日志采集Agent(Flume/Filebeat) TB ~ PB
外部征信数据 低频查询;结构化;含评分/黑名单/多头借贷 按需查询 + 定期批量 API网关 + 异步回调 MB ~ GB
实践要点:商户基本信息中的“注册时间”“行业类别”“法人信息”等字段是风险分群的基础分层变量,建议在采集阶段就完成标准化编码(如行业映射到一级/二级分类),避免后续特征工程重复处理。

3.2 ETL核心流程:从原始数据到宽表

ETL过程将异构、多源、脏乱的原始数据转化为可供模型训练的“商户风险特征宽表”。标准流程包含三个主要阶段:

  1. Extract(数据抽取):对接各数据源,处理分库分表、增量断点、接口限流等工程问题。
  2. Transform(数据转换):执行清洗、去重、字段映射、异常值处理、时间窗口聚合等逻辑。
  3. Load(数据加载):将清洗后的数据写入分析型数据库(如ClickHouse、Doris)或特征存储(Feast)。

以下是一个典型的交易流水清洗代码片段,展示了去重、空值填充与异常金额过滤:

-- 交易流水清洗示例(Spark SQL)
WITH deduped AS (
  SELECT *,
         ROW_NUMBER() OVER (PARTITION BY trade_id ORDER BY event_time DESC) AS rn
  FROM raw_trade_flow
  WHERE dt = '${biz_date}'
)
SELECT
  merchant_id,
  trade_id,
  COALESCE(amount, 0.0) AS amount,
  COALESCE(trade_status, 'UNKNOWN') AS trade_status,
  CASE WHEN amount <= 0 OR amount > 1000000 THEN 0 ELSE 1 END AS amount_valid_flag,
  event_time
FROM deduped
WHERE rn = 1
  AND amount_valid_flag = 1;
常见陷阱:交易流水中的“退款交易”与“正常交易”必须严格区分。若将退款金额直接累加进正常交易汇总,会导致商户风险评分中的“交易量”特征严重失真。建议在清洗阶段为每条交易打上“交易类型标签”(正常/退款/撤销/冲正)。

3.3 数据质量校验规则

数据质量是模型可信度的前提。在ETL过程中,必须嵌入自动化校验规则,对每类数据源进行完整性、准确性、一致性与时效性检查。下表列出了关键校验项:

校验维度 数据源 校验规则 阈值/预期 异常处理
完整性 商户基本信息 必填字段(商户ID、注册时间)空值率 < 1% 标记异常商户,不进入模型训练
准确性 交易流水 金额字段格式校验(非负、小数位数≤2) 100% 通过 格式错误记录写入异常表,人工核查
一致性 行为日志 商户ID与基本信息表的外键关联匹配率 ≥ 99.5% 未匹配记录按“未知商户”隔离
时效性 外部征信数据 数据查询时间与业务时间差 ≤ 24小时 超时数据标记为“过期”,降权使用

3.4 ETL数据架构与数据流向

为了直观展示四类数据源从采集到最终特征宽表的完整流向,下图呈现了ETL分层架构与核心组件:

商户风险评分模型 — ETL数据架构与流向 数据源层 商户基本信息 交易流水 行为日志 外部征信数据 采集层 CDC / API 拉取 Kafka 消息队列 Flume / Filebeat API 网关 清洗与转换层 Spark / Flink 流批一体处理 去重 · 空值填充 · 异常过滤 · 字段映射 · 时间窗口聚合 存储与特征层 分析型数据库(ClickHouse) 特征存储(Feast) 模型训练 商户风险特征宽表

3.5 外部征信数据的特殊处理

外部征信数据(如百行征信、朴道征信、同盾等)在采集与清洗中具有特殊性,需要额外关注以下三点:

  • 数据授权与合规:必须保留完整的授权记录与查询日志,确保每次查询都有对应的商户授权凭证。清洗阶段不得删除授权链路字段。
  • 多源数据融合:不同征信机构对同一指标(如“逾期天数”)的定义可能不同(M1/M2/M3的起算点差异),需要在清洗阶段统一映射到内部标准定义。
  • 缺失值处理策略:外部征信查询可能因网络超时、接口限流等原因返回空值。建议在ETL中区分“查询失败”与“查询结果为空”,分别标记为 -999 与 -888,避免模型误学习。
关键产出物:经过本章ETL流程后,将生成一张以 merchant_id 为主键、包含至少200个原始字段的“商户风险特征宽表”。该表将作为后续特征工程与模型训练的输入基础。建议在宽表中保留 etl_batch_date 字段,方便回溯与版本管理。