信用卡欺詐檢測項目 - 機器學習項目

已發表: 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 可用於信用卡欺詐檢測,以預測新數據是否屬於我們已經定義的某個類別。