异常数据检测(信用卡欺诈)逻辑回归实战案例

1. 读取数据

import numpy as np  # 矩阵计算
import pandas as pd # 数据处理和数据分析
import matplotlib.pyplot as plt  # 数据可视化展示
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline  # 画图可以镶嵌到当前页面,不指定画图要指定一些东西,比较麻烦

Amount数据需要标准化的原因,因为Amount和v1-v28的数值差异太大

# 数据读取
import os
os.chdir('C:/Users/Liu/Desktop')
data = pd.read_csv('creditcard.csv')
data.head()
count_class = pd.value_counts(data['Class'],sort = True)
#count_class.plot(kind = 'bar') # 画图观察一下
 
# 数据标准化
from sklearn.preprocessing import StandardScaler
data['normAmount'] = StandardScaler().fit_transform(data['Amount'].values.reshape(-1,1)) # values将ndarry转换成数值
data = data.drop(['Time','Amount'],axis = 1)
data.head()

2. 针对问题给出解决方案

解决方案:将标签0和1的数据的数目转化为一致然后再模型训练
第一种方案:标签0数据和标签1数据一样少,数据多的一方降到和数据少的一方一致(降采样 under sample)
第二种方案:标签1数据和标签0数据一样多,数据少的一方增到和数据多的一方一致(过采样 over sample)

#       所有样本     找到指定的列
x = data.iloc[:,data.columns !='Class']
y = data.iloc[:,data.columns == 'Class']


#得到所有异常样本的索引
number_records_fraud = len(data[data.Class ==1])
#fraud_indices = np.array(data[data.Class == 1].index)
fraud_indices = data[data.Class == 1].index


# 得到所有异常样本的索引
#number_records_normal = len(data[data.Class == 0])
#normal_indices = np.array(data[data.Class == 0].index)
normal_indices = data[data.Class == 0].index

# 在正常样本中随机采样出指定个数的样本,并取其索引
random_normal_indices = np.random.choice(normal_indices,number_records_fraud,replace = False)
random_normal_indices = np.array(random_normal_indices) # 转换成这个结构更方便操作

# 有了正常和异常样本后把它们的索引都拿到手,组合到一起
under_sample_indices = np.concatenate([fraud_indices,random_normal_indices])

# 根据索引得到下采样所有样本点
under_sample_data = data.iloc[under_sample_indices,:]
print(len(under_sample_data))
X_undersample = under_sample_data.iloc[:,under_sample_data.columns !='Class']
Y_undersample = under_sample_data.iloc[:,under_sample_data.columns =='Class']


3.数据集切分

注意是train_test_split针对测试集和非测试集的划分(也叫留出法,按照一定比例切分数据,交叉验证在此之后进行),特别留意由于是随机的切分,要进行降采样和过采样的对比分析,这里指定切分的方式和随机种子两个参数,需要确保数据输入是一样的,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值