2、回放数据准备:数据源选择与脱敏合规
回放数据的质量直接决定对比分析的置信度。数据源的选择需平衡“真实度”与“合规性”,脱敏处理则必须在保留业务特征的前提下彻底消除敏感信息。本节从数据源类型、适用场景、脱敏方法与合规红线三个维度展开。
2.1 数据源类型与选择策略
金融风控回放通常依赖三类数据源,其特性与适用场景对比如下:
| 数据源类型 | 时效性 | 数据完整性 | 噪声水平 | 典型用途 |
|---|---|---|---|---|
| 生产流量 | 实时/准实时 | 高(全量请求) | 低(真实环境) | 线上模型A/B测试、紧急策略验证 |
| 历史日志 | 延迟(T+1~T+7) | 中(可能截断) | 中(含过期特征) | 策略回溯、冠军/挑战者模型对比 |
| 离线数据集 | 静态(固定时间窗口) | 高(经清洗标注) | 低(已去噪) | 模型训练、长期效果评估、监管审计 |
选型建议: 策略调优优先使用历史日志(成本低、可重复);模型对比优先使用离线数据集(标签准确);线上紧急回滚验证必须使用生产流量(实时反馈)。
2.2 数据源选择流程
选择数据源时,建议按以下步骤决策:
- 明确回放目标:是验证策略效果、对比模型版本,还是满足监管审计?
- 评估数据可用性:检查数据源是否包含请求ID、时间戳、特征向量、决策结果、标签(如有)。
- 确认时间窗口:生产流量取最近1小时;历史日志取最近7~30天;离线数据集按项目需求固定。
- 校验数据一致性:确保新旧系统对同一请求的特征提取逻辑一致,避免特征偏移。
- 执行脱敏检查:在数据进入回放管道前,完成脱敏与合规审查。
2.3 数据脱敏方法与合规要求
金融数据脱敏必须遵循《个人信息保护法》《数据安全法》及银保监会相关指引。核心原则是:不可逆、不可关联、保留分布特征。
2.3.1 常见脱敏技术
| 脱敏方法 | 适用字段 | 保留特征 | 风险等级 |
|---|---|---|---|
| 掩码 | 身份证号、手机号 | 前3后4位格式 | 低 |
| 泛化 | 年龄、收入、地理位置 | 区间分布 | 低 |
| 置换 | 姓名、地址 | 无(完全替换) | 中 |
| 差分隐私 | 聚合统计量 | 统计分布(加噪) | 高 |
| 令牌化 | 银行卡号、账户ID | 唯一性(不可逆) | 高 |
合规红线: 禁止在回放数据中保留明文身份证号、银行卡号、手机号、家庭住址、生物特征。即使脱敏后,也需进行重识别风险评估,确保无法通过关联分析还原个人身份。
2.3.2 脱敏处理流程示例
以下是一个典型的生产流量脱敏管道伪代码:
def desensitize_record(record: dict) -> dict:
# 1. 掩码身份证:保留前6位+后4位,中间用*填充
record['id_card'] = mask_id_card(record['id_card'])
# 2. 泛化年龄:精确年龄 → 年龄段(20-25, 26-30, ...)
record['age_group'] = generalize_age(record['age'])
# 3. 令牌化用户ID:使用HMAC-SHA256映射为不可逆token
record['user_token'] = tokenize(record['user_id'], salt='risk_replay_2025')
# 4. 删除敏感字段:删除原始手机号、地址
del record['phone']
del record['address']
# 5. 保留特征向量与决策标签(用于模型对比)
return {
'request_id': record['request_id'],
'timestamp': record['timestamp'],
'features': record['features'],
'decision': record['decision'],
'label': record.get('label'),
'user_token': record['user_token'],
'age_group': record['age_group'],
'id_card_masked': record['id_card']
}
2.4 数据源与脱敏的架构关系
下图展示了三种数据源在回放系统中的脱敏与合规处理路径:
关键检查点: 每次回放任务启动前,必须确认脱敏引擎版本与当前合规策略一致。建议在回放管道入口设置合规门禁:未通过脱敏校验的数据直接拒绝进入回放队列,并触发告警。