thanhzbin-cmyk/Credit-Card-Fraud-Detection-Machine-Learning-Python
GitHub: thanhzbin-cmyk/Credit-Card-Fraud-Detection-Machine-Learning-Python
基于Python构建的信用卡欺诈检测机器学习管线,通过特征工程和模型对比解决高度不平衡数据下的欺诈交易分类问题。
Stars: 0 | Forks: 0
# Credit-Card-Fraud-Detection-Machine-Learning-Python (信用卡欺诈检测 - 机器学习 - Python)
## 业务问题
信用卡欺诈给金融机构带来了巨大的经济损失和运营挑战。由于欺诈交易仅占所有交易的一小部分,如何在尽量减少误报的同时准确识别欺诈,是一个极具挑战性的分类问题。
## 数据集
**来源:** 信用卡欺诈检测数据集
**数据集大小:**
- 记录数:97748
- 特征数:24
### 数据集描述
该数据集包含历史信用卡交易记录,并已标记为欺诈或合法。
| 类别 | 变量 |
| ------------ | -------------------------------------------------------------------- |
| Transaction (交易) | 交易时间、金额、交易 ID、Unix 时间戳 |
| Customer (客户) | 信用卡号、姓名、性别、出生日期、职业 |
| Merchant (商家) | 商家名称、交易类别 |
| Location (位置) | 客户地址、城市、州、邮政编码、纬度、经度、商家坐标 |
| Target (目标) | 欺诈标签 (`is_fraud`) |
**目标变量**
* **0:** 合法交易
* **1:** 欺诈交易
# 模型开发
## 数据准备
### 数据概览
在模型开发之前,我们对数据集进行了探索以了解其结构。探索过程包括审查数据集维度、特征类型以及目标变量(is_fraud),为后续的预处理和建模奠定了基础。
### 数据质量评估
通过检查缺失值、重复记录和数据类型,对数据集进行了数据质量评估。未发现严重的数据质量问题,因此预处理阶段得以将重点放在特征准备上,而非数据清洗。
### 特征工程
为了增强模型的预测能力,我们从原始数据集中构造了三个额外的特征:
- 交易小时 (tns_hour) – 从交易时间戳中提取,用于捕捉潜在的欺诈时间模式。
- 客户年龄 (age) – 根据持卡人的出生日期推算,用于反映客户的人口统计特征。
- 客户与商家距离 (distance) – 基于地理坐标使用 Haversine 公式计算,用于衡量客户与商家之间的移动距离。
这些衍生特征提供了额外的行为和空间信息,有助于区分欺诈交易和合法交易。
### 数据预处理
为了准备用于机器学习的数据集,应用了以下几步预处理操作:
- 移除了个人标识符和交易 ID 等无关特征。
- 对类别型变量(merchant、category、gender、city、state 和 job)应用了 One-Hot Encoding。
- 使用 MinMaxScaler 对数值特征进行了归一化处理。
- 将数据集按 80:20 的比例划分为训练集和测试集,以确保客观的模型评估。
## 模型开发
我们开发并比较了两种用于欺诈检测的监督式机器学习模型:
- Logistic Regression – 一种简单且易于解释的二分类基线模型。
- Random Forest Classifier – 一种集成学习模型,能够捕捉复杂的非线性关系并提升预测性能。
两个模型都使用相同的训练数据集进行训练,以便比较它们在识别欺诈交易方面的有效性。
## 模型评估
由于欺诈交易仅占数据集的很小一部分,因此我们使用 Balanced Accuracy 而不是标准的 Accuracy 来评估模型性能。该指标对欺诈和非欺诈类别给予了同等的权重,使其更适合用于不平衡分类问题。
我们比较了 Logistic Regression 和 Random Forest 的 Balanced Accuracy 得分,以确定哪个模型在测试数据集上具有更好的整体分类性能。
## 主要发现
- 数据集高度不平衡,欺诈交易仅占所有交易的极小一部分。
- 特征工程,特别是交易小时、客户年龄和客户与商家距离,提供了有助于区分可疑交易的额外信息。
- 根据 Balanced Accuracy 的比较结果,Random Forest 获得了比 Logistic Regression 更好的整体分类性能。
## 业务建议
- 优先对预测为高风险的交易进行人工审核。
- 利用行为和地理特征(如交易时间和客户与商家距离)来改进欺诈监控。
- 使用新收集的交易数据持续重训模型,以适应不断变化的欺诈模式。
- 将该模型集成到交易筛查工作流中,以支持更快的欺诈检测并减少财务损失。
## 技术栈
Python • Pandas • NumPy • Scikit-learn • Matplotlib • Seaborn • Jupyter Notebook
### 数据质量评估
通过检查缺失值、重复记录和数据类型,对数据集进行了数据质量评估。未发现严重的数据质量问题,因此预处理阶段得以将重点放在特征准备上,而非数据清洗。
### 特征工程
为了增强模型的预测能力,我们从原始数据集中构造了三个额外的特征:
- 交易小时 (tns_hour) – 从交易时间戳中提取,用于捕捉潜在的欺诈时间模式。
- 客户年龄 (age) – 根据持卡人的出生日期推算,用于反映客户的人口统计特征。
- 客户与商家距离 (distance) – 基于地理坐标使用 Haversine 公式计算,用于衡量客户与商家之间的移动距离。
这些衍生特征提供了额外的行为和空间信息,有助于区分欺诈交易和合法交易。
### 数据预处理
为了准备用于机器学习的数据集,应用了以下几步预处理操作:
- 移除了个人标识符和交易 ID 等无关特征。
- 对类别型变量(merchant、category、gender、city、state 和 job)应用了 One-Hot Encoding。
- 使用 MinMaxScaler 对数值特征进行了归一化处理。
- 将数据集按 80:20 的比例划分为训练集和测试集,以确保客观的模型评估。
## 模型开发
我们开发并比较了两种用于欺诈检测的监督式机器学习模型:
- Logistic Regression – 一种简单且易于解释的二分类基线模型。
- Random Forest Classifier – 一种集成学习模型,能够捕捉复杂的非线性关系并提升预测性能。
两个模型都使用相同的训练数据集进行训练,以便比较它们在识别欺诈交易方面的有效性。
## 模型评估
由于欺诈交易仅占数据集的很小一部分,因此我们使用 Balanced Accuracy 而不是标准的 Accuracy 来评估模型性能。该指标对欺诈和非欺诈类别给予了同等的权重,使其更适合用于不平衡分类问题。
我们比较了 Logistic Regression 和 Random Forest 的 Balanced Accuracy 得分,以确定哪个模型在测试数据集上具有更好的整体分类性能。
## 主要发现
- 数据集高度不平衡,欺诈交易仅占所有交易的极小一部分。
- 特征工程,特别是交易小时、客户年龄和客户与商家距离,提供了有助于区分可疑交易的额外信息。
- 根据 Balanced Accuracy 的比较结果,Random Forest 获得了比 Logistic Regression 更好的整体分类性能。
## 业务建议
- 优先对预测为高风险的交易进行人工审核。
- 利用行为和地理特征(如交易时间和客户与商家距离)来改进欺诈监控。
- 使用新收集的交易数据持续重训模型,以适应不断变化的欺诈模式。
- 将该模型集成到交易筛查工作流中,以支持更快的欺诈检测并减少财务损失。
## 技术栈
Python • Pandas • NumPy • Scikit-learn • Matplotlib • Seaborn • Jupyter Notebook标签:NoSQL, 逆向工具