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, 机器学习, 欺诈检测, 特征工程, 逆向工具, 金融风控, 随机森林