日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[DA45] 信用卡诈骗分析

發(fā)布時(shí)間:2023/12/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [DA45] 信用卡诈骗分析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一. 相關(guān)介紹

? ? (一) 類(lèi)不平衡問(wèn)題

? ? ? ??在機(jī)器學(xué)習(xí)分類(lèi)任務(wù)中, 類(lèi)別不平衡是指不同類(lèi)別的訓(xùn)練樣例數(shù)差別很大.

? ? ? ? 解決類(lèi)不平衡問(wèn)題的方法有過(guò)抽樣、欠抽樣、閾值移動(dòng)和組合方法等, 一般來(lái)講后兩種方法的效果高于前兩種方法.?

? ? ? ? 更多詳細(xì)內(nèi)容請(qǐng)查看百度百科:?類(lèi)不平衡問(wèn)題

? ? (二) 精確率 - 召回率曲線(xiàn)

? ? ? ? sklearn 中的 precision_recall_curve 函數(shù)可以通過(guò)預(yù)測(cè)值和真實(shí)值來(lái)計(jì)算精確率 - 召回率曲線(xiàn).

? ? ? ? 該函數(shù)通過(guò)傳入樣本的真實(shí)類(lèi)別模型預(yù)測(cè)樣本的置信分?jǐn)?shù), 返回精確率數(shù)組、召回率數(shù)組和對(duì)應(yīng)的閾值數(shù)組,通過(guò) matplot.pyplot 工具繪制曲線(xiàn), 反應(yīng)了不同概率閾值情況下的精確率和召回率.

? ? (三) ROC 曲線(xiàn)與 AUC?

? ? ? ??接受者操作特性曲線(xiàn),?又稱(chēng)為感受性曲線(xiàn), 它是一種非常有效的模型評(píng)價(jià)方法, 可為選定臨界值給出定量提示. 將靈敏度設(shè)在縱軸, 1-特異性設(shè)置在橫軸, 就可以得出 ROC 曲線(xiàn)圖.

? ? ? ? 與精確率 - 召回率曲線(xiàn)類(lèi)似, sklearn 中的?roc_curve 函數(shù), 返回的是假正例率 fpr 數(shù)組、真正例率 tpr 數(shù)組和對(duì)應(yīng)的閾值數(shù)組.?

? ? ? ? AUC?被定義為 ROC 曲線(xiàn)下與坐標(biāo)軸圍成的面積, 它的大小與每種模型優(yōu)劣密切相關(guān), 反映分類(lèi)器正確分類(lèi)的統(tǒng)計(jì)概率.?由于ROC 曲線(xiàn)一般都處于 y = x 這條直線(xiàn)的上方, 所以 AUC 的取值范圍在0.5和1之間.

? 從AUC 判斷分類(lèi)器(預(yù)測(cè)模型)優(yōu)劣的標(biāo)準(zhǔn):? (以下數(shù)據(jù)摘自百度百科)

  • AUC = 1,是完美分類(lèi)器。

  • AUC = [0.85, 0.95], 效果很好

  • AUC = [0.7, 0.85], 效果一般

  • AUC = [0.5, 0.7],效果較低,但用于預(yù)測(cè)股票已經(jīng)很不錯(cuò)了

  • AUC = 0.5,跟隨機(jī)猜測(cè)一樣(例:丟銅板),模型沒(méi)有預(yù)測(cè)價(jià)值。

  • AUC < 0.5,比隨機(jī)猜測(cè)還差;但只要總是反預(yù)測(cè)而行,就優(yōu)于隨機(jī)猜測(cè)。

?

二. 數(shù)據(jù)分析?

? ? (一) 數(shù)據(jù)加載與探索

? ? ? ? 數(shù)據(jù)為2013年9月份兩天時(shí)間內(nèi)的信用卡交易數(shù)據(jù), 284807筆交易中只有492筆是欺詐行為, 由于數(shù)據(jù)分析的關(guān)注點(diǎn)為欺詐交易, 感興趣的主類(lèi)占比較少, 屬于典型的類(lèi)不平衡問(wèn)題.

? ? ? ? 輸入數(shù)據(jù)一共包括了28個(gè)特征 V1 到 V28 對(duì)應(yīng)的取值, 以及交易時(shí)間 Time 和交易金額 Amount. 為了保護(hù)數(shù)據(jù)隱私, 原始數(shù)據(jù)中?V1 到 V28 為 PCA 變換得到的結(jié)果. 另外字段 Class 代表該筆交易的分類(lèi), Class=0代表正常, Class=1代表欺詐. 數(shù)據(jù)中無(wú)缺失值.

正常交易數(shù)與欺詐交易數(shù)

?

從圖中看出的類(lèi)不平衡

?

? ? (二) 數(shù)據(jù)預(yù)處理

? ? ? ?V1 - V28 的特征值都經(jīng)過(guò) PCA 的變換, Time 和 Amount 兩個(gè)字段還需要進(jìn)行規(guī)范化. Time 字段和交易本身是否為欺詐交易無(wú)關(guān), 因此不作為特征選擇, 所以只需要對(duì) Amount 做數(shù)據(jù)規(guī)范化. 同時(shí)數(shù)據(jù)沒(méi)有專(zhuān)門(mén)的測(cè)試集, 需使用 train_test_split 對(duì)數(shù)據(jù)集進(jìn)行劃分, 由于是欺詐交易數(shù)較少, 傳入?yún)?shù)?stratify=labels 確保欺詐交易與正常交易的比例一致.

? ? ? ? 相關(guān)代碼:

# 標(biāo)準(zhǔn)化 ss = StandardScaler() data['Amount'] = ss.fit_transform(data['Amount'].values.reshape(-1, 1))# 準(zhǔn)備訓(xùn)練集和測(cè)試集 labels = data['Class'].values features = data.drop(['Time', 'Amount', 'Class'], axis=1).values train_x, test_x, train_y, test_y = train_test_split(features, labels, test_size=0.1, stratify=labels)

? ? (三) 建模與預(yù)測(cè)

? ? ? ? 使用邏輯回歸模型進(jìn)行分類(lèi), 由于本次分析的關(guān)注點(diǎn)不在于類(lèi)不平衡問(wèn)題樣本數(shù)據(jù)的優(yōu)化, 故直接使用第(二)步處理好的數(shù)據(jù)進(jìn)行訓(xùn)練與預(yù)測(cè).

? ? ? ? 因?yàn)閿?shù)據(jù)集存在類(lèi)不平衡問(wèn)題, 故不能使用一般的評(píng)價(jià)方式對(duì)模型進(jìn)行評(píng)定, 在此使用了 f1得分、模型評(píng)價(jià)報(bào)告、混淆矩陣對(duì)模型進(jìn)行了大致評(píng)估, 代碼與結(jié)果如下:

# 定義混淆矩陣可視化函數(shù) def cm_plot(data_matrix):sns.heatmap(data_matrix, annot=True, fmt='d', cmap='Greens')ax = plt.gca()ax.xaxis.set_ticks_position('top') # x 軸刻度顯示在頂端ax.xaxis.set_label_position('top') # x 軸標(biāo)簽顯示在頂端ax.spines['right'].set_color('none')ax.spines['bottom'].set_color('none')plt.ylabel('True label')plt.xlabel('Predicted label')plt.show()# 邏輯回歸分類(lèi) clf = LogisticRegression() clf.fit(train_x, train_y) predict_y = clf.predict(test_x)# f1得分 f1 = f1_score(test_y, predict_y) print('f1得分:', f1)# 模型評(píng)價(jià) report = classification_report(test_y, predict_y) print(report)# 混淆矩陣 matrix = confusion_matrix(test_y, predict_y) cm_plot(matrix) f1 得分 與 模型評(píng)價(jià)報(bào)告 混淆矩陣可視化

?

? ? ? ? 從混淆矩陣中可以看出, 測(cè)試集中有正常交易 (28430 + 2) 例, 欺詐交易 (16 + 33) 例, 有 2 例正常的交易被模型誤判為欺詐交易, 有 16 例欺詐交易被模型誤判為了正常交易.

? ? ? ? 精確率 P = TP / (TP + FP) = 33 / (33 + 2) = 0.94

? ? ? ? 召回率?R = TP / (TP + FN) = 33 / (33 + 16)? = 0.67

? ? ? ? f1 得分為 0.79

? ? (四) 曲線(xiàn)繪制

? ? ? ? 繪制精確率 - 召回率曲線(xiàn)與 ROC 曲線(xiàn), 再通過(guò)兩種方法計(jì)算 ROC 曲線(xiàn)的 AUC 值.

? ? 相關(guān)代碼:

# 定義曲線(xiàn)函數(shù) def curve_plot(x_data, y_data, x_label, y_label, title_name):plt.plot(x_data, y_data, linewidth=2)plt.fill_between(x_data, y_data, step='post', alpha=0.2, color='b')plt.title(title_name)plt.xlabel(x_label)plt.ylabel(y_label)plt.xlim(0, 1.05)plt.ylim(0, 1.05)plt.show()# 樣本的置信分?jǐn)?shù) score_y = clf.decision_function(test_x)# 精確率-召回率 曲線(xiàn) precision, recall, thresholds1 = precision_recall_curve(test_y, score_y) curve_plot(precision, recall, '精確率', '召回率', '精確率-召回率 曲線(xiàn)')# ROC 曲線(xiàn) fpr, tpr, thresholds2 = roc_curve(test_y, score_y) curve_plot(fpr, tpr, '假正例率', '真正例率', 'ROC 曲線(xiàn)')# 計(jì)算 AUC print('AUC_1:', roc_auc_score(test_y, score_y)) print('AUC_2:', auc(fpr, tpr))

? ? ? ??

?

?

? ? ? ? 由計(jì)算得?AUC 值為 0.96 , 對(duì)比百度百科的 AUC 評(píng)判優(yōu)劣標(biāo)準(zhǔn), 該邏輯回歸分類(lèi)器屬于比較好的分類(lèi)器.

? ? ? ? 但是從混淆矩陣上看, 分類(lèi)器的精確率雖然較高, 但是召回率并不理想, 而且從精確率 - 召回率曲線(xiàn)上看, 閾值移動(dòng)可提高召回率, 但精確率的犧牲也比較大, 為了解決這種類(lèi)不平衡問(wèn)題, 還是需要考慮使用更好的方法, 在此不做進(jìn)一步分析.

?

?

總結(jié)

以上是生活随笔為你收集整理的[DA45] 信用卡诈骗分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。