返回架构笔记
Arch Day 56

Arch Day 56: 风控系统架构 — 在用户体验和安全之间的精准平衡

风控系统不是简单的"拦截坏人"——它是在用户体验和安全之间寻找精准平衡的决策系统。过松则损失(欺诈),过严则流失(误杀好用户)。现代风控架构采用"实时(毫秒级)→准实时(秒级)→离线(分钟/天级)"的三层分层决策体系,通过特征平台、规则引擎和ML模型引擎的协同,在每笔交易的100毫秒内做出"放行/拒绝/人工审核"的决策。

2026-05-25
第二阶段 - 金融域深度
风控系统实时风控特征平台规则引擎ML反欺诈FeatureStore风控中台

日期: 2026-05-25 (Day 56) 阶段: 第二阶段 - 金融域深度 标签: #风控系统 #实时风控 #特征平台 #规则引擎 #ML反欺诈 #FeatureStore #风控中台


核心概念

一句话定义

风控系统不是简单的"拦截坏人"——它是在用户体验安全之间寻找精准平衡的决策系统。过松则损失(欺诈),过严则流失(误杀好用户)。现代风控架构采用"实时(毫秒级)→准实时(秒级)→离线(分钟/天级)"的三层分层决策体系,通过特征平台、规则引擎和ML模型引擎的协同,在每笔交易的100毫秒内做出"放行/拒绝/人工审核"的决策。

为什么资深架构师仍需关注

维度价值
通用能力风控架构的设计思想(特征工程/规则引擎/ML serving)在搜索推荐/广告/内容安全等场景通用
AI落地标杆风控是ML在金融领域最成功、最成熟的应用——理解它有助于理解AI如何在业务中创造价值
架构复杂度实时风控要求<50ms的决策延迟+99.99%的可用性+毫秒级特征计算——是架构设计的极限挑战
业务价值直接风控直接影响损失率和用户流失率——1%的优化可能意味着数千万的收益或损失
Web3相关DeFi的风控(MEV保护/预言机操纵防护/闪电贷攻击检测)是完全不同的范式

常见误区与反模式

误区真相
"风控就是上一个ML模型"规则引擎处理80%的明确案例,ML模型处理20%的模糊地带。没有规则引擎的风控系统是不完整的
"风控越严越好"过严的风控会大量误杀好用户——一个被误拒的支付可能意味着永久失去这个客户
"特征越多模型越好"过多的特征会导致过拟合和计算延迟。特征的质量比数量重要100倍
"实时风控就是查黑名单"黑名单只是最基础的一环。真正的实时风控包括特征计算→规则执行→模型推理→决策融合的完整管道
"风控是技术团队的事"风控策略需要业务(策略分析师)+技术(工程师)+数据(数据科学家)三方紧密协作

知识点详解

知识点1:风控分层架构

风控三层架构:
━━━━━━━━━━━━

                    响应时间        覆盖率        准确率
                    ┌──────────────────────────────────┐
Layer 1:            │                                  │
实时风控            │  < 50ms      中(规则+模型)  高    │
(毫秒级)            │  每笔交易都过                     │
                    │                                  │
                    ├──────────────────────────────────┤
Layer 2:            │                                  │
准实时风控          │  秒~分钟     高(深度分析)    高    │
(秒级)              │  可疑交易深度分析                  │
                    │                                  │
                    ├──────────────────────────────────┤
Layer 3:            │                                  │
离线风控            │  分钟~天     最高(全量扫描)  最高  │
(批量)              │  全量回溯/模型训练                 │
                    │                                  │
                    └──────────────────────────────────┘

Layer 1: 实时风控(每笔交易必经)
┌──────────────────────────────────────────────────┐
│                                                  │
│  输入: 交易事件(用户ID/金额/商户/设备/IP/时间)    │
│                                                  │
│  处理流程(总耗时 < 50ms):                         │
│  ┌─────────┐    ┌─────────┐    ┌─────────┐      │
│  │ 名单查询 │───→│ 特征计算 │───→│ 规则执行 │      │
│  │ (5ms)   │    │ (15ms)  │    │ (10ms)  │      │
│  └─────────┘    └─────────┘    └────┬────┘      │
│                                     │            │
│                                ┌────▼────┐       │
│                                │ 模型推理 │       │
│                                │ (15ms)  │       │
│                                └────┬────┘       │
│                                     │            │
│                                ┌────▼────┐       │
│                                │ 决策融合 │       │
│                                │ (5ms)   │       │
│                                └────┬────┘       │
│                                     │            │
│  输出: PASS / REJECT / REVIEW / CHALLENGE        │
│                                                  │
│  PASS: 放行                                      │
│  REJECT: 拒绝(高确信欺诈)                        │
│  REVIEW: 人工审核(不确定)                         │
│  CHALLENGE: 验证挑战(如短信验证码)                │
│                                                  │
└──────────────────────────────────────────────────┘

Layer 2: 准实时风控(可疑交易深度分析)
┌──────────────────────────────────────────────────┐
│                                                  │
│  触发条件:                                        │
│  ├── 实时风控标记为REVIEW的交易                   │
│  ├── 累计金额超阈值告警                           │
│  └── 关联账户异常行为触发                         │
│                                                  │
│  处理方式:                                        │
│  ├── 深度特征计算(需要更多数据,耗时更长)         │
│  ├── 图分析(关联账户网络检测)                     │
│  ├── 行为序列分析(过去N小时的操作序列)            │
│  └── 复杂模型推理(深度学习模型)                   │
│                                                  │
│  输出: 提升为REJECT或降级为PASS                   │
│  响应时间: 秒~分钟级                              │
│                                                  │
└──────────────────────────────────────────────────┘

Layer 3: 离线风控(全量分析+模型训练)
┌──────────────────────────────────────────────────┐
│                                                  │
│  任务类型:                                        │
│  ├── 全量用户画像更新(每日)                       │
│  ├── 批量可疑交易回溯检测(每小时)                 │
│  ├── ML模型训练和评估(每周)                       │
│  ├── 规则效果评估(每日)                           │
│  ├── 误报率/漏报率统计(每日)                      │
│  └── 名单库更新(实时+批量)                       │
│                                                  │
│  技术栈:                                          │
│  ├── 离线计算: Spark/Flink Batch                  │
│  ├── 特征存储: Hive/ClickHouse                   │
│  ├── 模型训练: Python/PyTorch/XGBoost            │
│  └── 调度: Airflow/DolphinScheduler              │
│                                                  │
└──────────────────────────────────────────────────┘

知识点2:实时风控决策引擎完整架构

实时风控决策引擎架构:
━━━━━━━━━━━━━━━━━━━━

┌─────────────────────────────────────────────────────────────┐
│                     API/事件接入层                           │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐   │
│  │ 支付事件  │  │ 登录事件  │  │ 注册事件  │  │ 提现事件  │   │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘  └────┬─────┘   │
│       └──────────────┴──────────────┴──────────────┘         │
│                              │                               │
├──────────────────────────────▼───────────────────────────────┤
│                     事件路由层                                │
│  根据事件类型路由到对应的风控策略集                            │
│  ├── 支付事件 → 支付风控策略                                 │
│  ├── 登录事件 → 账户安全策略                                 │
│  └── 注册事件 → 注册反欺诈策略                               │
├──────────────────────────────┬───────────────────────────────┤
│                              │                               │
│  ┌───────────────────────────▼────────────────────────────┐  │
│  │                    特征计算层                            │  │
│  │                                                        │  │
│  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐ │  │
│  │  │ 实时特征      │  │ 近线特征      │  │ 离线特征      │ │  │
│  │  │              │  │              │  │              │ │  │
│  │  │ 当前交易属性  │  │ 近N分钟/小时  │  │ 用户画像      │ │  │
│  │  │ ├── 金额     │  │ ├── 交易次数  │  │ ├── 历史风险  │ │  │
│  │  │ ├── 商户     │  │ ├── 累计金额  │  │ ├── 注册时间  │ │  │
│  │  │ ├── 设备指纹 │  │ ├── 不同IP数  │  │ ├── 信用等级  │ │  │
│  │  │ ├── IP地理   │  │ ├── 不同设备数│  │ ├── 行为基线  │ │  │
│  │  │ └── 时间特征 │  │ └── 失败次数  │  │ └── 社交图谱  │ │  │
│  │  │              │  │              │  │              │ │  │
│  │  │ 数据源:      │  │ 数据源:       │  │ 数据源:      │ │  │
│  │  │ 事件本身     │  │ Redis/Flink  │  │ 特征DB/HBase │ │  │
│  │  │ 延迟: <1ms   │  │ 延迟: <5ms   │  │ 延迟: <10ms  │ │  │
│  │  └──────────────┘  └──────────────┘  └──────────────┘ │  │
│  └────────────────────────────┬───────────────────────────┘  │
│                               │                              │
│  ┌────────────────────────────▼───────────────────────────┐  │
│  │                    决策执行层                            │  │
│  │                                                        │  │
│  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐ │  │
│  │  │ 名单系统      │  │ 规则引擎      │  │ 模型引擎      │ │  │
│  │  │              │  │              │  │              │ │  │
│  │  │ ├── 黑名单   │  │ ├── 规则集A  │  │ ├── 模型A    │ │  │
│  │  │ │   (必杀)   │  │ │   (大额)   │  │ │   (XGBoost)│ │  │
│  │  │ ├── 白名单   │  │ ├── 规则集B  │  │ ├── 模型B    │ │  │
│  │  │ │   (免检)   │  │ │   (频次)   │  │ │   (Neural) │ │  │
│  │  │ └── 灰名单   │  │ └── 规则集C  │  │ └── 模型C    │ │  │
│  │  │    (重点关注) │  │    (关联)    │  │    (Graph)   │ │  │
│  │  └──────────────┘  └──────────────┘  └──────────────┘ │  │
│  │                                                        │  │
│  │  ┌──────────────────────────────────────────────────┐  │  │
│  │  │              决策融合(Decision Fusion)             │  │  │
│  │  │                                                  │  │  │
│  │  │  优先级: 黑名单 > 白名单 > 模型 > 规则            │  │  │
│  │  │                                                  │  │  │
│  │  │  融合策略:                                        │  │  │
│  │  │  ├── 任一引擎REJECT → 最终REJECT                 │  │  │
│  │  │  ├── 黑名单命中 → 直接REJECT(不走后续)           │  │  │
│  │  │  ├── 白名单命中 → 直接PASS(不走后续)             │  │  │
│  │  │  ├── 模型分数 + 规则结果 → 加权决策              │  │  │
│  │  │  └── 不确定 → REVIEW(交人工)                     │  │  │
│  │  └──────────────────────────────────────────────────┘  │  │
│  └────────────────────────────────────────────────────────┘  │
│                               │                              │
├───────────────────────────────▼──────────────────────────────┤
│                     输出层                                    │
│  ├── 风控决策: PASS/REJECT/REVIEW/CHALLENGE                  │
│  ├── 风控分数: 0-1000的风险分                                │
│  ├── 命中规则: 触发了哪些规则(用于解释)                       │
│  ├── 建议动作: 具体的处置建议                                │
│  └── 审计日志: 完整的决策链路记录(合规+排查)                  │
└──────────────────────────────────────────────────────────────┘

知识点3:特征平台架构(Feature Store)

特征平台(Feature Store)架构:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━

为什么需要特征平台:
├── 问题1: 训练和推理使用不同的特征计算代码 → 训练-推理偏差(Skew)
├── 问题2: 不同团队重复开发相同特征 → 资源浪费
├── 问题3: 特征没有版本管理 → 无法复现和回溯
└── 问题4: 实时特征和离线特征的管理方式完全不同 → 架构复杂

特征平台核心架构:
┌──────────────────────────────────────────────────────────────┐
│                                                              │
│                     Feature Registry (特征注册中心)           │
│  ┌────────────────────────────────────────────────────────┐  │
│  │ 特征元数据: 名称/类型/数据源/计算逻辑/所有者/SLA        │  │
│  │ 特征血缘: 从原始数据到特征的完整链路                     │  │
│  │ 特征版本: 每个特征的变更历史                             │  │
│  │ 特征监控: 分布漂移/缺失率/延迟                          │  │
│  └────────────────────────────────────────────────────────┘  │
│                                                              │
│  ┌───────────────┐  ┌───────────────┐  ┌───────────────┐    │
│  │ 离线特征管道    │  │ 近线特征管道    │  │ 实时特征管道    │    │
│  │ (Batch)        │  │ (Near-realtime)│  │ (Realtime)    │    │
│  │                │  │               │  │               │    │
│  │ 数据源:        │  │ 数据源:        │  │ 数据源:        │    │
│  │ Hive/数据仓库  │  │ Kafka/CDC     │  │ 事件本身       │    │
│  │                │  │               │  │               │    │
│  │ 计算引擎:      │  │ 计算引擎:      │  │ 计算引擎:      │    │
│  │ Spark         │  │ Flink         │  │ 内存计算       │    │
│  │                │  │               │  │               │    │
│  │ 存储:          │  │ 存储:          │  │ 存储:          │    │
│  │ HBase/Hive    │  │ Redis/HBase   │  │ Redis/Local   │    │
│  │                │  │               │  │               │    │
│  │ 延迟:          │  │ 延迟:          │  │ 延迟:          │    │
│  │ T+1(天级)     │  │ 秒~分钟级     │  │ <5ms          │    │
│  │                │  │               │  │               │    │
│  │ 示例:          │  │ 示例:          │  │ 示例:          │    │
│  │ ├── 用户画像   │  │ ├── 近1h交易数│  │ ├── 当前金额   │    │
│  │ ├── 历史统计   │  │ ├── 近1h累计额│  │ ├── 当前设备   │    │
│  │ └── 社交图谱   │  │ └── 近1h设备数│  │ └── 当前IP    │    │
│  └───────────────┘  └───────────────┘  └───────────────┘    │
│                                                              │
│                     Feature Serving (特征服务)                │
│  ┌────────────────────────────────────────────────────────┐  │
│  │                                                        │  │
│  │  Online Serving (实时查询):                              │  │
│  │  ├── 接口: GetFeature(entity_id, feature_names)         │  │
│  │  ├── 延迟: < 10ms (P99)                                │  │
│  │  ├── 存储: Redis Cluster (主) + HBase (备)              │  │
│  │  └── 场景: 实时风控决策                                  │  │
│  │                                                        │  │
│  │  Offline Serving (批量查询):                              │  │
│  │  ├── 接口: GetHistoricalFeatures(entities, timestamps)  │  │
│  │  ├── 延迟: 分钟级                                       │  │
│  │  ├── 存储: Hive/Parquet                                 │  │
│  │  └── 场景: 模型训练数据准备                              │  │
│  │                                                        │  │
│  └────────────────────────────────────────────────────────┘  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

训练-推理一致性保证:
┌────────────────────────────────────────────────┐
│                                                │
│  核心问题: 训练时用Python离线计算的特征         │
│           推理时用Java实时计算的特征             │
│           两者的逻辑可能不一致!                  │
│                                                │
│  解决方案:                                      │
│  ├── 方案A: 特征计算逻辑统一定义(DSL)          │
│  │   └── 同一个DSL编译为Spark(训练)和Flink(推理)│
│  ├── 方案B: Point-in-time Join                 │
│  │   └── 训练时使用Feature Store的历史快照       │
│  │       而非重新计算,保证和推理时一致           │
│  └── 方案C: Feature Log                        │
│      └── 推理时记录使用的特征值                  │
│          训练时直接使用这些Log                   │
│                                                │
└────────────────────────────────────────────────┘

知识点4:风控中台设计

风控中台四大模块:
━━━━━━━━━━━━━━━━

┌─────────────────────────────────────────────────────────────┐
│                        风控中台                              │
│                                                             │
│  ┌─────────────┐  ┌─────────────┐  ┌──────────────────┐   │
│  │  规则引擎     │  │  模型引擎     │  │  名单管理系统     │   │
│  │              │  │              │  │                  │   │
│  │ ├── 规则配置 │  │ ├── 模型注册 │  │ ├── 黑名单管理   │   │
│  │ ├── 规则编排 │  │ ├── 模型部署 │  │ ├── 白名单管理   │   │
│  │ ├── 规则测试 │  │ ├── A/B测试  │  │ ├── 灰名单管理   │   │
│  │ ├── 规则上线 │  │ ├── 模型监控 │  │ ├── 外部名单接入 │   │
│  │ └── 规则监控 │  │ └── 模型回滚 │  │ └── 名单查询API  │   │
│  └─────────────┘  └─────────────┘  └──────────────────┘   │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                    案件管理系统                        │   │
│  │                                                     │   │
│  │  ├── 可疑交易工单                                    │   │
│  │  │   ├── 自动创建: 风控标记REVIEW的交易               │   │
│  │  │   ├── 人工审核: 审核员判定是否欺诈                 │   │
│  │  │   ├── 处置动作: 冻结/解冻/退款/报案               │   │
│  │  │   └── SLA管理: 不同级别不同响应时间                │   │
│  │  │                                                   │   │
│  │  ├── 案件调查工具                                    │   │
│  │  │   ├── 交易链路可视化                               │   │
│  │  │   ├── 关联账户图谱                                 │   │
│  │  │   ├── 设备/IP关联分析                              │   │
│  │  │   └── 时间线重建                                   │   │
│  │  │                                                   │   │
│  │  └── 案件统计与反馈                                   │   │
│  │      ├── 误报率/漏报率统计                            │   │
│  │      ├── 案件标签 → 反馈给模型训练                    │   │
│  │      └── 规则效果评估                                 │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

风控与业务的解耦:
┌────────────────────────────────────────────────┐
│                                                │
│  设计目标: 风控作为"横切关注点"(Cross-Cutting)  │
│  ——不侵入业务代码,通过AOP/Sidecar/网关集成    │
│                                                │
│  集成模式:                                      │
│                                                │
│  模式A: API调用(同步)                          │
│  业务服务 ──HTTP/gRPC──→ 风控服务 ──→ 返回决策  │
│  优点: 简单直接                                │
│  缺点: 风控不可用时阻塞业务                    │
│                                                │
│  模式B: 网关集成(透明)                          │
│  请求 → API Gateway → [风控插件] → 业务服务     │
│  优点: 业务无感知                               │
│  缺点: 只能做请求级风控(看不到业务上下文)       │
│                                                │
│  模式C: 事件驱动(异步)                          │
│  业务服务 ──发送事件──→ 风控服务 ──→ 异步处置    │
│  优点: 不阻塞业务                               │
│  缺点: 无法实时拦截(只能事后处理)               │
│                                                │
│  最佳实践: 支付前=模式A(同步拦截)               │
│           支付后=模式C(异步监控)                 │
│                                                │
└────────────────────────────────────────────────┘

知识点5:AI反欺诈——ML模型全生命周期

ML反欺诈模型生命周期:
━━━━━━━━━━━━━━━━━━━━

Phase 1: 数据准备
┌────────────────────────────────────────┐
│ 数据源:                                │
│ ├── 交易数据(金额/时间/商户/渠道)      │
│ ├── 用户数据(注册时间/认证等级)        │
│ ├── 设备数据(设备指纹/OS/浏览器)       │
│ ├── 行为数据(操作序列/点击流)          │
│ └── 标签数据(确认欺诈/确认正常)        │
│                                        │
│ 数据挑战:                              │
│ ├── 极度不平衡: 欺诈率通常<0.1%        │
│ ├── 标签延迟: 欺诈可能在交易后数天才确认│
│ └── 概念漂移: 欺诈者持续变换策略        │
│                                        │
│ 处理方法:                              │
│ ├── 过采样: SMOTE生成少数类样本         │
│ ├── 欠采样: 随机减少多数类样本          │
│ ├── 代价敏感: 给欺诈样本更高的权重      │
│ └── 时间窗口: 按时间滑窗训练(避免未来泄露)│
└────────────────────────────────────────┘

Phase 2: 特征工程
┌────────────────────────────────────────┐
│ 特征类别:                              │
│                                        │
│ 统计特征(窗口聚合):                    │
│ ├── 近1h/24h/7d交易次数               │
│ ├── 近1h/24h/7d交易总额               │
│ ├── 近1h/24h/7d不同商户数              │
│ ├── 近1h/24h/7d不同设备数              │
│ └── 近1h/24h/7d失败交易占比            │
│                                        │
│ 偏差特征(与基线对比):                   │
│ ├── 当前金额 vs 历史平均金额           │
│ ├── 当前时间 vs 常用交易时间           │
│ ├── 当前商户 vs 常用商户               │
│ └── 当前地理 vs 常用地理               │
│                                        │
│ 图特征(关联网络):                       │
│ ├── 同设备关联的其他账户数              │
│ ├── 同IP关联的其他账户数               │
│ ├── 关联账户中已确认欺诈的数量          │
│ └── 资金链路的跳数和模式               │
│                                        │
│ 序列特征(行为模式):                     │
│ ├── 操作序列的异常程度                  │
│ ├── 页面停留时间模式                    │
│ └── 击键/滑动速度模式                   │
└────────────────────────────────────────┘

Phase 3: 模型训练
┌────────────────────────────────────────┐
│ 常用模型:                              │
│ ├── XGBoost/LightGBM: 主力模型        │
│ │   优点: 效果好/可解释/训练快         │
│ ├── Neural Network: 补充模型           │
│ │   优点: 捕捉复杂非线性关系           │
│ ├── Graph Neural Network: 关系模型     │
│ │   优点: 识别欺诈团伙/关联网络        │
│ └── Isolation Forest: 异常检测         │
│     优点: 无需标签/发现新型欺诈        │
│                                        │
│ 评估指标:                              │
│ ├── Precision: 标记为欺诈中真正欺诈的比例│
│ ├── Recall: 真正欺诈中被标记出的比例    │
│ ├── F1-Score: Precision和Recall的调和  │
│ ├── AUC-ROC: 模型区分能力              │
│ └── 业务指标: 损失率↓ + 误杀率↓        │
│                                        │
│ 关键权衡:                              │
│ Precision ↑ → 误报少但漏报多(漏过欺诈) │
│ Recall ↑ → 漏报少但误报多(误杀好用户)  │
│ 业务决定阈值: 金融通常偏重Recall        │
└────────────────────────────────────────┘

Phase 4: 在线Serving
┌────────────────────────────────────────┐
│ 部署方式:                              │
│ ├── 方案A: 模型导出为PMML/ONNX        │
│ │   └── Java/C++加载推理              │
│ ├── 方案B: TensorFlow Serving / Triton│
│ │   └── gRPC调用                      │
│ └── 方案C: 模型蒸馏为规则             │
│     └── 复杂模型→简单规则(极致延迟)   │
│                                        │
│ 性能要求:                              │
│ ├── 延迟: P99 < 20ms                  │
│ ├── 吞吐: > 10,000 QPS               │
│ └── 可用性: 99.99% (降级策略)          │
│                                        │
│ 降级策略:                              │
│ 模型服务不可用 → 降级为纯规则引擎      │
│ 保证风控不成为支付的单点故障            │
└────────────────────────────────────────┘

Phase 5: A/B测试与迭代
┌────────────────────────────────────────┐
│ A/B测试策略:                           │
│ ├── Shadow Mode: 新模型与旧模型并行    │
│ │   新模型打分但不做决策(只记录)        │
│ │   对比新旧模型的效果差异              │
│ ├── Gradual Rollout: 5%→20%→50%→100% │
│ │   逐步增加新模型的流量比例            │
│ └── Champion-Challenger: 持续对比      │
│                                        │
│ 模型监控:                              │
│ ├── 性能指标: 延迟/QPS/错误率          │
│ ├── 效果指标: Precision/Recall/AUC    │
│ ├── 分布监控: 特征分布是否漂移(Drift)  │
│ └── 业务指标: 损失率/误杀率/人工审核率 │
│                                        │
│ 模型迭代频率:                          │
│ ├── 欺诈模式变化快 → 建议每1-2周迭代   │
│ └── 自动化训练管道(AutoML+CI/CD)       │
└────────────────────────────────────────┘

对比分析

风控系统架构方案对比

维度纯规则引擎规则+ML纯ML(端到端)
适用阶段初期/数据少成熟期数据充足期
延迟<5ms(最快)<50ms<100ms
可解释性极高(白盒)中等低(黑盒)
对新型欺诈差(需人工)中等好(自动学习)
误报率高(规则粗糙)最低
维护成本高(规则膨胀)中等低(自动迭代)
冷启动快(专家经验)慢(需大量数据)
合规友好最好差(需额外解释)

主流风控技术方案对比

方案代表优点缺点
Drools规则引擎银行/保险成熟稳定/可解释规则膨胀/维护困难
Stripe RadarStripe网络效应/开箱即用定制性有限
Feedzai大型银行企业级/全渠道昂贵
自研系统蚂蚁/字节完全定制投入巨大
ChainalysisWeb3链上专业仅限链上

架构设计实操

设计目标

设计"实时风控系统"完整架构,包含特征平台+规则引擎+模型引擎+决策中心。

架构设计方案

实时风控系统架构设计方案:
━━━━━━━━━━━━━━━━━━━━━━━

设计约束:
├── 决策延迟: P99 < 50ms
├── 吞吐量: > 50,000 QPS
├── 可用性: 99.99%
├── 误报率: < 1%
├── 漏报率: < 0.01%
└── 支持事件类型: 支付/登录/注册/提现

技术选型:
├── 语言: Java(决策引擎) + Python(模型训练)
├── 特征存储: Redis Cluster(在线) + HBase(离线)
├── 流计算: Apache Flink(近线特征)
├── 模型Serving: TensorFlow Serving(gRPC)
├── 规则引擎: 自研(基于表达式编译)
├── 消息队列: Kafka(事件采集+异步处理)
├── 监控: Prometheus + Grafana
└── 名单存储: Redis(热) + MySQL(冷)

ADR: 风控系统关键决策

## ADR-056: 实时风控决策引擎架构

### 状态: 已采纳

### 决策1: 规则引擎采用自研而非Drools
原因:
- Drools的Rete算法在规则数量>1000时性能下降明显
- 支付场景需要<5ms的规则执行时间
- 自研可以针对"风控规则"的特点深度优化
- 核心实现: 将规则编译为字节码(类似JIT)

### 决策2: 特征平台采用三层存储
- 实时特征: 内存计算(事件本身属性)
- 近线特征: Redis(Flink实时聚合写入)
- 离线特征: HBase(Spark离线计算写入)
原因: 不同时效性的特征有不同的计算和存储要求

### 决策3: 模型引擎作为可降级的组件
- 模型服务不可用时 → 自动降级为纯规则引擎
- 不让ML模型成为支付链路的单点故障
原因: 模型服务的稳定性不如规则引擎

AI增强实践

AI在风控中的前沿应用

前沿1: Graph Neural Network(GNN)反欺诈
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

传统ML: 单个交易维度评估
GNN: 将交易/用户/设备/IP构建为图,在图上做推理

图的构建:
├── 节点: 用户/设备/IP/商户/卡号
├── 边: 交易关系/设备关联/IP关联
└── 特征: 节点属性+边属性

GNN的优势:
├── 发现"群体欺诈": 共用设备/IP的欺诈团伙
├── 传播信息: 一个确认欺诈节点可以"感染"关联节点
└── 冷启动: 新用户没有历史数据,但有关联关系

前沿2: LLM辅助风控运营
━━━━━━━━━━━━━━━━━━━━━━

应用场景:
├── 规则解释: LLM自动生成规则触发的自然语言解释
├── 案件摘要: LLM自动总结案件的关键信息
├── 策略建议: LLM根据数据分析建议新规则
└── 审核辅助: LLM为审核员提供决策参考

前沿3: 联邦学习(Federated Learning)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

场景: 多家银行共建反欺诈模型,但不共享原始数据
方法:
├── 每家银行在本地训练模型
├── 只共享模型参数(梯度),不共享原始数据
├── 中央服务器聚合各银行的梯度
└── 所有银行获得更好的全局模型

价值: 在数据隐私合规(GDPR)下实现跨机构风控协作

与Web3/DeFi的关联

传统风控 vs DeFi风控

维度传统风控DeFi风控
身份KYC实名匿名地址
数据私有(各机构独立)公开(链上透明)
决策时机交易前拦截交易前模拟/交易后追踪
处置手段冻结账户/拒绝交易暂停合约/时间锁
欺诈类型盗卡/身份盗用/洗钱闪电贷攻击/预言机操纵/Rug Pull
风控主体中心化机构协议自身+社区
AI应用ML分类(是否欺诈)异常检测(链上行为)+模拟(交易模拟)

DeFi风控的独特挑战

DeFi特有的风控场景:
├── 闪电贷攻击: 在一个交易内借款→操纵→获利→还款
│   防护: 预言机TWAP/多源价格/延迟执行
├── 预言机操纵: 操纵价格Feed触发错误清算
│   防护: 多预言机聚合/偏差检测/断路器
├── MEV攻击: 三明治攻击/抢跑
│   防护: 私有mempool/MEV保护/Intent-based
├── Rug Pull: 项目方卷钱跑路
│   防护: 流动性锁定/时间锁/多签
└── 治理攻击: 闪电贷借治理代币投票
    防护: 时间锁/投票延迟/快照投票

今日思考

三个深度问题

问题1: 风控系统的误报率和漏报率如何平衡?如果你是支付公司的PM,你会如何设定阈值?

思考方向: 需要量化分析——每个误报造成的用户流失损失 vs 每个漏报造成的欺诈损失。如果一次误报平均导致损失$50(客户可能不再使用),一次漏报平均损失$500(欺诈金额),那么误报/漏报的可接受比例大约是10:1。但这只是起点,还需要考虑品牌影响和监管要求。

问题2: 特征平台的"训练-推理一致性"(Training-Serving Skew)为什么是一个难题?有哪些实际的解决方案?

思考方向: 根本原因是训练用Python离线计算,推理用Java实时计算,两套代码可能不一致。解决方案包括:统一DSL(同一份代码编译为不同引擎)、Feature Log(推理时记录特征值,训练时直接使用)、Point-in-time Join(训练时从Feature Store回查历史特征)。

问题3: DeFi的链上数据完全公开透明,是否意味着DeFi的风控会比传统金融更容易?

思考方向: 数据公开是把双刃剑——风控方可以看到所有交易,但攻击者也可以看到所有防御策略。而且链上匿名性使得"谁在做"这个最基本的风控信息缺失。传统风控知道"张三在转账",链上风控只知道"0x123在转账"。


面试题准备

面试题1: 实时风控如何做到毫秒级响应?

30秒版本

毫秒级响应的核心是四点:第一,特征预计算——大部分特征提前算好存在Redis里,查询时直接取而非实时计算;第二,规则编译优化——规则编译为字节码,避免解释执行的开销;第三,模型轻量化——使用XGBoost等轻量模型,必要时蒸馏为简单规则;第四,并行执行——名单查询、特征获取、规则执行可以并行进行。

2分钟版本

实时风控的毫秒级响应需要在架构的每个环节优化:

  1. 特征计算优化: 将特征分为三类——实时特征(从事件本身提取,<1ms)、近线特征(Flink预计算存Redis,查询<5ms)、离线特征(Spark预计算存HBase,查询<10ms)。关键是把重计算从请求路径移到预计算路径。

  2. 规则引擎优化: 不使用Drools等通用规则引擎,而是将风控规则编译为JVM字节码。规则的条件判断变成了直接的if-else执行,消除了规则解释的开销。1000条规则的执行时间可以控制在5ms以内。

  3. 模型推理优化: 使用ONNX Runtime或TensorRT加速推理;模型轻量化(XGBoost几十棵树,推理<5ms);关键是不依赖模型——模型服务不可用时自动降级为纯规则。

  4. 架构优化: 名单查询、特征获取、规则准备可以并行进行(CompletableFuture);使用本地缓存减少网络IO;连接池预建+长连接复用。

  5. 可用性保证: 风控系统设计为"可降级"——模型不可用降级为规则,规则不可用降级为名单,名单不可用放行(宁可放行也不能阻塞支付)。

追问准备

  • 追问: 特征平台的架构价值是什么?
    • 答: 三大价值——消除训练推理偏差(统一特征计算逻辑)、复用(不同业务共享特征)、管理(版本/血缘/监控)。本质上特征平台把"特征"从代码里的变量提升为可管理的资产。

学习资源

资源类型推荐度
《Machine Learning for Financial Fraud Detection》论文必读
Feast Feature Store开源特征平台参考实现
Stripe Radar文档官方文档ML反欺诈最佳实践
《反欺诈:基于数据分析和机器学习》书籍系统性入门
蚂蚁风控技术分享博客大规模风控实践

明日预告

Day 57: 规则引擎设计 — 把业务决策逻辑从代码中解耦

明天将深入规则引擎的设计,从正向链/反向链/决策表的理论基础,到Drools/Aviator/QLExpress等主流引擎的对比,再到规则编排、热更新、性能优化的实践技巧。规则引擎是风控系统的"大脑",也是将业务逻辑从代码中解耦的通用架构模式。