mostafashazly7/fraud-detection-feature-engineering-pipeline
GitHub: mostafashazly7/fraud-detection-feature-engineering-pipeline
面向IEEE-CIS欺诈检测竞赛的大规模特征工程管道,专注于交易数据的预处理、内存优化和特征编码,为机器学习模型提供干净的输入数据。
Stars: 0 | Forks: 0
## 📌 问题陈述
金融欺诈检测是机器学习最重要的应用之一。**IEEE-CIS欺诈检测**竞赛提出了一个现实挑战:给定高度匿名化的金融交易数据,存在极端的类别不平衡和大量特征稀疏性,需要构建一个能够将原始数据准备成干净、一致且可用于模型训练的格式的管道。
本仓库提供了这个管道——一个生产级预处理和特征工程系统,设计用于处理超过**59万笔训练交易**以及关联的身份记录。**59万笔训练交易**以及关联的身份记录。
## 🗂️ 数据集概览
| 属性 | 详情 |
|---|---|
| 数据源 | [Kaggle — IEEE-CIS Fraud Detection (2018)](https://www.kaggle.com/c/ieee-fraud-detection) |
| 训练交易 | 590,540 行 |
| 测试交易 | 506,691 行 |
| 总特征数(原始) | 433 列 |
| 身份表行数 | ~144,000(通过 TransactionID 关联) |
| 原始数据集大小 | ~6 GB |
| 欺诈率 | ~3.5%(严重的类别不平衡) |
## 🧠 管道架构
```
Raw Data (6GB)
|
▼
┌─────────────────────────────────┐
| 1. Relational Merge |
| train_transaction + |
| train_identity → unified df |
└─────────────────────────────────┘
|
▼
┌─────────────────────────────────┐
| 2. Memory Optimization |
| dtype downcasting |
| float64 → float32 |
| int64 → int8/16/32 |
| Result: ~60% memory reduction |
└─────────────────────────────────┘
|
▼
┌─────────────────────────────────┐
| 3. Feature Engineering |
| • Frequency encoding (addr1) |
| • Label encoding (categoricals) |
| • Group-aware scaling |
| C-features → scaler_c |
| D-features → scaler_d |
| V-features → scaler_v |
| All amounts → min_max_scaler |
└─────────────────────────────────┘
|
▼
┌─────────────────────────────────┐
| 4. Inference Consistency |
| All encoders/scalers saved |
| as .pkl → applied identically |
| to test set |
└─────────────────────────────────┘
|
▼
ML-Ready Dataset ✅
```
## ⚙️ 关键技术决策
### 1. 内存优化
通过向下转换数值数据类型,内存使用量减少了约**60%**,使得在标准硬件上处理完整的6GB数据集成为可能,而不会耗尽RAM。
### 2. 分组缩放
不是在所有特征上应用单一缩放器,而是对不同的特征组分别进行缩放——符合IEEE-CIS特征命名规范:
| 缩放器 | 特征组 | 描述 |
|---|---|---|
| `scaler_c.pkl` | C1–C14 | 计数特征 |
| `scaler_d.pkl` | D1–D15 | 时间差特征 |
| `scaler_v.pkl` | V1–V339 | Vesta工程特征 |
| `min_max_scaler.pkl` | TransactionAmt | 原始交易金额 |
### 3. 频率编码
对于像`addr1`这样的高基数地理特征,没有使用标签编码,而是使用了**频率编码**——用该值在数据集中出现的频率替换它。这保留了统计信号,同时避免了创建任意的序数关系。
保存为`addr1_counts.pkl`。
### 4. 推理一致性
每个转换对象(编码器、缩放器、频率映射)都作为`.pkl`文件持久化,并在**测试笔记本中完全相同地应用**。这是一种生产级模式,可以消除数据泄漏并确保可重现性。**测试笔记本中完全相同地应用**。这是一种生产级模式,可以消除数据泄漏并确保可重现性。
## 📊 管道结果
| 指标 | 数值 |
|---|---|
| 内存减少 | 通过dtype向下转换减少约60% |
| 处理的特征 | 433个原始 → 干净的数值矩阵 |
| 保存的工件 | 5个`.pkl`文件(编码器 + 缩放器) |
| 欺诈类别比例 | 3.5%正面 / 96.5%负面 |
| 笔记本 | 训练管道 + 测试管道(分开) |
## 📁 仓库结构
```
fraud-detection-feature-engineering-pipeline/
│
├── Train_Data_Preprocessing.ipynb # Full training pipeline
├── Test_Data_Preprocessing.ipynb # Inference pipeline (reuses .pkl artifacts)
├── Train_Data_Preprocessing.pdf # Notebook export with all outputs
├── Test_Data_Preprocessing.pdf # Notebook export with all outputs
│
├── label_encoders_dict.pkl # Categorical → numeric mappings
├── min_max_scaler.pkl # Scaler for TransactionAmt
├── scaler_c.pkl # Scaler for C-feature group
├── scaler_d.pkl # Scaler for D-feature group
├── scaler_v.pkl # Scaler for V-feature group
├── addr1_counts.pkl # Frequency map for addr1 encoding
│
├── .gitignore # Excludes 6GB+ raw CSVs
└── README.md
```
## 🚀 如何运行
### 1. 获取数据集
从Kaggle下载:[IEEE-CIS Fraud Detection](https://www.kaggle.com/c/ieee-fraud-detection/data)
将这些文件放在您的项目文件夹中:
- train_transaction.csv
- train_identity.csv
- test_transaction.csv
- test_identity.csv
### 2. 安装依赖
```
pip install pandas numpy scikit-learn matplotlib
```
### 3. 按顺序运行笔记本
```
# 第一步 — 构建所有 .pkl 制品
jupyter notebook Train_Data_Preprocessing.ipynb
# 第二步 — 将保存的制品应用到测试集
jupyter notebook Test_Data_Preprocessing.ipynb
```
## 🛠️ 技术栈
## 🔭 下一步计划
这个管道产生了一个干净的、规范化的、可用于机器学习的数据集。自然的下一步是模型训练:
- [ ] 使用**LightGBM**或**XGBoost**训练基线模型
- [ ] 使用**SMOTE**或类别加权解决类别不平衡问题
- [ ] 使用**AUC-ROC**评估(竞赛指标)
- [ ] 实验阈值调整以权衡精确率和召回率
## 👤 作者
**Mostafa Shazly** · [LinkedIn](https://linkedin.com/in/mostafa-shazly-148945314) · [GitHub](https://github.com/mostafashazly7)

## ⭐ 支持
如果您喜欢这个项目,别忘了给仓库点个⭐!
标签:Apex, IEEE-CIS, Kaggle, LightGBM, NoSQL, pandas, Python, XGBoost, 二分类问题, 大数据, 异常检测, 数据清洗, 数据科学, 数据预处理, 无后门, 机器学习, 模型训练, 欺诈检测, 特征工程, 目录扫描, 类别不平衡, 资源验证, 逆向工具, 金融安全, 金融科技, 预测分析