信用卡欺诈检测项目 - 机器学习项目

已发表: 2021-05-24

欢迎来到我们的信用卡欺诈检测项目。 今天,我们将使用 Python 和机器学习来检测信用卡交易数据集中的欺诈行为。 尽管我们已经共享了每个步骤的代码,但最好了解每个步骤的工作原理然后实现它。

让我们开始!

目录

带步骤的信用卡欺诈检测项目

在我们的信用卡欺诈检测项目中,我们将使用 Python,这是可用的最流行的编程语言之一。 我们的解决方案将检测是否有人绕过我们系统的安全墙并进行非法交易。

该数据集包含信用卡交易,其特征是 PCA 分析的结果。 它具有“金额”、“时间”和“类别”功能,其中“金额”显示每笔交易的货币价值,“时间”显示第一笔交易与相应交易之间经过的秒数,“类别”显示交易是否是否合法。

在“类”中,值 1 表示欺诈交易,值 0 表示有效交易。

您可以在此处获取数据集和整个源代码

第 1 步:导入包

我们将通过安装所需的软件包来启动我们的信用卡欺诈检测项目。 创建一个“main.py”文件并导入这些包:

将 numpy 导入为 np

将熊猫导入为 pd

导入sklearn

从 scipy.stats 导入规范

从 scipy.stats 导入 multivariate_normal

从 sklearn.preprocessing 导入 MinMaxScaler

将 matplotlib.pyplot 导入为 plt

将 seaborn 导入为 sns

第 2 步:查找错误

在我们使用数据集之前,我们应该寻找其中的任何错误和缺失值。 缺失值的存在可能会导致您的模型给出错误的结果,从而使其效率低下且无效。 因此,我们将读取数据集并查找任何缺失值:

df = pd.read_csv('creditcardfraud/creditcard.csv')

# 缺失值

print(“缺失值:”, df.isnull().values.any())

我们在这个数据集中没有发现缺失值,所以我们可以继续下一步。

加入来自世界顶级大学的在线人工智能课程——硕士、高管研究生课程和 ML 和 AI 高级证书课程,以加快您的职业生涯。

第 3 步:可视化

在我们的信用卡欺诈检测项目的这一步中,我们将可视化我们的数据。 可视化有助于理解我们的数据显示什么,并揭示我们可能遗漏的任何模式。 让我们创建一个数据集的图:

# 绘制正常和欺诈

count_classes = pd.value_counts(df['Class'], sort=True)

count_classes.plot(kind='bar', rot=0)

plt.title(“分布式事务”)

plt.xticks(range(2), ['正常', '欺诈'])

plt.xlabel(“类”)

plt.ylabel(“频率”)

plt.show()

在我们的图中,我们发现数据高度不平衡。 这意味着我们不能使用监督学习算法,因为它会导致过度拟合。 此外,我们还没有弄清楚解决问题的最佳方法是什么,所以我们将进行更多的可视化。 使用以下内容绘制热图:

# 热图

sns.heatmap(df.corr(), vmin=-1)

plt.show()

现在,我们将创建数据分布图来帮助我们了解数据的来源:

无花果,轴 = plt.subplots(6, 5,挤压=假)

对于 i, ax in enumerate(axs.flatten()):

ax.set_facecolor('xkcd:charcoal')

ax.set_title(df.columns[i])

sns.distplot(df.iloc[:, i], ax=ax, fit=norm,

颜色=”#DC143C”,fit_kws={“颜色”:“#4e8ef5”})

ax.set_xlabel(”)

fig.tight_layout(h_pad=-1.5, w_pad=-1.5)

plt.show()

通过数据分布图,我们发现除了“时间”之外,几乎所有特征都来自高斯分布。

所以我们将使用多元高斯分布来检测欺诈。 由于只有“时间”特征来自双峰分布(注意高斯分布),我们将丢弃它。 此外,我们的可视化显示“时间”特征不像其他特征那样具有任何极端值,这也是我们将丢弃它的另一个原因。

添加以下代码以删除我们讨论的功能并扩展其他功能:

类 = df['类']

df.drop(['Time', 'Class', 'Amount'], axis=1, inplace=True)

cols = df.columns.difference(['Class'])

MMscaller = MinMaxScaler()

df = MMscaller.fit_transform(df)

df = pd.DataFrame(数据=df,列=列)

df = pd.concat([df, classes], axis=1)

第 4 步:拆分数据集

创建一个“functions.py”文件。 在这里,我们将添加函数来实现我们算法的不同阶段。 然而,在我们添加这些函数之前,让我们将数据集分成两组,验证集和测试集。

将熊猫导入为 pd

将 numpy 导入为 np

def train_validation_splits(df):

# 欺诈交易

欺诈 = df[df['Class'] == 1]

# 正常交易

正常 = df[df['Class'] == 0]

print('正常:', normal.shape[0])

打印('欺诈:',欺诈.shape [0])

normal_test_start = int(normal.shape[0] * .2)

欺诈测试开始 = int(欺诈.shape[0] * .5)

normal_train_start = normal_test_start * 2

val_normal = normal[:normal_test_start]

val_fraud = 欺诈[:fraud_test_start]

validation_set = pd.concat([val_normal, val_fraud], axis=0)

test_normal = normal[normal_test_start:normal_train_start]

test_fraud = 欺诈[fraud_test_start:fraud.shape[0]]

test_set = pd.concat([test_normal, test_fraud], axis=0)

Xval = validation_set.iloc[:, :-1]

Yval = validation_set.iloc[:, -1]

Xtest = test_set.iloc[:, :-1]

Ytest = test_set.iloc[:, -1]

train_set = normal[normal_train_start:normal.shape[0]]

Xtrain = train_set.iloc[:, :-1]

返回 Xtrain.to_numpy(), Xtest.to_numpy(), Xval.to_numpy(), Ytest.to_numpy(), Yval.to_numpy()

第 5 步:计算均值和协方差矩阵

以下函数将帮助我们计算均值和协方差矩阵:

defestimate_gaussian_params(X):

“”

计算每个特征的均值和协方差。

论据:

X:数据集

“”

mu = np.mean(X, 轴=0)

sigma = np.cov(XT)

返回 mu, sigma

第 6 步:添加最后的润色

在我们的“main.py”文件中,我们将为每个集合导入并调用我们在上一步中实现的函数:

(Xtrain, Xtest, Xval, Ytest, Yval) = train_validation_splits(df)

(亩,西格玛)=estimate_gaussian_params(Xtrain)

# 计算高斯pdf

p = multivariate_normal.pdf(Xtrain, mu, sigma)

pval = multivariate_normal.pdf(Xval, mu, sigma)

ptest = multivariate_normal.pdf(Xtest, mu, sigma)

现在我们必须参考 epsilon(或阈值)。 通常,最好用 pdf 的最小值初始化阈值,并随着每一步增加,直到达到最大 pdf,同时将每个 epsilon 值保存在向量中。

创建所需的向量后,我们创建一个“for”循环并对其进行迭代。 我们将阈值与在每次迭代中生成预测的 pdf 值进行比较。

我们还根据我们的基本事实值和预测计算 F1 分数。 如果找到的 F1 分数高于前一个分数,我们将覆盖“最佳阈值”变量。

请记住,我们不能在我们的信用卡欺诈检测项目中使用“准确性”作为衡量标准。 这是因为它会以 99% 的准确率正常反映所有交易,从而使我们的算法毫无用处。

我们将在“functions.py”文件中实现我们上面讨论的所有过程:

def 指标(y,预测):

fp = np.sum(np.all([预测 == 1, y == 0], axis=0))

tp = np.sum(np.all([预测 == 1, y == 1], 轴 = 0))

fn = np.sum(np.all([预测 == 0, y == 1], 轴 = 0))

精度 = (tp / (tp + fp)) 如果 (tp + fp) > 0 否则 0

召回 = (tp / (tp + fn)) 如果 (tp + fn) > 0 否则 0

F1 = (2 * 精度 * 召回率) / (精度 +

召回)如果(精度+召回)> 0否则0

返回精度、召回率、F1

def 选择阈值(yval,pval):

e_values = pval

最佳F1 = 0

最佳Epsilon = 0

对于 e_values 中的 epsilon:

预测 = pval < epsilon

(精度,召回率,F1)=指标(yval,预测)

如果 F1 > 最佳 F1:

最佳F1 = F1

bestEpsilon = ε

返回 bestEpsilon, bestF1

最后,我们将导入“main.py”文件中的函数并调用它们以返回 F1 分数和阈值。 它将允许我们在测试集上评估我们的模型:

(epsilon, F1) = selectThreshold(Yval, pval)

print(“找到的最佳 epsilon:”, epsilon)

print(“交叉验证集上的最佳 F1:”, F1)

(test_precision, test_recall, test_F1) = 指标(Ytest, ptest < epsilon)

打印(“发现异常值:”,np.sum(ptest < epsilon))

打印(“测试集精度:”,test_precision)

打印(“测试集召回:”,test_recall)

print("测试集 F1 分数:", test_F1)

以下是所有这些努力的结果:

找到的最佳 epsilon:5e-324

交叉验证集上的最佳 F1:0.7852998065764023

发现异常值:210

测试集精度:0.9095238095238095

测试集召回率:0.7764227642276422

测试集 F1 分数:0.837719298245614

结论

你有它 - 一个功能齐全的信用卡欺诈检测项目!

如果您对这个项目有任何问题或建议,请在下面发表评论让我们知道。 我们很乐意听取您的意见。

借助所有学到的技能,您还可以在其他竞争平台上活跃起来,以测试您的技能并获得更多动手能力。 如果您有兴趣了解有关该课程的更多信息,请查看机器学习和人工智能中的执行 PG 计划页面,并与我们的职业顾问联系以获取更多信息。

信用卡欺诈检测项目的目的是什么?

该项目的目的是根据交易金额、地点和其他交易相关数据来预测信用卡交易是否欺诈。 它旨在追踪信用卡交易数据,这是通过检测交易数据中的异常来完成的。 信用卡欺诈检测通常使用一种算法来实现,该算法检测交易数据中的任何异常并通知持卡人(作为预防措施)和银行任何可疑交易。

信用卡欺诈检测如何帮助检测和阻止信用卡欺诈?

为了检测和阻止信用卡欺诈,信用卡公司分析了从商家那里收到的关于使用信用卡购物的消费者的数据。 信用卡公司自动将购买的数据与之前存储的消费者数据进行比较,以确定购买和消费者是否一致。 计算机分析消费者的数据并将其与购买的数据进行比较。 计算机还尝试检测消费者的购买历史和当前购买之间的任何差异。 然后计算机对购买进行风险分析,并确定公司是否应允许购买通过。

信用卡欺诈检测使用什么机器学习算法?

有几种机器学习算法可用于信用卡欺诈检测。 最常见的算法之一是 SVM 或支持向量机。 SVM 是一种自适应分类和回归算法,在计算机科学中有许多应用。 它用于信用卡欺诈检测,以预测新数据集并将其分类为一组预定义的类别(也称为类)。 SVM 可用于信用卡欺诈检测,以预测新数据是否属于我们已经定义的某个类别。