Alexzhibin/transaction-fraud-detection
GitHub: Alexzhibin/transaction-fraud-detection
基于 LightGBM 的银行卡交易欺诈评分管线,集成了针对类别不平衡的特征工程、多维指标评估和 SHAP 可解释性分析。
Stars: 0 | Forks: 0
# transaction-fraud-detection
一个用于银行卡/支付交易的欺诈评分 pipeline:包含特征工程、一个处理严重类别不平衡的
gradient-boosted 模型,以及一个报告对欺诈至关重要指标的评估过程——排序质量和
在实际操作阈值下的精确率/召回率——外加用于解释每个评分驱动因素的 SHAP 分析。
技术栈:LightGBM, scikit-learn, SHAP, pandas。
## 关于数据
该 pipeline 在合成交易数据上运行 (`src/data.py`)。目前没有公开的
包含原始、未匿名化特征且可自由
重新分发的交易数据集——著名的 Kaggle 信用卡数据集经过了 PCA 匿名化,这恰好
掩盖了本项目想要展示的特征工程。因此,数据生成器生成的
交易数据,其欺诈信号反映了真实的银行卡/支付欺诈:境外交易
+ 新设备 + 远高于客户正常水平的金额、异常时段、高风险
商户类别,以及速度飙升,并带有足够的噪声使得各类别之间
存在重叠。若要在真实场景中使用,只需导入具有相同列的 CSV 文件并跳过
生成步骤即可。
## 设计说明
- 类别不平衡通过 LightGBM 的 `scale_pos_weight` 处理,而不是重采样,因此
训练分布保持不变,概率依然有意义。
- 报告的指标包括 ROC-AUC、PR-AUC、KS,以及在最佳 F1 阈值下的
精确率/召回率/F1。有意排除了准确率——在约 1.5% 的欺诈率下,“全判为非欺诈”
能得到 98.5% 的准确率,但这没有任何指导意义。
- 特征构建是无状态的:类别来自固定列表,因此训练和
测试会产生完全相同的列,没有拟合的编码器,也没有数据泄露。
- SHAP 提供了每个特征的归因。在受监管的金融领域,你通常需要为
每一笔被拒绝的交易提供理由,因此可解释性不是可选项。
## 结果
| metric | value |
|---|---|
| ROC-AUC | 0.949 |
| PR-AUC | 0.365 |
| KS | 0.767 |
| precision @ best-F1 threshold | 0.526 |
| recall @ best-F1 threshold | 0.320 |
保留 25% 作为测试集,欺诈率约为 1.5%。在 0.015 的基准率下,0.37 的 PR-AUC 大约是
随机基准线的 24 倍。SHAP 将评分的主要驱动因素排序为:金额与客户正常水平的对比、
境外交易、24 小时内的交易速度、异常时段和新设备——也就是说,模型还原了
构建数据时所围绕的模式 (`reports/shap_summary.png`)。
使用 `python -m src.train` 复现结果。
## 目录结构
```
src/
data.py synthetic transaction generator
features.py raw transactions -> model matrix
model.py LightGBM classifier (scale_pos_weight)
evaluate.py ROC-AUC / PR-AUC / KS / precision-recall
train.py generate -> split -> train -> evaluate -> save
explain.py SHAP summary
tests/ feature + metric unit tests
```
## 运行方式
```
pip install -r requirements.txt
python -m src.train # train + evaluate, writes reports/metrics.json
python -m src.explain # SHAP summary -> reports/shap_summary.png
pytest
```
## 接下来打算补充的功能
- 校准概率(等渗回归),使分数显示为实际的欺诈率。
- 根据真实的退款与审查成本矩阵,进行成本敏感的阈值选择,
而不是仅依赖最佳 F1。
- 基于时间的划分和特征漂移检查,因为欺诈模式会不断变化。
## License
MIT
标签:Apex, LightGBM, 数据科学, 机器学习, 模型可解释性, 欺诈检测, 资源验证, 逆向工具, 金融风控