3. 数据基础:用户行为数据、交易数据、收益数据的采集与清洗规范
收益评估人群切片组合风险复盘的核心前提是数据质量。原始数据通常来自多个异构系统,存在格式不统一、字段缺失、时间戳漂移、重复记录等问题。本章定义三类核心数据的采集范围、采集规范与清洗规则,确保后续切片组合计算建立在干净、可追溯的数据基础之上。
3.1 三类数据采集范围与字段定义
数据采集覆盖用户行为、交易流水、收益表现三个维度,每类数据按业务实体与事件时间进行采集。下表列出每类数据的核心字段与采集粒度要求:
| 数据类别 | 核心字段 | 采集粒度 | 数据来源系统 |
|---|---|---|---|
| 用户行为数据 | user_id, event_type, event_time, page_id, device_id, session_id, duration_sec | 单次事件(点击/浏览/停留) | 埋点系统、APP SDK、Web日志 |
| 交易数据 | user_id, order_id, product_id, trade_time, trade_amount, trade_type, status, channel | 单笔订单(含撤销/退款) | 交易核心、支付网关、账务系统 |
| 收益数据 | user_id, product_id, settle_date, income_amount, cost_amount, net_profit, yield_rate | 日终结算(T+1) | 核算系统、资管平台、对账中心 |
采集时效要求:用户行为数据延迟不超过 5 分钟;交易数据要求实时(秒级)接入;收益数据允许 T+1 批量采集。三类数据统一使用 UTC+8 时间戳,且必须携带数据源标识(source_tag),用于后续血缘追踪。
3.2 数据清洗规范与规则
原始数据进入清洗层后,按以下四步规则链执行清洗。每步规则均需记录清洗日志(清洗前记录数、清洗后记录数、剔除原因分布)。
- 格式标准化:统一 user_id 为字符串类型(去除前后空格、统一大小写);时间字段统一为 yyyy-MM-dd HH:mm:ss 格式;金额字段统一为 decimal(18,4),负值保留符号。
- 去重与去噪:按主键(user_id + event_time + event_type 或 order_id)去重,保留最早一条记录;剔除 event_time 超出当前时间 24 小时以上的异常事件;剔除 trade_amount ≤ 0 且 status 为“成功”的矛盾记录。
- 缺失值处理:关键字段(user_id、event_time、trade_amount)缺失时直接剔除整条记录;非关键字段(device_id、channel)缺失时填充默认值“unknown”或“-1”。
- 一致性校验:交易数据与收益数据按 user_id + product_id + settle_date 进行交叉校验,若收益数据中的 net_profit 与交易数据汇总偏差超过 0.01 元,则标记为“待人工复核”并暂不进入切片计算。
清洗规则示例(SQL 片段):
-- 用户行为数据去重
WITH dedup_behavior AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY user_id, event_time, event_type
ORDER BY ingestion_time ASC
) AS rn
FROM raw_user_behavior
WHERE event_time <= CURRENT_TIMESTAMP
AND event_time >= CURRENT_TIMESTAMP - INTERVAL '24' HOUR
)
SELECT * FROM dedup_behavior WHERE rn = 1;
3.3 数据采集与清洗架构
下图展示从数据源到清洗后数据层的完整采集与清洗链路,包含三类数据的采集通道、清洗节点与数据存储目标。
3.4 数据质量监控与异常处理
清洗后的数据需接入实时质量监控看板,监控指标包括:
- 数据完整性:每类数据每日记录数波动不超过历史均值的 ±20%,否则触发告警。
- 字段合规率:关键字段(user_id、trade_amount、net_profit)非空率需 ≥ 99.9%。
- 交叉一致性:交易数据与收益数据按日对账偏差率 ≤ 0.01%。
- 时效性:行为数据从事件发生到进入清洗后层延迟 ≤ 10 分钟;交易数据延迟 ≤ 30 秒。
常见清洗陷阱:
- 用户行为数据中 session_id 可能因 APP 后台切换而断裂,清洗时需按 user_id + device_id + 时间间隔 ≤ 30 分钟进行会话合并,而非简单按 session_id 分组。
- 交易数据中的退款记录(trade_type='refund')不应直接剔除,需保留并标记为负值,用于计算净交易金额。
- 收益数据中的 yield_rate 若为百分比格式(如 5.2%),需统一转换为小数(0.052)后再入库,避免后续计算单位不一致。
3.5 数据血缘与版本管理
每张清洗后的宽表需记录数据血缘信息,包括:数据源表名、采集时间、清洗规则版本号、清洗执行人(调度任务 ID)。建议使用以下元数据字段:
-- 清洗后宽表公共元数据字段示例
source_system VARCHAR(50) COMMENT '数据来源系统标识',
source_table VARCHAR(100) COMMENT '原始表名',
batch_id VARCHAR(32) COMMENT '采集批次ID',
clean_rule_version VARCHAR(10) COMMENT '清洗规则版本号,如 v3.2',
clean_timestamp TIMESTAMP COMMENT '清洗完成时间',
data_quality_flag VARCHAR(10) COMMENT '质量标记:PASS / REVIEW / REJECT'
当清洗规则发生变更时,必须升级 clean_rule_version,并对历史数据按新规则重新清洗一次,确保切片组合复盘的数据口径一致。