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过程将异构、多源、脏乱的原始数据转化为可供模型训练的“商户风险特征宽表”。标准流程包含三个主要阶段:
- Extract(数据抽取):对接各数据源,处理分库分表、增量断点、接口限流等工程问题。
- Transform(数据转换):执行清洗、去重、字段映射、异常值处理、时间窗口聚合等逻辑。
- 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分层架构与核心组件:
3.5 外部征信数据的特殊处理
外部征信数据(如百行征信、朴道征信、同盾等)在采集与清洗中具有特殊性,需要额外关注以下三点:
- 数据授权与合规:必须保留完整的授权记录与查询日志,确保每次查询都有对应的商户授权凭证。清洗阶段不得删除授权链路字段。
- 多源数据融合:不同征信机构对同一指标(如“逾期天数”)的定义可能不同(M1/M2/M3的起算点差异),需要在清洗阶段统一映射到内部标准定义。
- 缺失值处理策略:外部征信查询可能因网络超时、接口限流等原因返回空值。建议在ETL中区分“查询失败”与“查询结果为空”,分别标记为
-999与-888,避免模型误学习。
关键产出物:经过本章ETL流程后,将生成一张以
merchant_id 为主键、包含至少200个原始字段的“商户风险特征宽表”。该表将作为后续特征工程与模型训练的输入基础。建议在宽表中保留 etl_batch_date 字段,方便回溯与版本管理。