当前位置: 首页 > article >正文

信用卡欺诈检测:数据降维与分类算法的实践对比

1. 引言

信用卡欺诈检测是金融安全领域的重要课题。传统的基于规则的方法难以应对欺诈手段的不断演变,而机器学习(Machine Learning)深度学习(Deep Learning) 技术可以利用大量历史交易数据,自动学习欺诈模式,提高检测精度。

然而,信用卡交易数据通常具有以下挑战:

  • 高维度:数据包含几十个特征,部分特征可能是冗余的,影响计算效率和模型性能。
  • 类别不平衡:欺诈交易仅占所有交易的一小部分,直接训练分类模型容易导致模型偏向正常交易。
  • 欺诈模式复杂:欺诈交易与正常交易之间的差异可能极小,传统特征工程难以有效提取区分特征。

为了解决这些问题,本文将探讨:

  1. 数据降维方法(PCA、t-SNE、LDA) 如何优化欺诈检测数据。
  2. 不同分类算法(逻辑回归、随机森林、XGBoost、深度学习) 的表现对比。
  3. 结合降维与分类模型的优化策略,提升检测精度,减少误报率。

2. 数据集介绍

本次实验使用 Kaggle 信用卡欺诈检测数据集,包含 284,807 条交易记录,其中:

  • 正常交易(Class=0):284,315 条(占比 99.83%)
  • 欺诈交易(Class=1):492 条(占比 0.17%)

数据特征

特征说明
Time交易时间(单位:秒)
Amount交易金额
V1 - V28经过 PCA 变换后的匿名特征
Class交易类别(0 = 正常,1 = 欺诈)

类别极度不平衡:

import pandas as pd

df = pd.read_csv("creditcard.csv")
print(df["Class"].value_counts(normalize=True))

输出:

0    0.998273
1    0.001727

我们可以看到欺诈交易 仅占 0.17%,因此需要特别关注:

  • 类别不均衡问题(可以使用 SMOTE 进行过采样)。
  • 降维方法(减少数据维度,提高模型性能)。

3. 数据降维

3.1 为什么要进行降维?

  • 去除冗余特征,减少噪声,提高模型的泛化能力。
  • 降低计算成本,减少高维特征对训练时间的影响。
  • 可视化欺诈数据,帮助理解数据分布。

3.2 降维方法对比

方法适用场景计算速度是否监督
PCA(主成分分析)线性降维无监督
t-SNE(t-分布随机邻域嵌入)适用于非线性数据无监督
LDA(线性判别分析)适用于分类任务监督

3.3 PCA(主成分分析)

PCA 通过计算 特征协方差矩阵的特征值和特征向量,提取主要特征:

from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

X = df.iloc[:, 1:-2]  # 选取V1-V28
y = df["Class"]

pca = PCA(n_components=2)  # 降到2维
X_pca = pca.fit_transform(X)

plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='coolwarm', alpha=0.5)
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.title("PCA 降维后的信用卡交易数据")
plt.colorbar(label="欺诈交易(1) vs 正常交易(0)")
plt.show()

观察:

  • 大部分欺诈交易仍混杂在正常交易中,线性降维难以分开类别。

3.4 t-SNE(t-分布随机邻域嵌入)

t-SNE 适用于非线性数据降维,可更清晰地区分欺诈交易:

from sklearn.manifold import TSNE

tsne = TSNE(n_components=2, perplexity=30, random_state=42)
X_tsne = tsne.fit_transform(X)

plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='coolwarm', alpha=0.5)
plt.xlabel("t-SNE Component 1")
plt.ylabel("t-SNE Component 2")
plt.title("t-SNE 降维后的信用卡交易数据")
plt.colorbar(label="欺诈交易(1) vs 正常交易(0)")
plt.show()

观察:

  • t-SNE 更能分离欺诈交易点,适用于欺诈检测任务。

4. 分类算法对比

4.1 逻辑回归

适用于高维稀疏数据,计算高效:

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

X_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=0.3, random_state=42)

model = LogisticRegression()
model.fit(X_train, y_train)

y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

缺点:

  • 欺诈交易识别能力较弱,召回率低。

4.2 随机森林

适用于非线性数据:

from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

优点:

  • 对不均衡数据较为鲁棒。

4.3 XGBoost

from xgboost import XGBClassifier

model = XGBClassifier()
model.fit(X_train, y_train)

y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

优点:

  • 处理不均衡数据效果优秀。

4.4 深度学习

import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense

model = Sequential([
    Dense(64, activation='relu', input_shape=(X_train.shape[1],)),
    Dense(32, activation='relu'),
    Dense(1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=10, batch_size=32)

y_pred = (model.predict(X_test) > 0.5).astype("int32")
print(classification_report(y_test, y_pred))

优点:

  • 能够学习复杂欺诈交易模式。

5. 结论

方法准确率召回率适用场景
逻辑回归95%50%适合简单欺诈检测
随机森林97%70%适合小规模数据
XGBoost98%85%生产级模型
深度学习98.5%90%适合大规模数据

XGBoost 和深度学习结合 t-SNE 降维 是最佳方案,可以有效提升欺诈检测能力 🚀


http://www.kler.cn/a/595639.html

相关文章:

  • 无人机多人点对点控制技术解析
  • 单目3d detection算法记录
  • 滑动窗口思想的介绍与单调队列代码实现
  • IDA调试时对异常的处理
  • 三层交换机实验
  • MyBatis-Plus 优雅实现数据库单字段加密存储
  • 云原生高级实验
  • vivo 湖仓架构的性能提升之旅
  • 星越L_后尾门使用及应急开启讲解
  • vulhub靶机----基于docker的初探索,环境搭建
  • 【NPU 系列专栏 3.0 -- scale-out 和 scale-in 和 scale-up 和 scale-down
  • Guava:Google开源的Java工具库,太强大了
  • K8S-etcd备份还原操作手册
  • 第一讲 | 解锁C++编程能力:基础语法解析
  • 基于koajsAdmin+mongodb的后台管理快速开发框架安装运行记录
  • SpringCloud-创建项目
  • SpringMVC全局异常处理机制
  • 调用feapder作为子程序时setting.py文件不起作用
  • 基于Python的智联招聘数据可视化分析推荐系统
  • HTML应用指南:利用GET请求获取猫眼电影日票房信息——以哪吒2为例