Skip to content

F3. 欺诈检测实时决策

案例来源: Fraud-Detection-Handbook
决策类型: 交易风险拦截
方法论: 不平衡学习 + 集成模型 + 阈值优化
预计阅读时间: 15 分钟


1. 决策背景

业务场景

某支付公司日交易量 500 万笔,面临欺诈风险: - 欺诈率:0.5% (约 2.5 万笔/日) - 欺诈损失:¥50M/年 - 人工审核:50 人团队 (成本高) - 误报率:15% (用户体验差)

决策目标

  • 实时决策 (<100ms)
  • 欺诈识别率 > 90%
  • 误报率 < 5%
  • 减少人工审核 70%

2. 核心挑战

数据不平衡

正常交易:99.5%
欺诈交易:0.5%
比例:199:1

决策约束

  • 时效性: < 100ms
  • 可解释性: 拒绝需说明理由 (监管要求)
  • 准确性: 漏报成本¥2000/笔,误报成本¥50/笔

3. 决策框架

方法论选择

集成学习 + 不平衡处理:

数据采样 → 特征工程 → 集成模型 → 阈值优化 → 决策规则

技术方案: - 采样:SMOTE + 欠采样 - 模型:XGBoost + LightGBM 集成 - 阈值:成本敏感优化


4. 模型实现

特征工程

# 交易特征
features = {
    'transaction': ['amount', 'hour', 'day_of_week'],
    'user': ['avg_transaction', 'transaction_frequency', 'account_age'],
    'merchant': ['merchant_category', 'avg_fraud_rate'],
    'behavior': ['velocity_1h', 'velocity_24h', 'distance_from_home']
}

# 衍生特征
data['amount_ratio'] = data['amount'] / data['avg_transaction']
data['is_night'] = (data['hour'] >= 23) | (data['hour'] <= 5)
data['velocity_change'] = data['velocity_1h'] / data['velocity_24h']

不平衡处理

from imblearn.over_sampling import SMOTE
from imblearn.under_sampling import RandomUnderSampler

# SMOTE 过采样
smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X_train, y_train)

# 欠采样
rus = RandomUnderSampler(random_state=42)
X_final, y_final = rus.fit_resample(X_resampled, y_resampled)

集成模型

from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from sklearn.ensemble import VotingClassifier

# 基模型
xgb = XGBClassifier(scale_pos_weight=199, max_depth=6)
lgb = LGBMClassifier(class_weight='balanced', max_depth=6)

# 集成
ensemble = VotingClassifier(
    estimators=[('xgb', xgb), ('lgb', lgb)],
    voting='soft'
)

ensemble.fit(X_final, y_final)

阈值优化

from sklearn.metrics import precision_recall_curve

# 找到最优阈值
precision, recall, thresholds = precision_recall_curve(y_test, y_pred_proba)

# 成本函数
costs = []
for threshold, p, r in zip(thresholds, precision, recall):
    fn_cost = (1 - r) * fraud_count * 2000
    fp_cost = (1 - p) * normal_count * 50
    total_cost = fn_cost + fp_cost
    costs.append(total_cost)

optimal_threshold = thresholds[np.argmin(costs)]
# 结果:0.35 (而非默认 0.5)

5. 决策结果

模型性能

指标 目标 实际 达成
召回率 >90% 92%
精确率 >80% 85%
误报率 <5% 4.2%
AUC >0.95 0.97
决策时间 <100ms 45ms

业务影响

指标 实施前 实施后 改善
欺诈损失 ¥50M/年 ¥22M/年 -56%
误报数量 75,000/日 21,000/日 -72%
人工审核 50 人 15 人 -70%
用户投诉 500/月 120/月 -76%

ROI 分析

投入: - 系统开发:¥2M - 年度运营:¥0.5M

收益: - 欺诈损失减少:¥28M/年 - 人力成本节约:¥3.5M/年 - 总收益: ¥31.5M/年

ROI: 15 倍


6. 经验教训

成功因素

  1. ✅ 成本敏感学习 (而非准确率)
  2. ✅ 集成模型提升稳定性
  3. ✅ 阈值优化基于业务成本
  4. ✅ 实时特征工程 (<50ms)

踩坑记录

  1. ⚠️ 初期使用准确率指标 → 99.5% 但无法识别欺诈
  2. ⚠️ 阈值用默认 0.5 → 漏报率高
  3. ⚠️ 忽略特征时效性 → 决策超时

案例版本: v1.0 | 最后更新: 2026-06-03