lightgbm 数据不平衡_反欺诈模型||处理不平衡数据集(上)

65eb4650-4c2f-eb11-8da9-e4434bdf6706.png

1.数据来源项目简介

项目是在kaggle上看到的,具体链接如下:

Credit Card Fraud Detection​www.kaggle.com
67eb4650-4c2f-eb11-8da9-e4434bdf6706.png

然后我所做的项目是别人所分享的kernel,我自己进行了一定的翻译,也从中学到了不少东西,kernel链接如下

Credit Fraud || Dealing with Imbalanced Datasets​www.kaggle.com

数据集包含欧洲持卡人于2013年9月通过信用卡进行的交易。该数据集提供两天内发生的交易,其中在284,807笔交易中有492起欺诈行为。数据集非常不平衡,负面类别(欺诈)占所有交易的0.172%。

数据集只包含数值输入变量,这是PCA变换的结果。遗憾的是,由于保密问题,我们无法提供有关数据的原始特征和更多背景信息。特征V1,V2,... V28是经过PCA转换的,唯一没有用PCA转换的特征是'Time'和'Amount'。

  • 'Time'包含每个交易与数据集中第一个交易之间经过的秒数。
  • 'Amount'是交易金额
  • 'Class'是标签,在欺诈的情况下其值为1,否则为0。

1.1 我们的主要目标

  • 理解提供给我们的“少量”数据的少量分布。
  • 创建“欺诈”和“非欺诈”交易的子数据集比率为50/50。
  • 确定我们要使用的分类器,并确定哪个具有更高的精度。
  • 理解由不平衡数据集造成的常见错误。

2.大纲

68eb4650-4c2f-eb11-8da9-e4434bdf6706.png

2.1 纠正以前关于不平衡数据集的错误想法

  • 不要在过采样或者欠采样的数据集上进行测试。
  • 如果我们想实现交叉验证,请记住在交叉验证期间(而不是在此之前)对训练数据进行过采样或欠采样!
  • 在不平衡的数据集上不要使用准确度作为度量(准确度通常会很高而且会误导),而是使用f1-score, precision/recall score或confusion matrix

3.对数据有个基本的了解

  • 我们必须做的第一件事是对数据有个基本的了解。记住,除了交易transaction金额amount这两列,我们不知道其他列是什么(出于隐私原因)。我们唯一知道的是,那些未知的列已经被缩放了。

3.1 摘要

  • 交易金额'amount'相对较小。平均交易金额接近88美元。
  • 没有“Null”值,所以不需要考虑缺失值
  • 正常交易的样本占比为99.83%,欺诈样本占比为0.17%,数据集严重不平衡

3.2 使用的特征技术

  • PCA Transformation:数据的描述是所有的特征都经过PCA变换(降维技术)(除了时间time和金额amount)
  • Scaling:为了使用PCA转换特征,需要事先对特征进行缩放。(在本例中,所有的V特征都被缩放了)
#导入相应的包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.manifold import TSNE
from sklearn.decomposition import PCA, TruncatedSVD
import matplotlib.patches as mpatches
import time

#Classifier Libraries
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
import collections

#Other Libraries
from imblearn.datasets import fetch_datasets
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from imblearn.pipeline import make_pipeline as make_pipeline
from imblearn.over_sampling import SMOTE
from imblearn.under_sampling import NearMiss
from imblearn.metrics import classification_report_imbalanced
from sklearn.metrics import precision_score, recall_score, f1_score, roc_auc_score, accuracy_score, classification_report
from collections import Counter
from sklearn.model_selection import KFold, StratifiedKFold
import warnings
warnings.filterwarnings("ignore")
#导入数据
df = pd.read_csv('E:/ouwen/creditcard.csv')
df.head()

69eb4650-4c2f-eb11-8da9-e4434bdf6706.png
#查看描述性统计分析
df.describe()

6beb4650-4c2f-eb11-8da9-e4434bdf6706.png
#查看是否有缺失值,在这里是没有缺失值的,所以不用考虑缺失值
df.isnull().sum()

6ceb4650-4c2f-eb11-8da9-e4434bdf6706.png
#查看列名
df.columns

6deb4650-4c2f-eb11-8da9-e4434bdf6706.png
#数据集严重不平衡,我们之后会解决这个问题
print('No Frauds', round(df['Class'].value_counts()[0] / len(df) * 100, 2),
      '% of the dataset')
print('Frauds', round(df['Class'].value_counts()[1] / len(df) * 100, 2),
      '% of the dataset') 

6eeb4650-4c2f-eb11-8da9-e4434bdf6706.png
#对标签进行画图,直观地表示正负类比例
sns.c
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值