sahandyousefi/Anomaly-Detection-Hyperparameter-Tuning
GitHub: sahandyousefi/Anomaly-Detection-Hyperparameter-Tuning
基于XGBoost的金融交易欺诈检测系统,通过欠采样、特征工程和阈值优化实现94.32%准确率和86%欺诈召回率,并使用SHAP值解释模型决策。
Stars: 0 | Forks: 0
# 使用 XGBoost 和超参数调优的金融欺诈检测
一个应用 XGBoost 分类器在大型支付数据集上检测欺诈性金融交易的机器学习项目。该流程涵盖数据预处理、通过欠采样处理类别不平衡问题、领域驱动的特征工程、带阈值优化的模型训练、超参数调优,以及使用 SHAP 值进行模型可解释性分析。
## 业务目标
金融欺诈是银行业和支付行业日益关注的问题。传统的基于规则的欺诈检测系统无法有效扩展,产生高误报率并遗漏大量欺诈活动。
该项目的目标是开发一个自动化的、基于机器学习的欺诈检测系统,该系统能够:
- 实时准确检测欺诈交易
- 通过减少漏报欺诈案例(假阴性)来最大程度减少经济损失
- 通过控制误报来减少不必要的交易拦截
一个强大的欺诈检测系统不仅仅是捕获欺诈——它是在为合法用户提供无缝体验的同时最小化风险。
## 数据集
使用的数据集是 **PaySim 合成金融交易数据集**(`PS_20174392719_1491204439457_log.csv`),来源于 Kaggle。PaySim 基于一家金融公司的真实交易日志模拟移动货币交易。
| 特征 | 描述 |
|---|---|
| `step` | 时间单位(1 步 = 1 小时);涵盖 30 天的交易 |
| `type` | 交易类型:CASH_IN、CASH_OUT、DEBIT、PAYMENT、TRANSFER |
| `amount` | 以本地货币计的交易金额 |
| `nameOrig` | 发起方客户 ID |
| `oldbalanceOrg` | 交易前发起方余额(已删除) |
| `newbalanceOrig` | 交易后发起方余额(已删除) |
| `nameDest` | 目标客户或商户 ID |
| `oldbalanceDest` | 交易前目标方余额(已删除) |
| `newbalanceDest` | 交易后目标方余额(已删除) |
| `isFraud` | 目标变量:1 = 欺诈,0 = 合法 |
| `isFlaggedFraud` | 大额转账的系统标记(分析后已删除) |
余额列由于高度共线性和噪声而被删除。`isFlaggedFraud` 在相关性分析显示其预测价值接近零后被删除(与 `isFraud` 的相关性 = 0.044)。
## 方法论
### 1. 数据预处理
- 验证了空值和重复项——数据集干净,无缺失条目
- 删除了 `oldbalanceOrg`、`newbalanceOrig`、`oldbalanceDest`、`newbalanceDest`,因为它们增加了噪声而没有提高预测能力
- 对 `type` 列应用了标签编码(类别转数值)
- 优化了数据类型以减少内存消耗:
- `step` 转换为 `int32`
- `isFraud`、`isFlaggedFraud` 转换为 `int8`
- `amount` 转换为 `float32`
- 类型优化后内存使用量明显减少
**类别不平衡处理**
数据集严重不平衡——合法交易远远多于欺诈交易。应用了随机欠采样,`sampling_strategy=0.1`,得到 10:1 的非欺诈与欺诈比例,使训练集更易于管理且分类器更加平衡。
### 2. 特征工程
设计了以下领域驱动的特征以提高欺诈信号检测能力:
| 特征 | 描述 |
|---|---|
| `high_amount` | 二元标志:如果交易金额超过 200,000 则为 1 |
| `orig_avg_amount` | 每个发起账户的平均交易金额 |
| `suspicious_amount` | 二元标志:如果金额超过发起方历史平均值的 5 倍则为 1 |
| `orig_tx_count` | 每个发起账户的交易总数 |
| `dest_tx_count` | 每个目标账户的交易总数 |
| `orig_tx_std` | 发起账户发送金额的标准差 |
| `dest_tx_std` | 目标账户接收金额的标准差 |
| `is_transfer` | 二元标志:如果交易类型为 TRANSFER 则为 1 |
| `is_cashout` | 二元标志:如果交易类型为 CASH_OUT 则为 1 |
| `hour_of_day` | 从 `step` 提取的小时(step % 24) |
| `is_merchant` | 二元标志:如果目标 ID 以 'M' 开头(商户)则为 1 |
`isFlaggedFraud` 在分析后被删除,分析显示绝大多数真实欺诈案例(数千笔交易)从未被遗留的基于规则的系统标记,确认其缺乏预测效用。
### 3. 模型开发
**算法:XGBoost 分类器**
选择 XGBoost(极端梯度提升)是因为它在表格型、不平衡分类问题上的出色表现、稀疏特征的原生处理能力以及内置的特征重要性排序。
**初始模型配置:**
| 参数 | 值 |
|---|---|
| `n_estimators` | 750 |
| `learning_rate` | 0.3 |
| `max_depth` | 7 |
| `random_state` | 42 |
**训练集-测试集划分:** 80% 训练 / 20% 测试,按目标变量分层。
**决策阈值调整**
不使用默认的 0.5 概率阈值,而是将分类阈值降低到 **0.15** 以优先考虑召回率——确保捕获更多欺诈交易,代价是受控的误报增加。在欺诈检测情境中,这是正确的权衡。
### 4. 超参数调优
使用 XGBoost 内置的 `plot_importance` 函数绘制特征重要性分数,以识别和移除低信号特征。确认 `isFlaggedFraud` 是重要性最低的特征,并在最终模型重新训练前将其移除。
在特征剪枝和阈值调整后重新训练最终模型,得到了以下记录的性能指标。
### 5. 最终模型性能
**准确率:94.32%**
模型正确分类了 94.32% 的所有交易。然而,在欺诈检测中,由于类别不平衡,仅靠准确率是不够的——欺诈类的召回率和精确率是主要评估标准。
**混淆矩阵:**
| | 预测非欺诈 | 预测欺诈 |
|---|---|---|
| 实际非欺诈 | 15,636(真阴性) | 790(假阳性) |
| 实际欺诈 | 236(假阴性) | 1,407(真阳性) |
**分类报告:**
| 指标 | 非欺诈 (0) | 欺诈 (1) | 宏平均 |
|---|---|---|---|
| 精确率 | 0.99 | 0.64 | 0.81 |
| 召回率 | 0.95 | 0.86 | 0.90 |
| F1 分数 | 0.97 | 0.73 | 0.85 |
**为什么召回率是优先指标**
在欺诈检测中,假阴性(漏报欺诈)的代价远比假阳性(错误标记合法交易)高得多:
- 被错误标记的用户可以验证身份并以最小干扰恢复交易
- 漏报的欺诈案例会导致财务损失未被察觉,并可能 enable 重复滥用
在欺诈类上实现 **86% 的召回率**意味着模型成功识别了每 100 个真实欺诈案例中的 86 个——对于在高度不平衡的真实世界数据上运行的金融欺诈检测系统来说,这是一个强有力的结果。
### 6. 模型可解释性——SHAP 分析
使用 `shap` 库计算 SHAP(SHapley 加性解释)值,以解释个体和总体模型预测。
**SHAP 摘要图的关键发现:**
- `amount` 是最具影响力的特征。高交易金额(红色)强烈增加预测的欺诈概率,而小金额(蓝色)降低欺诈概率。
- `step`(交易时间)有混合但显著的影响,表明欺诈倾向于在特定时间窗口内聚集——与有组织的欺诈行为一致。
- `type`(交易类型)有重要意义,TRANSFER 和 CASH_OUT 交易类型与更高的欺诈风险相关。
SHAP 分析确认,模型的决策基于经济上可解释的信号而非虚假相关性——这是在受监管的金融环境中部署的重要特性。
## 关键发现
- 遗留的 `isFlaggedFraud` 系统标记与实际欺诈的相关性接近零(0.044),且数千个真实欺诈案例从未被基于规则的系统标记——突出了传统方法的不足。
- 自定义工程特征,特别是 `suspicious_amount`(用户历史平均值的 5 倍)和交易频率计数,显著提高了模型检测异常行为的能力。
- 将决策阈值从 0.50 降低到 0.15 显著提高了召回率,从较低的基线提高到 %,代价是可接受的误报增加。
- SHAP 分析确认,交易金额、时间和类型是欺诈预测的主要驱动因素,与金融犯罪检测领域的知识一致。
- 最终模型实现了 94.32% 的准确率和 86% 的欺诈召回率——适合作为第一道自动欺诈筛查系统部署,对标记的案例进行人工审查。
## 项目结构
```
Anomaly-Detection-Hyperparameter-Tuning/
|-- anomaly-detection-hyper-parameter-tuning.ipynb # Full pipeline: preprocessing, feature engineering, modeling, SHAP
|-- README.md
```
## 使用的技术
- Python 3
- Pandas、NumPy——数据操作、类型优化、特征工程
- Matplotlib、Seaborn——类别分布图、箱线图、性能可视化
- Scikit-learn——训练测试集划分、标签编码、RandomUnderSampler、分类指标
- imbalanced-learn——RandomUnderSampler 用于处理类别不平衡
- XGBoost——梯度提升分类器、特征重要性排序
- SHAP——模型可解释性和特征贡献分析
- Jupyter Notebook——交互式开发和文档
- Kaggle——数据集来源(PaySim)和执行环境
## 入门指南
1. 克隆仓库:
git clone https://github.com/sahandyousefi/Anomaly-Detection-Hyperparameter-Tuning.git
cd Anomaly-Detection-Hyperparameter-Tuning
2. 安装依赖:
pip install pandas numpy matplotlib seaborn scikit-learn imbalanced-learn xgboost shap jupyter
3. 从 Kaggle 下载 PaySim 数据集,将 `PS_20174392719_1491204439457_log.csv` 放在 input 目录中,或更新笔记本中的文件路径以匹配您的本地设置。
4. 启动笔记本:
jupyter notebook anomaly-detection-hyper-parameter-tuning.ipynb
## 作者
Sahand Yousefi
[GitHub](https://github.com/sahandyousefi) | [LinkedIn](https://www.linkedin.com/in/sahand-yousefi/)
标签:Apex, GridSearchCV, PaySim数据集, SHAP可解释性, XGBoost, 下采样, 二分类模型, 交易监控, 信用风险评估, 异常检测, 支付欺诈, 机器学习, 模型可解释性, 特征工程, 类别不平衡, 超参数调优, 逆向工具, 金融安全, 金融欺诈检测, 金融科技, 阈值优化