高频与风险科学 · 章节
反欺诈科学
06-hft-risk-science/05-fraud-detection.md
反欺诈科学
定位:反欺诈背后的数学模型、算法和工程方法 关联:与 W3 风控引擎设计互补——W3 是"怎么建系统",本篇是"系统里跑的科学"
一、核心概念与直觉
欺诈检测 vs 信用风险
| 维度 | 欺诈检测 | 信用风险 |
|---|---|---|
| 本质 | 识别故意的恶意行为 | 评估能力不足的违约风险 |
| 对手 | 会主动适应和规避 | 不会刻意对抗模型 |
| 样本 | 极度不平衡(0.01%-0.1%) | 相对平衡(1%-5%) |
| 时效 | 毫秒级实时决策 | 可以批量T+1 |
| 标签 | 延迟确认(可能数周后才知道) | 相对明确(逾期=违约) |
反欺诈的本质
反欺诈 = 异常检测 + 模式识别 + 对抗博弈
┌─ 统计异常(Z-Score/IQR/Benford)
异常检测 ────────┼─ 机器学习(Isolation Forest/AutoEncoder)
└─ 图分析(社区发现/GNN)
┌─ 规则匹配(专家经验→if-else)
模式识别 ────────┼─ 序列建模(HMM/LSTM/Transformer)
└─ 用户画像(行为基线→偏离检测)
┌─ 概念漂移(欺诈模式持续演化)
对抗博弈 ────────┼─ 对抗训练(GAN增强鲁棒性)
└─ 在线学习(持续适应新模式)
二、统计异常检测方法
2.1 Z-Score
原理:衡量一个数据点偏离均值多少个标准差。
Z = (x - μ) / σ
判断标准:
|Z| > 2 → 轻度异常(约5%概率)
|Z| > 3 → 重度异常(约0.3%概率)
在线更新(Welford算法):
// 不需要存储所有历史数据,O(1)空间
count += 1
delta = x - mean
mean += delta / count
M2 += delta * (x - mean)
variance = M2 / (count - 1)
实际计算示例:
某用户过去30天日均交易额 μ = ¥2,000,标准差 σ = ¥500
今天交易额 x = ¥5,200
Z = (5200 - 2000) / 500 = 6.4 → 严重异常!
决策:
Z = 2.5 → 轻度告警(加入监控列表)
Z = 4.0 → 中度告警(限制大额交易)
Z = 6.4 → 高度告警(冻结账户+人审)
优点:简单、快速、可解释 缺点:假设正态分布,对偏态数据效果差(交易金额通常右偏) 适用:交易金额异常、登录频率异常 改进:对偏态数据先做log变换再算Z-Score
2.2 IQR(四分位距)
IQR = Q3 - Q1
轻度异常: x < Q1 - 1.5×IQR 或 x > Q3 + 1.5×IQR
重度异常: x < Q1 - 3×IQR 或 x > Q3 + 3×IQR
优势:对偏态分布更鲁棒(不假设正态),不受极端值影响
2.3 Benford定律
自然产生的数据中,首位数字的分布不均匀:
P(d) = log₁₀(1 + 1/d)
d | 1 2 3 4 5 6 7 8 9
P | 30.1% 17.6% 12.5% 9.7% 7.9% 6.7% 5.8% 5.1% 4.6%
应用场景:
- 发票金额造假检测(人为编造的数字不服从Benford)
- 财务数据审计
- 交易金额真实性验证
完整计算示例:
某商户1000笔交易的首位数字分布:
d | 期望(Benford) | 期望笔数 | 实际笔数 | 差异
1 | 30.1% | 301 | 285 | -16
2 | 17.6% | 176 | 168 | -8
3 | 12.5% | 125 | 120 | -5
4 | 9.7% | 97 | 95 | -2
5 | 7.9% | 79 | 82 | +3
6 | 6.7% | 67 | 65 | -2
7 | 5.8% | 58 | 55 | -3
8 | 5.1% | 51 | 48 | -3
9 | 4.6% | 46 | 82 | +36 ← 首位9异常多!
卡方检验:
χ² = (-16)²/301 + (-8)²/176 + ... + (36)²/46
= 0.85 + 0.36 + ... + 28.17 = 32.4
df = 8, α = 0.05 时临界值 = 15.51
χ² = 32.4 > 15.51 → 拒绝原假设 → 分布异常!
首位9出现82次(期望46次) → 可能大量虚构 ¥9XX 的交易
检验方法:卡方检验对比实际首位数字分布 vs Benford分布
- χ² = Σ (O_i - E_i)² / E_i
- 若 p-value < 0.05 → 分布异常,可能存在造假
- 还可配合二次位数字检验(Second Digit Test)增加可信度
2.4 马氏距离
D_M = √((x-μ)ᵀ Σ⁻¹ (x-μ))
vs 欧氏距离:考虑了变量之间的相关性 直觉:如果收入和消费高度相关,一个高收入低消费的人比欧氏距离暗示的更"异常"
三、机器学习异常检测
3.1 Isolation Forest(面试高频)
核心思想:异常点更容易被"隔离"。
算法步骤:
1. 随机选择一个特征
2. 在该特征的最大值和最小值之间随机选一个分割点
3. 递归分割,直到每个数据点被隔离或达到最大深度
4. 异常点的平均路径长度更短
异常分数:
s(x, n) = 2^(-E(h(x)) / c(n))
其中:
- h(x) = 样本x的平均路径长度
- c(n) = 2H(n-1) - 2(n-1)/n(归一化因子)
- H(i) = ln(i) + 0.5772(欧拉常数)
score ≈ 1 → 异常
score ≈ 0.5 → 正常
score < 0.5 → 非常正常(密集区域)
为什么异常点路径短?
正常点:在密集区域,需要多次分割才能隔离
┌───────────────┐
│ · · · · · · · │ 需要7次分割
│ · · ·[x]· · · │ 才能隔离x
│ · · · · · · · │
└───────────────┘
异常点:在稀疏区域,很快就被隔离
┌───────────────┐
│ · · · · · · · │
│ · · · · · · · │ 只需2次分割
│ │ 就能隔离x
│ [x] │
└───────────────┘
优点:
- 不需要标签(无监督)
- 线性时间复杂度 O(n·log(n))
- 高维数据友好(随机选特征)
- 不假设数据分布
参数:
n_estimators: 树的数量(通常100-300)max_samples: 每棵树的采样大小(通常256)contamination: 预估异常比例
3.2 LOF(Local Outlier Factor)
核心思想:比较一个点与其K近邻的局部密度。
LOF(x) = Σ(邻居的密度 / x的密度) / K
LOF ≈ 1 → 密度与邻居相当(正常)
LOF >> 1 → 密度远低于邻居(异常)
LOF << 1 → 密度远高于邻居(核心点)
vs Isolation Forest:LOF能检测"局部异常"——在全局不异常但在局部异常的点。
3.3 AutoEncoder 异常检测
原理:用正常数据训练AutoEncoder,异常数据的重构误差会很大。
正常数据:
输入 x → Encoder → 压缩表示 z → Decoder → 重构 x̂
重构误差小:||x - x̂||² ≈ 0
异常数据:
输入 x → Encoder → 压缩表示 z → Decoder → 重构 x̂
重构误差大:||x - x̂||² >> 阈值
异常分数 = ||x - Decoder(Encoder(x))||²
架构选择:
- 简单AE:Dense层,适合结构化数据
- CNN-AE:适合图像/时序数据
- VAE(变分AE):概率化,能给出异常概率分布
- LSTM-AE:适合交易序列
优势:能捕捉复杂非线性模式 劣势:需要大量正常数据训练,训练成本高
3.4 One-Class SVM
- 只用正常样本训练,学习正常数据的边界
- 超出边界即为异常
- 适用:欺诈样本极少或没有的场景
- 核函数选择:RBF核最常用
3.5 异常检测算法选型指南
| 场景 | 推荐算法 | 原因 |
|---|---|---|
| 单维度金额异常 | Z-Score / IQR | 简单、快、可解释 |
| 财务数据审计 | Benford定律 | 专门检测人为编造 |
| 多维度无标签 | Isolation Forest | 不需要标签、高维友好 |
| 局部密度异常 | LOF | 能检测"相对异常" |
| 复杂非线性模式 | AutoEncoder | 捕捉深层结构 |
| 极少标签 | One-Class SVM | 只需正常样本 |
| 交易序列 | LSTM-AE | 捕捉时序模式 |
| 团伙关联 | GNN + 社区发现 | 利用图结构 |
组合策略(生产环境推荐):
实时层(毫秒级):
Z-Score(快速粗筛) + Isolation Forest(无监督异常) + 规则引擎
准实时层(分钟级):
图社区发现(团伙检测) + 资金链追踪
离线层(T+1):
AutoEncoder重训 + GNN图模型 + Benford审计
融合策略:
final_score = w1×rule_score + w2×iforest_score + w3×model_score
权重根据历史表现动态调整
3.6 实际效果对比(某支付平台数据)
| 方法 | Precision@100 | Recall@1% | 延迟 |
|-------------------|---------------|-----------|---------|
| 纯规则 | 45% | 35% | <1ms |
| Z-Score | 52% | 42% | <1ms |
| Isolation Forest | 68% | 58% | ~5ms |
| XGBoost(有监督) | 82% | 75% | ~3ms |
| AutoEncoder | 71% | 62% | ~10ms |
| 规则+IF+XGBoost | 88% | 82% | ~8ms |
| +图分析(准实时) | 93% | 89% | ~3min |
结论:
- 单一方法天花板在70%左右
- 多方法融合能达到90%+
- 加入图分析后团伙欺诈召回率提升显著
四、图分析与团伙欺诈
4.1 为什么需要图分析?
个体看正常,群体看异常:
个体视角:
账户A:交易3笔,金额正常 ✅
账户B:交易2笔,金额正常 ✅
账户C:交易4笔,金额正常 ✅
图视角:
A ──转账──→ D
B ──转账──→ D ← D是资金汇集点!
C ──转账──→ D
而且A/B/C注册IP相同、注册时间相近 → 团伙欺诈
4.2 构建关系图
节点:用户/账户/设备/IP/手机号 边:
- 转账关系(资金流)
- 共用设备(同一设备指纹)
- 共用IP(相同登录IP)
- 共用手机号/邮箱
- 申请关联(紧急联系人关系)
4.3 社区发现算法
Louvain算法(最常用):
核心思想:最大化模块度Q
Q = (1/2m) Σ [A_ij - k_i·k_j/(2m)] δ(c_i, c_j)
其中:
A_ij = 边权重
k_i = 节点i的度
m = 总边数
δ = 同社区为1,否则为0
算法步骤:
1. 每个节点初始为一个社区
2. 对每个节点,尝试移入邻居的社区,选模块度增益最大的
3. 将社区压缩为超级节点,重复步骤2
4. 直到模块度不再增加
时间复杂度:O(n·log(n)),适合大规模图
Label Propagation:
- 每个节点"投票"加入邻居中最多的标签
- 迭代直到稳定
- 优点:简单、快速;缺点:结果不稳定
4.4 中心性分析
| 指标 | 含义 | 应用 |
|---|---|---|
| 度中心性 | 连接数最多 | 识别活跃的转账节点 |
| 介数中心性 | 最多最短路径经过 | 识别资金中转枢纽 |
| PageRank | 被重要节点指向的节点更重要 | 识别资金网络中的关键角色 |
| 接近中心性 | 到所有节点距离最短 | 识别信息/资金快速扩散源 |
4.5 图神经网络(GNN)
GCN(Graph Convolutional Network):
核心公式:
H^(l+1) = σ(D̃^(-½) Ã D̃^(-½) H^(l) W^(l))
直觉:
每个节点的新表示 = 邻居表示的加权平均 × 可学习的权重
图示:
节点A的特征 = f(A自身特征, B的特征, C的特征, ...)
↑ ↑
自身信息 邻居信息聚合
GraphSAGE(可扩展):
1. 采样K个邻居(不是全部邻居)
2. 聚合邻居特征(mean/max/LSTM)
3. 拼接自身特征 + 聚合结果
4. 通过神经网络变换
优点:可以处理新节点(归纳式学习),适合大图
在反欺诈中的应用:
- 输入:节点特征(交易历史) + 图结构(转账关系)
- 输出:每个节点的欺诈概率
- 优势:同时利用个体特征和关系结构
4.6 资金链追踪
典型洗钱模式:
1. 放置(Placement): 大额资金拆分为多笔小额
2. 分层(Layering): 多次转账混淆来源
3. 整合(Integration): 汇集到最终受益人
检测方法:
- BFS/DFS遍历资金流向
- 资金拆分模式检测(一进多出)
- 资金汇聚模式检测(多进一出)
- 环形交易检测(A→B→C→A)
- 最短路径分析(资金从来源到目的的最短路径)
五、序列建模与行为分析
5.1 隐马尔可夫模型(HMM)
状态:正常(N) / 可疑(S) / 欺诈(F)
观测:交易类型 × 金额范围 × 时段
转移概率示例:
P(N→N) = 0.95 P(N→S) = 0.04 P(N→F) = 0.01
P(S→N) = 0.30 P(S→S) = 0.50 P(S→F) = 0.20
P(F→N) = 0.05 P(F→S) = 0.15 P(F→F) = 0.80
应用:检测用户行为状态转变
正常用户突然进入"可疑"状态 → 告警
5.2 LSTM/GRU 序列检测
输入:交易序列 [t1, t2, t3, ..., tn]
每个t包含:(金额, 类型, 商户, 时间间隔, 设备, 位置)
模型:LSTM → Dense → Sigmoid(欺诈概率)
优势:
- 捕捉长期依赖(几周前的异常与当前交易的关联)
- 自动学习时序模式
训练方式:
方式1:监督学习(有标签)
方式2:用正常序列训练,异常序列预测概率低 → 重构误差法
5.3 Transformer 在欺诈检测中的应用
Self-Attention 的威力:
传统LSTM:只能"从左到右"看序列
t1 → t2 → t3 → ... → t100(要处理100步才能关联t1和t100)
Transformer:直接关联任意两笔交易
t1 ←──────────────────→ t100(一步就能关联)
Attention(Q, K, V) = softmax(QK^T / √d_k) × V
直觉:
第100笔交易在"看"所有历史交易时,
给第1笔分配了0.35的注意力权重 → 说明第1笔与第100笔高度相关
→ 例如:第1笔开通新支付方式,第100笔利用该方式大额转账
可解释性优势:
Attention权重矩阵直观显示"模型认为哪些历史交易最可疑"
→ 可以向审核员展示:为什么模型认为这笔交易可疑
- 位置编码保留时序信息
- 在大规模序列数据上性能优于LSTM
- 实践中常用:TabTransformer(结构化数据)、FT-Transformer
5.4 会话分析(行为生物特征)
人类操作特征:
- 打字速度不均匀(思考→快速输入→停顿)
- 鼠标轨迹有曲率(不是直线移动)
- 页面停留时间有变化
- 操作间隔不规律
机器/脚本操作特征:
- 速度过于均匀
- 鼠标直线移动
- 操作间隔过于规律
- 页面停留极短
六、类别不平衡处理(必考)
6.1 问题本质
样本分布:
正常交易: 99.9% (999,000笔)
欺诈交易: 0.1% (1,000笔)
如果模型全部预测为"正常":
Accuracy = 99.9% ← 看起来很好,但一个欺诈都没抓到!
6.2 数据层面
SMOTE(合成少数类过采样):
算法:
1. 对每个少数类样本x,找K个最近邻
2. 随机选一个近邻x_nn
3. 在x和x_nn之间随机插值:x_new = x + rand(0,1) × (x_nn - x)
优点:生成多样性样本,不是简单复制
缺点:可能生成噪声样本(在边界区域)
ADASYN:在难分类区域生成更多样本
随机欠采样:简单丢弃多数类样本
- 快速但会丢失信息
- Tomek Links:删除最接近边界的多数类样本
6.3 算法层面
代价敏感学习:
不同错误的代价不同:
漏放一个欺诈(FN)= 损失 ¥10,000
误杀一个正常(FP)= 损失 ¥10(客户投诉成本)
sample_weight: 欺诈样本权重 = 1000(与代价比成正比)
Focal Loss:
FL(p_t) = -α_t × (1 - p_t)^γ × log(p_t)
γ=0 → 退化为标准交叉熵
γ=2 → 简单样本(p_t接近1)的权重降低100倍
直觉:让模型把注意力放在"难分类"的样本上
EasyEnsemble:
1. 从多数类中随机采样N次,每次采样数量=少数类数量
2. 每次采样+全部少数类 → 训练一个子模型
3. N个子模型集成(平均/投票)
优点:利用了所有多数类数据,又平衡了比例
6.4 评估层面
不要用Accuracy!
正确的指标:
├── AUC-ROC:排序能力(不受阈值影响)
├── AUPRC:在不平衡场景比AUC更有意义
├── F1-Score:精确率和召回率的调和平均
├── Precision@K:Top K预警中有多少真欺诈
└── 混淆矩阵:直接看TP/FP/FN/TN
业务指标:
├── 拦截率(Recall):欺诈中被拦截的比例
├── 误杀率(FPR):正常中被误拦的比例
├── 资损率:实际欺诈损失 / 总交易额
└── 人审效率:每100个告警中有多少真欺诈
七、对抗学习与概念漂移
7.1 欺诈演化现象
规则:"单笔 > ¥50,000 触发人审"
欺诈者适应:拆成多笔 ¥49,999
规则升级:"同设备1小时内累计 > ¥100,000 触发"
欺诈者适应:换设备/用代理IP
→ 规则和欺诈者的"猫鼠游戏"永远不会结束
→ 需要模型持续学习和对抗
7.2 概念漂移(Concept Drift)
类型:
突变型(Sudden):某天开始新型欺诈爆发
──────┐
└────────
渐变型(Gradual):欺诈模式缓慢演化
──────────────
────────────
周期型(Recurring):节假日欺诈模式回归
╱╲ ╱╲ ╱╲ ╱╲
增量型(Incremental):微小持续变化
────────────────────
检测方法:
- PSI:Population Stability Index(模型输入分布变化)
- DDM:Drift Detection Method(监控错误率变化)
- ADWIN:自适应窗口(动态调整检测窗口大小)
- Page-Hinkley:累积和检测均值变化
7.3 GAN对抗训练
Generator(生成器):生成"逼真"的欺诈交易
Discriminator(判别器):区分真实交易 vs 生成交易
训练流程:
1. 用真实欺诈数据训练初版Generator
2. Generator生成新型"欺诈交易"
3. Discriminator同时学习识别真实欺诈和生成欺诈
4. Generator根据Discriminator反馈改进,生成更"逼真"的欺诈
5. 迭代对抗 → Discriminator越来越强
目标函数:
min_G max_D V(D,G) = E[log D(x)] + E[log(1 - D(G(z)))]
实际应用场景:
- 数据增强:少数类欺诈样本不足时,用GAN生成补充
- 鲁棒性测试:用Generator模拟未来可能的新型欺诈,测试模型是否能防住
- Red Team演练:安全团队用GAN生成对抗样本,验证系统防护能力
7.4 在线学习
传统模型:训练 → 部署 → 月度/季度重训
在线模型:每条新数据都更新模型参数
挑战:
1. 标签延迟:欺诈确认可能滞后数周
2. 灾难性遗忘:学新模式忘旧模式
3. 计算成本:需要持续训练
实践方案:
短期:规则热更新(分钟级)
中期:模型增量训练(每周)
长期:全量重训(每季度)
+ 人工案件反馈循环:
决策 → 人审确认 → 更新标签 → 喂回模型
八、反欺诈系统全景架构
┌─────────────────────────────────────────────────────────────┐
│ 反欺诈决策引擎 │
│ │
│ ┌─────────┐ ┌──────────┐ ┌──────────┐ ┌─────────────┐ │
│ │ 实时层 │ │ 准实时层 │ │ 离线层 │ │ 人工审核层 │ │
│ │ <50ms │ │ <5min │ │ T+1 │ │ 案件管理 │ │
│ │ │ │ │ │ │ │ │ │
│ │ 名单匹配│ │ 图分析 │ │ 模型训练 │ │ 人审工作台 │ │
│ │ 规则引擎│ │ 社区发现 │ │ 批量扫描 │ │ 标签回流 │ │
│ │ 模型推理│ │ 资金链追踪│ │ 报表报送 │ │ SLA管理 │ │
│ │ 特征提取│ │ 关联分析 │ │ 模型评估 │ │ 申诉处理 │ │
│ └─────────┘ └──────────┘ └──────────┘ └─────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 特征平台 │ │
│ │ 实时特征(Flink) + 离线特征(Spark) + Feature Store │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
各层分工
| 层 | 延迟 | 方法 | 检测类型 |
|---|---|---|---|
| 实时 | <50ms | 规则+ML模型+名单 | 已知模式+异常 |
| 准实时 | <5min | 图分析+社区发现 | 团伙+关联 |
| 离线 | T+1 | 全量扫描+模型训练 | 新模式发现+模型迭代 |
| 人工 | 小时-天 | 人工审核+标注 | 最终确认+反馈 |
九、真实案例分析
案例1:某银行信用卡盗刷检测
背景:
日均交易1000万笔,欺诈率0.05%(约5000笔)
方案迭代:
V1(纯规则):
- 境外交易+单笔>$500 → 告警
- 召回率30%,误杀率5%
V2(规则+评分卡):
- 加入用户历史行为偏离度
- 召回率55%,误杀率2%
V3(规则+XGBoost+实时特征):
- 加入近5分钟交易频次、地理位置跳跃、设备指纹变化
- 召回率78%,误杀率0.8%
V4(+图分析+GNN):
- 识别盗刷团伙关联(共用IP/设备/商户)
- 召回率89%,误杀率0.5%
关键特征(按重要性排序):
1. 近5分钟交易次数偏离度(Z-Score)
2. 地理位置跳跃距离/时间比(物理上不可能)
3. 设备指纹是否首次出现
4. 商户风险等级
5. 交易时段偏离(凌晨3点交易)
案例2:P2P平台薅羊毛检测
背景:
新用户注册送¥50红包,被羊毛党批量注册
检测信号:
个体层:
- 注册后立即完成最低门槛交易→提现
- 交易金额精确等于门槛值
- 设备信息异常(模拟器/改机工具)
群体层(图分析发现):
- 200个账户使用同一WiFi MAC
- 注册时间集中在1小时内
- 收款银行卡归属同一人
- 紧急联系人交叉引用
结果:
Louvain社区发现识别出47个羊毛党集群
冻结前挽损 ¥230万
十、工程落地要点
与 W3 风控引擎设计的关联
| W3 设计的组件 | 本篇的科学基础 |
|---|---|
| Rule Engine(规则引擎) | 统计异常检测方法 |
| ML Serving(模型推理) | Isolation Forest / AutoEncoder / GNN |
| Feature Store(特征平台) | 滑动窗口/EWMA/图特征 |
| Decision Orchestrator(决策编排) | 多层检测融合策略 |
| Case Management(案件管理) | 标签回流 + 在线学习 |
| Strategy Manager(策略管理) | 概念漂移检测 + 模型更新 |
关键工程决策
- 实时 vs 离线:交易风控用实时,AML用离线批量
- 规则 vs 模型:新场景先上规则(快),稳定后上模型(准)
- 标签延迟:Semi-supervised learning + 弱标签 + 人审反馈
- 可解释性:规则命中链 + SHAP值 → 满足监管和客户解释需求
标签延迟问题的解决方案
核心挑战:欺诈确认可能滞后数天到数周
┌──────────────────────────────────────────┐
│ 交易发生 欺诈确认 │
│ │ │ │
│ ├── 1小时后: 用户投诉(30%的欺诈) │
│ ├── 1天后: 银行通知(40%的欺诈) │
│ ├── 1周后: 对账发现(20%的欺诈) │
│ └── 1月后: 仲裁结果(10%的欺诈) │
│ │
│ → 训练时没有标签的"灰色地带"怎么办? │
└──────────────────────────────────────────┘
解决方案:
1. 半监督学习:少量已确认标签 + 大量未标签数据
- Label Propagation:从已标签样本向未标签传播
- Self-Training:模型预测高置信样本→加入训练集
2. 弱标签(Weak Supervision):
- 规则命中 → 弱正标签(可能是欺诈)
- 3个月无投诉 → 弱负标签(大概率正常)
- 用Snorkel框架管理多源弱标签
3. 延迟标签策略:
- 等待期模型:先用1小时内确认的标签训练"快模型"
- 追溯更新:7天后确认的标签用于训练"精准模型"
- 双模型融合:快模型实时决策,精准模型定期修正
十一、常见误区
| 误区 | 真相 |
|---|---|
| "规则比模型更准" | 规则只能检测已知模式,模型能发现未知模式 |
| "模型越复杂越好" | 可解释性在反欺诈中很重要(需向监管/客户解释) |
| "只看准确率" | 99.9%准确率可能只是因为正常样本占99.9% |
| "训练完就不用管了" | 欺诈者在持续演化,模型会退化 |
| "所有异常都是欺诈" | 异常≠欺诈,可能是正常的极端行为 |
| "图分析能解决一切" | 图分析计算量大,不适合毫秒级实时决策 |
十二、面试高频追问速查
| 追问 | 要点 |
|---|---|
| "你的模型AUC 0.95,为什么还有漏网之鱼?" | AUC是排序指标不是绝对指标;阈值设置是业务决策(召回率↑→误杀率↑);新型欺诈模式训练时不存在 |
| "如果欺诈率只有万分之一怎么训练?" | SMOTE过采样+代价敏感学习+EasyEnsemble;不要用Accuracy评估,用AUPRC |
| "你怎么知道模型过期了?" | PSI>0.25 或 KS下降>10% 或 业务指标(资损率)恶化 |
| "规则和模型冲突怎么办?" | 分优先级:名单>规则>模型;白名单直接放行;场景不同策略不同 |
| "怎么向客户解释为什么拦截?" | 规则命中链(哪条规则触发)+ SHAP值(哪个特征贡献最大);不能暴露模型细节 |
| "图分析怎么做到实时?" | 不做——图分析放准实时层(分钟级);实时层用预计算的图特征(度/PageRank) |
十三、延伸阅读
书籍:
- 《Fraud Analytics Using Descriptive, Predictive, and Social Network Techniques》Bart Baesens
- 《Outlier Analysis》Charu Aggarwal
论文:
- Isolation Forest (Liu, Ting, Zhou 2008)
- GraphSAGE (Hamilton, Ying, Leskovec 2017)
- Focal Loss (Lin et al. 2017)
- SMOTE (Chawla et al. 2002)
工具:
- scikit-learn(Isolation Forest/LOF/One-Class SVM)
- PyTorch Geometric(GCN/GraphSAGE)
- NetworkX(图分析)
- imbalanced-learn(SMOTE/ADASYN/EasyEnsemble)