本篇的数据挖掘实战是以信用卡欺诈的数据集为例,用 Logistic Regression 和 Random Forest 两个分类算法进行预测分析。以下代码是用 Python 3 实现。
首先导入要用到的 Python 包。
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import itertools
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, precision_recall_curve
from sklearn.metrics import roc_curve, auc
from sklearn.preprocessing import StandardScaler
读入数据,数据类型是 .csv 文件。
data = pd.read_csv('./creditcard.csv')
数据初探索
输出 data 的前 5 行,先直观地看一下数据的样子。
data.head(5)
由于属性太多,该图未截取完整。

继续对数据进行探索。
print(data.shape) # 输出行数和列数(284807, 31)
data.columns.tolist() # 显现数据的所有列名称
print(data.describe()) # 对数据的描述性统计

接下来绘制类别的分布,通过直方图可以直观地观察到有多少类,以及每个类的分布。
plt.figure()
ax = sns.countplot(x = 'Class',data = data)
plt.title('class distribution')
plt.show()
观察直方图,我们会发现这是一个二分类的数据集,并且数据分布极为不平衡。毕竟在信用卡违约贷款中,属于欺诈的交易还是极少数的。

具体计算一下总交易数,以及属于欺诈的交易数。
num = len(data)
num_fraud = len(data[data['Class'] == 1])
print("总交易笔数",num)
print("诈骗交易次数", num_fraud)`在这里插入代码片`
print("诈骗交易比例:{:.6f}".format(num_fraud/num))
# 输出结果
总交易笔数 284807
诈骗交易次数 492
诈骗交易比例:0.001727
可视化一下在不同的时间点下,正常与欺诈的交易次数的分布。
f, (ax1, ax2) = plt.subplots(2, 1, sharex=True, figsize=(15

本文通过Python实现,使用信用卡欺诈数据集,应用Logistic Regression和Random Forest进行分类预测分析。数据探索显示欺诈交易比例极低,且分布不均衡。在未调参的情况下,Random Forest在预测效果上优于Logistic Regression。
最低0.47元/天 解锁文章
796

被折叠的 条评论
为什么被折叠?



