5.0 KiB
5.0 KiB
客户交易风险画像与日增量指标加工需求 V2
1. 需求目标
建设客户交易风险主题数据集,将客户、账户、风险标签、汇率和交易流水进行多表关联,产出:
- 客户风险画像全量表
dwd.dwd_customer_risk_profile_full; - 客户日交易风险增量表
dwd.dws_customer_trade_risk_di。
测试批次日期为 2026-08-22,交易统计窗口覆盖 2026-07-24 至 2026-08-22 共 30 个业务日期。
2. 输入表及装载类型
| 库表 | 装载类型 | 主键/分区 | 用途 |
|---|---|---|---|
ods.ods_customer_master_full |
每日全量 | cust_id |
客户主数据 |
ods.ods_account_full |
每日全量 | account_id |
客户账户及余额 |
ods.ods_risk_tag_full |
每日全量 | risk_tag_id |
风险标签、基础分和权重 |
ods.ods_fx_rate_full |
每日全量 | currency_code, rate_date |
交易金额折算人民币 |
ods.ods_transaction_inc |
日增量 | biz_date,流水主键 txn_id |
30 日交易流水 |
仅客户状态为 ACTIVE、账户状态为 ACTIVE 的数据参与风险指标加工。失败交易计入交易笔数和失败率,但不计入交易金额、均值、最大值、跨境笔数和大额笔数。
3. 全量客户风险画像
目标表:dwd.dwd_customer_risk_profile_full,每日按 etl_batch_date 全量覆盖。
基础字段:
cust_id←ods_customer_master_full.cust_id,非空、唯一;cust_name←customer_name;customer_type←customer_type;region_code←region_code;total_account_count:客户全部账户数;active_account_count:客户有效账户数;total_balance:有效账户余额求和,保留 2 位小数。
V2 新增字段:
risk_tag_code:关联risk_tag_id获取;txn_count_30d:30 日交易总笔数;txn_amount_cny_30d:成功交易按交易日汇率折算人民币后求和,保留 2 位;avg_txn_amount_cny_30d:人民币交易金额除以成功交易数,保留 2 位;cross_border_ratio_30d:成功跨境交易数除以成功交易数,保留 6 位;large_txn_count_30d:成功交易折算人民币后单笔金额大于等于 50,000 元的笔数;failed_txn_ratio_30d:失败交易数除以全部交易数,保留 6 位;risk_score:复合风险分,范围 0–100,保留 2 位;risk_level:风险等级;data_quality_flag:无有效账户时为NO_ACTIVE_ACCOUNT,否则为OK;profile_version:固定为2;etl_batch_date:当前批次日期。
全量画像风险分公式:
min(100,
base_score × score_weight
+ cross_border_ratio_30d × 25
+ large_txn_count_30d × 0.4
+ failed_txn_ratio_30d × 15
+ if txn_amount_cny_30d >= 1,000,000 then 5 else 0
)
4. 日增量交易风险指标
目标表:dwd.dws_customer_trade_risk_di,按 biz_date 日增量写入,以 cust_id, biz_date 为联合主键。重复调度同一业务日期时必须覆盖该分区,不允许追加重复记录。
指标字段:
txn_count:当日交易总笔数;successful_txn_count:成功交易笔数;failed_txn_count:失败交易笔数;txn_amount_cny:成功交易人民币金额合计;avg_txn_amount_cny:成功交易人民币平均金额;max_txn_amount_cny:成功交易人民币最大金额;cross_border_count:成功跨境交易笔数;cross_border_ratio:成功跨境交易笔数除以成功交易笔数;large_txn_count:成功交易中人民币金额大于等于 50,000 元的笔数;source_max_update_seq:该客户当日参与加工的源流水最大更新序号;etl_batch_time:批次完成时间。
日增量风险分公式:
min(100,
base_score × score_weight
+ cross_border_ratio × 25
+ large_txn_count × 2
+ failed_txn_count / txn_count × 20
+ if txn_amount_cny >= 500,000 then 10 else 0
)
风险等级统一按复合风险分映射:
risk_score >= 80→HIGH;50 <= risk_score < 80→MEDIUM;risk_score < 50→LOW。
5. 数据质量与核对要求
- 全量画像记录数必须等于有效客户记录数;
- 所有主键及联合主键必须唯一;
- 新增字段必须存在且按规则非空;
- 源交易汇率换算金额与目标汇总金额误差不得超过 0.01;
cross_border_ratio、failed_txn_ratio_30d必须在 0–1;- 风险分和风险等级必须严格符合公式;
- 增量目标必须覆盖 30 个业务日期,源目标有效交易总笔数必须一致;
- Metadata、案例、运行结果、失败样例、Agent 调查结论和测试报告均须绑定本需求版本保存。
6. 演示验收说明
SQLite 演示数据会在日增量目标表中故意写入一条错误的 risk_score/risk_level 组合。预期只有“复合风险评分与等级计算一致性校验”失败,用于体验失败证据和 Codex 根因调查;框架不得把该错误自动修复为通过。