NathPrashant/Credit_Card_Fraud_Detection
GitHub: NathPrashant/Credit_Card_Fraud_Detection
基于 Random Forest 分类器与地理/时间特征工程的信用卡欺诈交易检测项目。
Stars: 0 | Forks: 0
# 信用卡欺诈检测
使用基于 [Kaggle 信用卡交易欺诈检测数据集](https://www.kaggle.com/datasets/kartik2112/fraud-detection) 训练的有监督 **Random Forest** 分类器来检测欺诈性信用卡交易。
## 概述
本项目使用带标签的交易数据训练 `RandomForestClassifier`,以预测交易是否存在欺诈。关键工程特征包括持卡人家乡位置与商家位置之间的 haversine 距离,以及交易发生的小时和星期几。模型性能通过混淆矩阵、分类报告、ROC-AUC、精确率-召回率曲线和特征重要性进行评估。
## 项目结构
```
credit-card-fraud-detection/
├── data/
│ └── raw/ # train.csv and test.csv go here (not tracked in git)
├── notebooks/
│ └── main.ipynb # full pipeline: EDA, feature engineering, training, evaluation
├── src/
│ ├── train.py # data prep, model training, and evaluation
│ └── predict.py # load the trained model and score new transactions
├── models/
│ └── fraud_model.pkl # generated after training (not tracked in git)
├── outputs/
│ └── figures/ # saved plots (class distribution, confusion matrix, PR curve, etc.)
├── .gitignore
├── LICENSE
├── requirements.txt
└── README.md
```
## 数据集
从 [Kaggle](https://www.kaggle.com/datasets/kartik2112/fraud-detection) 下载 `train.csv` (`fraudTrain.csv`) 和 `test.csv` (`fraudTest.csv`),并将它们放在 `data/raw/` 目录下。该数据集是一个模拟数据,涵盖了 1000 名客户在 6 个月内跨 800 家商家的交易,并提供了预先划分好的训练/测试集。
本项目使用的关键列:
| 列名 | 描述 |
|---------------------------|-----------------------------------------------------|
| `trans_date_trans_time` | 交易时间戳 |
| `category` | 商家类别 |
| `amt` | 交易金额 |
| `gender` | 持卡人性别 |
| `state` | 持卡人所在州 |
| `lat`, `long` | 持卡人家乡坐标 |
| `city_pop` | 持卡人所在城市的人口 |
| `job` | 持卡人职业 |
| `merch_lat`, `merch_long`| 商家坐标 |
| `is_fraud` | 目标标签(0 = 合法,1 = 欺诈) |
该数据集本身并未提交到此存储库中——请参阅下方的[为什么数据集和模型没有包含在 git 中](#why-the-dataset-and-model-arent-in-git)。
## 安装
```
git clone https://github.com/NathPrashant/credit-card-fraud-detection.git
cd credit-card-fraud-detection
pip install -r requirements.txt
```
## 使用说明
1. 将 `train.csv` 和 `test.csv` 下载到 `data/raw/` 目录中。
2. 运行训练脚本:
python src/train.py
这将:
- 加载并对数据进行特征工程处理(包括 `distance_km`)
- 训练 `RandomForestClassifier`
- 打印混淆矩阵、分类报告和 ROC-AUC
- 将评估图表保存到 `outputs/figures/`
- 将训练好的模型、编码器和特征列表保存到 `models/fraud_model.pkl`
3. 对新交易进行评分:
# 从与 train.csv/test.csv 具有相同列的 CSV 进行批量评分
python src/predict.py --input data/raw/new_transactions.csv --output outputs/predictions.csv
# 对单笔交易进行评分
python src/predict.py --amt 250.0 --category shopping_net --gender F \
--city_pop 50000 --job Engineer --state CA \
--lat 37.77 --long -122.42 --merch_lat 40.71 --merch_long -74.01 \
--trans_date_trans_time "2024-03-15 23:41:00"
4. 或者,打开 `notebooks/main.ipynb` 以查看包含解释和内联图表的完整交互式流水线。
## 模型
- **算法:** Random Forest 分类器(使用 `class_weight="balanced_subsample"` 以处理类别不平衡问题)
- **关键工程特征:** `distance_km` —— 持卡人和商家位置之间的 haversine 距离,这通常是该数据集中最强的欺诈信号
- **评估指标:** 混淆矩阵、精确率、召回率、F1-score、ROC-AUC 和 PR-AUC(对于类别不平衡的数据,优先使用精确率-召回率而不是仅仅使用 ROC-AUC)
## 为什么数据集和模型没有包含在 git 中
大型 CSV 文件和训练好的模型二进制文件 (`.pkl`) 会使 git 存储库变得臃肿,并导致克隆速度变慢。它们已通过 `.gitignore` 被排除在外。请重新下载数据集并重新运行 `src/train.py`,以便在本地重新生成 `fraud_model.pkl`。
## 环境要求
- Python 3.9+
- pandas, numpy, matplotlib, seaborn, scikit-learn, joblib
有关确切的软件包,请参阅 `requirements.txt`。
## 许可证
本项目基于 MIT 许可证授权。请参阅 [LICENSE](LICENSE) 文件获取完整文本。
标签:Apex, 机器学习, 欺诈检测, 特征工程, 逆向工具, 金融风控, 随机森林