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, 二分类问题, 大数据, 异常检测, 数据清洗, 数据科学, 数据预处理, 无后门, 机器学习, 模型训练, 欺诈检测, 特征工程, 目录扫描, 类别不平衡, 资源验证, 逆向工具, 金融安全, 金融科技, 预测分析