Abd24205/fraud-detection-agent

GitHub: Abd24205/fraud-detection-agent

一个超越概率评分的端到端欺诈检测系统,通过结合预测模型、成本决策规则和 LLM 摘要将机器学习输出转化为可执行的风控决策。

Stars: 0 | Forks: 0

# 欺诈检测 Agent:预测 → 决策 → 行动 一个超越概率评分的端到端欺诈检测系统—— 它将模型输出转化为可执行、可由人工审核的决策。 大多数欺诈检测作品集项目(包括我直到现在的项目)都止步于 “这是一个预测欺诈的模型”。仅凭概率评分对任何下游环节都没有用处。 本项目构建了大多数项目跳过的两个层级: 1. **预测** — 模型标记异常交易 2. **决策** — 业务规则层决定哪些标记值得上报, 因为误报和漏报欺诈的成本是不同的 3. **行动** — LLM 将概率评分转化为人工审核员可以直接采取行动的 通俗易懂的案件摘要 本项目正在公开构建和记录。本 README 目前涵盖第 1 层和第 2 层;第 3 层将在构建完成后添加。 ## 数据集 [Kaggle 信用卡欺诈检测](https://www.kaggle.com/mlg-ulb/creditcardfraud) — 284,807 笔交易,492 笔被标记为欺诈(0.17%)。出于保密考虑,特征经过了 PCA 转换; `Amount` 和 `Time` 是仅有的原始特征。 ## 第 1 层:预测模型 ### 为什么准确率在这里是错误的指标 由于欺诈交易仅占 0.17%,一个将所有交易都预测为“非欺诈”的模型 准确率将达到 99.83%,但却抓不到任何欺诈。本项目改用 **Precision、Recall 和 PR-AUC**——这是应对极端类别不平衡的标准指标。 ### 方法 - **基线模型:Logistic Regression**(经过类别权重调整)——一个简单、真实的 对比起点。 - **主模型:XGBoost**(通过 `scale_pos_weight` 进行权重调整)——在研究了 原始 XGBoost 论文中关于梯度提升和正则化的方法后选定。 - **不平衡处理:**采用类别权重调整,而非过采样(SMOTE)。 SMOTE 在该数据集中很常见,但如果在训练/测试集划分前应用,会有数据泄露的风险;类别权重调整则能在没有这种风险的情况下取得不错的结果。 - **数据集划分:**80/20 分层训练/测试集划分,在两个集合中均保留真实的欺诈比例。 ### 结果 | 模型 | Precision | Recall | PR-AUC | |-----------------------|-----------|--------|--------| | Logistic Regression | 0.039 | 0.918 | 0.671 | | XGBoost | 0.882 | 0.837 | 0.880 | **权衡:**基线模型抓到的欺诈略多一些(92% 对 84% 的 recall), 但代价是每约 5.7 万笔交易中出现 2,199 次误报——这在实际操作中完全 无法使用,因为审核员根本无法处理如此庞大的噪声。XGBoost 以少量的 recall 换取了 20 倍的误报减少(11 对 2,199),这反映在 PR-AUC 几乎高出 21 个百分点(0.88 对 0.67)。 ## 第 2 层:基于成本的决策规则 仅凭概率评分无法告诉你该*做什么*。第 2 层通过权衡每种结果的现实成本,将该评分转化为决策:漏报欺诈将造成全额交易损失,而误报仅消耗审核员的时间。 ### 阈值微调 将分类阈值从 0.05 扫描至 0.90 后发现,与默认的 0.5 截止点相比仅有微小的提升——最佳阈值(0.80)总共仅节省了 **$10**。这是因为在当前的成本假设下($5/次审核),假阴性成本(漏报的欺诈金额)大约是假阳性成本的 30-40 倍,使得决策在正常范围内对阈值的选择不太敏感。 ### 测试业务规则安全网 作为纯阈值微调的替代方案,我们测试了两种基于规则的方法: | 方法 | 总成本 | 结果 | |---|---|---| | 仅使用模型(默认 0.5) | $1,998.10 | 基线 | | 仅使用模型(微调后,0.80) | $1,988.10 | 微小提升 $10 | | 始终标记 > $500 的交易 | $9,644.10 | 差了 5 倍——大量针对合法高额购买的误报淹没了审核员 | | 仅在模型显示出任何怀疑(prob ≥ 0.01)时标记 > $500 的交易 | $2,038.10 | 依然比基线差,且未捕获最大的漏报 | **发现:**这两种基于规则的安全网都没有改进仅使用模型的效果。 ### 真正的盲区,而非微调问题 对假阴性的进一步调查表明,有 3 起高额欺诈案件($635、$529、$520——占漏报欺诈总额的 87%)在模型置信度极低(0.0001–0.0005)的情况下被漏掉。这意味着模型对这些案件并非*不确定*——而是**确信地判错了**。任何阈值或基于金额的规则都无法解决这个问题,因为模型可用的特征(PCA 转换后的特征 + Amount/Time)显然不包含能将这些交易与正常交易区分开来的信号。 ### 第 2 层决策 鉴于上述证据,部署的决策规则仅仅是**模型的默认 0.5 阈值**——我们测试了额外的复杂性(微调的阈值、基于金额的规则),但证明其不起作用。此处将 3 起高价值的盲区漏报记录为已知的局限性,并将其作为未来工作的候选方向,计划使用本数据集中不包含的额外特征(例如,交易速度、商户类别)。 ## 项目结构 \``` fraud-detection-agent/ ├── notebooks/ │ ├── 01_layer1_model_training.ipynb │ └── 02_layer2_decision_rules.ipynb ├── models/ # 保存的已训练模型 (.pkl) ├── results/ # 保存的指标 (.json) ├── data/ # 数据集(未提交——见 .gitignore) └── README.md \``` ## 状态 - [x] 第 1 层:预测模型(基线模型 + XGBoost) - [x] 第 2 层:基于成本的决策规则(已测试,发现并记录了局限性) - [ ] 第 3 层:LLM 生成的案件摘要
标签:C2, NoSQL, 逆向工具