实战六:kaggle实战之信用卡欺诈检测

本文介绍了信用卡欺诈检测的实战案例,包括样本不平衡问题的解决方案、交叉验证的重要性、模型评估方法如召回率、正则化惩罚项的作用以及SMOTE样本生成策略。通过对数据的分析和处理,探讨如何提高模型的检测能力和泛化性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、案例背景

  1. 数据说明:这一份数据是信用卡的消费使用数据,里面的相关数据特征已经经过了处理,我们通过逻辑回归来预测信用卡异常的数据。
  2. 观察数据:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

data = pd.read_csv('./creditcard.csv')
print(data.head())

以上打印前5行的结果:从上我们可以观察到前面有一列时间序列对于我们的异常来说没啥大意义,amount序列数值浮动比较大待会要做标准化或归一化,因为计算机对于数值较大的值会误认为他的权重大,要把数据的大小尽量均衡,class这一列我们可以看到0占的百分比相当高,根据我们前面的分析,0是正常的样本,1为异常的。

二、样本不平衡的解决方案

#  观察样本的分布规则
count_classes = pd.value_counts(data['Class'],sort=True)
print(count_classes)  # 0表示为欺诈 数据284315条   1 表示欺诈  数据有492条
count_classes.plot(kind='bar')
plt.title("Fraud class histogram")
plt.xlabel("Class")
plt.ylabel("Frequency")
plt.show()

                    

从中可以观察到,正负样本不均衡。

​这里有两种解决方案:1.下采样 :让0和1 两个样本一样小 2. 过采样: 对1号 样本进行生成,让 0 和 1 这两个样本一样多。

我们此时应该看数据需不需要进行处理

显然Time是个无用的属性,Amount账户需要标准化

#amount特征先进行归一化操作
from sklearn.preprocessing import StandardScaler
data['normAmount'] = StandardScaler().fit_transform(data['Amount'].values.reshape(-1, 1))
# 接着删除刚才原始的Amount以及Time特征
data = data.drop(['Time','Amount'],axis=1)
print(data.head())

进行下采样

# 切分特征和标签
X = data.loc[:, data.columns != 'Class']
y = data.loc[:, data.columns == 'Class']
# print(X)
# print(y)

# 下采样,使得两个样本同样少
# Number of data points in the minority class
number_records_fraud = len(data[data.Class == 1])# 计算异常样本的个数
fraud_indices = np.array(data[data.Class == 1].index) # 异常样本在原数据的索引值

# Picking the indices of the normal classes
normal_indices = data[data.Class == 0].index # 获得原数据正常样本的索引值

# Out of the indices we picked, randomly select "x&#
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值