【073】信用卡欺诈--逻辑回归和不平衡样本

内容目录   

1、数据探索

        查看数据

        查看类别分布

        探索交易时间分布

        探索交易金额分布

2. 数据预处理

        标准化

        如何平衡样本

        不平衡样本

        使用SMOTE平衡样本

3. 建模与模型评估

        混淆矩阵的绘图function

        关于模型评估

        用上采样处理后的训练集训练模型

        ROC 评估

        FPR,TPR

原文见公众号:python宝

数据不平衡

一、数据探索

1、查看数据
import warnings
import numpy as np
import matplotlib
import pandas as pd
np.set_printoptions(precision=3,suppress=True)

warnings.filterwarnings("ignore")
matplotlib.rcParams['font.sans-serif']=['SimHei']   # 用黑体显示中文
matplotlib.rcParams['axes.unicode_minus']=False     # 正常显示负号
pd.set_option('display.max_columns', 10000)
#显示所有行
pd.set_option('display.max_rows', 10000)
#设置value的显示长度为100,默认为50
pd.set_option('max_colwidth',10000)
pd.set_option('display.width', 10000)#不换行

data = pd.read_csv('D:\A\AI-master\py-data\creditcardfraud.csv')
print('data.shape' ,data.shape)
print('data.isnull().values.sum()' ,data.isnull().values.sum())   #检查是否有空值
print('查看前三行数据¶' ,data.head(3))
ata.shape (284807, 31)
data.isnull().values.sum() 0
查看前三行数据
    Time        V1        V2        V3        V4        V5        V6        V7        V8        V9       V10       V11       V12       V13       V14       V15       V16       V17       V18       V19       V20       V21       V22       V23       V24       V25       V26       V27       V28  Amount  Class
0   0.0 -1.359807 -0.072781  2.536347  1.378155 -0.338321  0.462388  0.239599  0.098698  0.363787  0.090794 -0.551600 -0.617801 -0.991390 -0.311169  1.468177 -0.470401  0.207971  0.025791  0.403993  0.251412 -0.018307  0.277838 -0.110474  0.066928  0.128539 -0.189115  0.133558 -0.021053  149.62      0
1   0.0  1.191857  0.266151  0.166480  0.448154  0.060018 -0.082361 -0.078803  0.085102 -0.255425 -0.166974  1.612727  1.065235  0.489095 -0.143772  0.635558  0.463917 -0.114805 -0.183361 -0.145783 -0.069083 -0.225775 -0.638672  0.101288 -0.339846  0.167170  0.125895 -0.008983  0.014724    2.69      0
2   1.0 -1.358354 -1.340163  1.773209  0.379780 -0.503198  1.800499  0.791461  0.247676 -1.514654  0.207643  0.624501  0.066084  0.717293 -0.165946  2.345865 -2.890083  1.109969 -0.121359 -2.261857  0.524980  0.247998  0.771679  0.909412 -0.689281 -0.327642 -0.139097 -0.055353 -0.059752  378.66      0

2、查看类别分布

import seaborn as sns

#画相关矩阵图(pairplot)主要展现的是变量两两之间的关系(线性或非线性,有无较为明显的相关关系),
# 对角线上是各个属性的直方图(分布图),而非对角线上是两个不同属性之间的相关图

sns.pairplot(data, vars=data.columns[1:9], hue='Class')
plt.show()
print('查看类别分布',data['Class'].value_counts())

data['Class'].hist(figsize=(8,6),edgecolor='blue', color='yellow',linewidth=1,);
plt.show()

查看类别分布 0    2843151       492

3、探索交易时间分布

plt.figure(figsize=(12,6))
# 正常交易的时间描述信息
print(data[data['Class'].isin([0])]['Time'].describe())
a1 = plt.subplot(1,2,1)
plt.hist(data[data['Class'].isin([0])]['Time'],color='y')
plt.xlabel('Time')
plt.ylabel('count')
plt.title('正常交易的时间描述信息')
# 异常交易的时间描述信息
print(data[data['Class'].isin([1])]['Time'].describe())
plt.subplot(1,2,2)
data[data['Class'].isin([1])]['Time'].hist(color='g')
plt.xlabel('Time')
plt.ylabel('count')
plt.title('异常交易的时间描述信息')
plt.show()

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
逻辑回归是一种常用的二分类算法,可以用于信用卡欺诈预测。下面是逻辑回归信用卡欺诈预测中的一些步骤和需要注意的点: 1. 特征工程:对于信用卡欺诈预测,可以考虑使用交易金额、交易时间、交易地点等特征。在特征工程中,需要对数据进行清洗、缺失值处理、特征选择等操作。 2. 样本不均衡问题的解决:在信用卡欺诈预测中,正常交易的数量远远大于欺诈交易的数量,因此存在样本不均衡问题。可以采用降采样或过采样的方式解决样本不均衡问题。 3. 下采样策略:下采样是指从多数类中随机选择与少数类相同数量的样本,使得样本数量平衡。下采样的缺点是可能会丢失一些重要信息。 4. 交叉验证:交叉验证可以充分利用数据,使模型更具说服力。可以采用k折交叉验证的方式,将数据集分成k份,每次使用其中一份作为验证集,其余k-1份作为训练集。 5. 模型评估方法:在分类问题中,可以使用准确率、精确率、召回率、F1值等指标来评估模型的性能。 下面是一个使用逻辑回归进行信用卡欺诈预测的示例代码: ```python import pandas as pd from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score # 读取数据 data = pd.read_csv('creditcard.csv') # 特征选择 features = ['Time', 'V1', 'V2', 'V3', 'V4', 'V5', 'V6', 'V7', 'V8', 'V9', 'V10', 'V11', 'V12', 'V13', 'V14', 'V15', 'V16', 'V17', 'V18', 'V19', 'V20', 'V21', 'V22', 'V23', 'V24', 'V25', 'V26', 'V27', 'V28', 'Amount'] X = data[features] y = data['Class'] # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 逻辑回归模型训练 lr = LogisticRegression() lr.fit(X_train, y_train) # 预测 y_pred = lr.predict(X_test) # 模型评估 print('Accuracy:', accuracy_score(y_test, y_pred)) print('Precision:', precision_score(y_test, y_pred)) print('Recall:', recall_score(y_test, y_pred)) print('F1 score:', f1_score(y_test, y_pred)) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值