65.9K
CodeProject 正在变化。 阅读更多。
Home

决策树 - 信用卡欺诈检测

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.40/5 (4投票s)

2023年8月15日

CPOL

3分钟阅读

viewsIcon

16158

信用卡欺诈检测是机器学习技术的一个重要应用。

引言

在本文中,我们将实现决策树算法用于信用卡欺诈检测。决策树算法是一种流行的、强大的监督机器学习算法,用于分类和回归任务。

背景

决策树算法基于数据的特征构建一个树状的决策模型。树的每个内部节点表示基于一个特征的决策,每个叶节点表示一个类标签或一个预测值。

请参考我的Medium文章“机器学习 - 决策树”,以详细了解决策树的概念。

高级步骤

以下是使用机器学习中的决策树算法检测信用卡欺诈的高级步骤概述:

数据收集:收集一个标记数据集,其中包含历史信用卡交易记录,每笔交易都被标记为欺诈或合法。数据集应包含相关特征,如交易金额、商户信息、交易时间和其他相关变量。

数据预处理:通过执行诸如数据清理、处理缺失值、特征选择和归一化等任务来预处理数据集。确保数据集是平衡的,即欺诈交易和有效交易的数量相似,以防止模型中的偏差。

分割数据集:将预处理后的数据集分割为训练集和测试集。训练集将用于构建决策树模型,而测试集将用于评估模型的性能。

决策树模型:在训练数据上构建决策树模型。数据集的特征将作为输入,而标签(欺诈或合法)将是目标变量。决策树算法将学习基于特征的模式和决策规则,以将交易分类为欺诈或合法。

模型训练:在训练数据上训练决策树模型,使用适当的指标(如信息增益或基尼不纯度)来确定在每个节点拆分数据的最佳特征。

模型评估:使用测试数据评估训练好的模型。计算诸如准确率、精确率、召回率和 F2-score 等指标,以评估模型在正确识别欺诈交易和最小化假阳性和假阴性方面的性能。

微调:调整决策树模型的参数和超参数,例如最大深度、每个叶子的最小样本数和拆分标准,以优化其性能,从而防止过拟合并提高模型的泛化能力。

预测:使用训练好的决策树模型对新的、未见过的信用卡交易进行预测。该模型将根据学习到的决策规则将每笔交易分类为欺诈或合法。

Using the Code

以下是算法的实现,代码是用 Python 编写的,并借助 jupyter notebook。

# importing necessary libraries
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score

您可以使用任何包含信用卡交易的数据集。此实现中使用的数据集是从 Kaggle 下载的。

# load dataset
creditdata_df = pd.read_csv("~path~//creditcard.csv")
print(f"Dataset Shape :-")
print (creditdata_df.shape)

输出

Dataset Shape :-
(284807, 31)

dataframe 中加载 creditcard.csv 数据后,让我们查看或检查数据。

#view data 
creditdata_df.head(10) 

输出

让我们从 dataset 中找到合法的和欺诈的记录。

# Check for data based on Class column value which indicates
# 1 => False & 0 => True
false = creditdata_df[creditdata_df['Class']==1]
true = creditdata_df[creditdata_df['Class']==0]
n=len(false)/float(len(true))
print (n)
print('False Detection : {}'.format(len(creditdata_df[creditdata_df['Class']==1])))
print('True Detection:{}'.format(len(creditdata_df[creditdata_df['Class']==0])),"\n") 

输出

0.0017304750013189597
False Detection : 492
True Detection:284315 

检查两种类型记录的统计视图。

#False Datection Transaction
print("False Detection Transaction")
print("============================")
print(false.Amount.describe(),"\n")

#True Detection Transaction
print("True Detection Transaction")
print("============================")
print(true.Amount.describe(),"\n") 

输出

现在是分离特征和目标变量的时候了。

X = creditdata_df.drop('Class', axis=1)
y = creditdata_df.drop['Class']

将数据分成训练集和测试集。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

创建一个决策树分类器。

classifier = DecisionTreeClassifier()

现在让我们训练分类器。

classifier.fit(X_train, y_train)

现在让我们尝试对测试集进行预测。

y_pred = classifier.predict(X_test)

计算模型的准确率。

accuracy = accuracy_score(y_test, y_pred) * 100
print("Accuracy:", accuracy) 

confusion_mat = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(confusion_mat)

输出

Accuracy: 99.90695551420245
Confusion Matrix: 
[[56833 31] 
[ 22 76]]

现在,最后,是时候验证和评估我们的模型了。

#Precision
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score

precision=precision_score(y_test, y_pred, pos_label=1)*100
print('\n Score Precision :\n',precision )

#Recall
# Recall = TP / (TP + FN)
recall=recall_score(y_test, y_pred, pos_label=1)*100
print("\n Recall Score :\n", recall)

fscore=f1_score(y_test, y_pred, pos_label=1)*100
print("\n F1 Score :\n", fscore)

输出

 Score Precision :
 71.02803738317756

 Recall Score :
 77.55102040816327

 F1 Score :
 74.14634146341463

如您所见,使用 dataset creditcard.csv 实现的决策树算法获得了 99.90 的准确率。

结论

总之,我们的信用卡欺诈检测系统由决策树分类器驱动,在保护金融交易免受欺诈活动方面具有巨大的潜力。

历史

  • 2023年8月15日:初始版本
© . All rights reserved.