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, 下采样, 二分类模型, 交易监控, 信用风险评估, 异常检测, 支付欺诈, 机器学习, 模型可解释性, 特征工程, 类别不平衡, 超参数调优, 逆向工具, 金融安全, 金融欺诈检测, 金融科技, 阈值优化