问题描述:
2021 年,与信用卡欺诈相关的损失超过 120 亿美元,同比增长近 11%。就重大财务损失、信任和信誉而言,这是银行、客户和商户面临的一个令人担忧的问题。 电子商务相关欺诈一直在以约 13% 的复合年增长率 (CAGR) 增加。由于欺诈性信用卡交易急剧增加,在交易时检测欺诈行为对于帮助消费者和银行非常重要。机器学习可以通过训练信用卡交易模型,然后使用这些模型更快、更准确地检测欺诈交易,在预测欺诈方面发挥至关重要的作用。
方案一:下采样的方法训练模型
数据获取与预处理
pythonCopy code
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import time
import warnings
warnings.filterwarnings('ignore')
# 加载数据文件
df = pd.read_csv("creditcard.csv")
# 查看数据内容
df.head()
上图展示的数据除了"Amount"列外,都已经过标准化处理。
数据预处理
检查是否有缺失值:
pythonCopy code
# 检查是否有空值
df.isnull().sum()
未发现缺失值。
查看数据类型:
pythonCopy code
# 查看数据类型
df.dtypes
数据分布可视化
pythonCopy code
# 查看Class分布
labels = ['Not Fraud', 'Fraud'] # 标签
size = df['Class'].value_counts() # 统计class的类别数量
colors = ['lightgreen', 'orange'] # 颜色
explode = [0, 0.1] # 饼图突出
plt.figure(figsize=(9, 9)) # 画布大小
plt.pie(size, colors=colors, explode=explode, labels=labels, shadow=True, autopct='%.2f%%') # 饼图参数设置
plt.axis('off') # 关闭坐标轴
plt.title("Data Distribution") # 标题
plt.legend() # 显示标签
plt.show() # 显示
从图中可见,欺诈数据占比非常小。如果使用下采样方法训练模型,存在过拟合的风险,导致模型泛化能力差。
优化建议
为了避免过拟合,可以考虑以下优化措施:
- 使用其他采样方法: 考虑使用过采样或合成少数类过采样(SMOTE)等方法,以增加欺诈数据的样本量,提高模型的泛化能力。
- 特征工程: 考虑引入更多特征,或者对现有特征进行组合,以提高模型对数据的表征能力。
- 模型选择: 尝试不同的模型,比如集成学习方法(如随机森林或梯度提升树),以提高模型性能。
- 调整模型参数: 对所选模型进行参数调整,以达到更好的性能。
- 交叉验证: 使用交叉验证来评估模型的性能,防止过度拟合。
方案二:SMOTE(过采样)处理数据不平衡
如果不处理数据的不平衡性,使用这些数据进行训练,模型可能只会学到样本数量较多的类别,而对于样本数量较少的类别学习不足,导致模型无法准确预测。
数据获取与预处理
pythonCopy code
import pandas as pd
import nu