過采樣處理

一、數據讀取與初步觀察

首先,使用pandas庫讀取信用卡交易數據集:

data = pd.read_csv(r"./creditcard.csv")
print(data.head())

通過head()方法查看數據集的前幾行,初步了解數據的結構和內容。該數據集包含交易時間、交易金額、多個匿名特征以及交易是否為欺詐(Class,0 表示正常交易,1 表示欺詐交易)等信息。

二、數據標準化

由于數據集中的Amount列數值范圍差異較大,為了提高模型的訓練效果和收斂速度,需要對其進行標準化處理:

scaler = StandardScaler()
data['Amount'] = scaler.fit_transform(data[['Amount']])
print(data.head())

StandardScaler會將數據標準化為均值為 0,標準差為 1 的分布,使得不同特征之間具有可比性。

三、數據清洗與特征選擇

數據集中的Time列對于欺詐檢測的實際意義不大,因此將其刪除:

data = data.drop(['Time'], axis=1)

同時,為了確保圖表能夠正確顯示中文,設置matplotlib的字體:

mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
mpl.rcParams['axes.unicode_minus'] = False

四、樣本不均衡問題分析

查看數據集中正負樣本(正常交易與欺詐交易)的數量分布:

lables_count = pd.value_counts(data['Class'])
print(lables_count)# 繪制正負樣本數量柱狀圖
plt.title("正負例樣本數")
plt.xlabel("類別")
plt.ylabel("頻數")
lables_count.plot(kind='bar')
plt.show()

結果顯示,數據集中正常交易的數量遠遠多于欺詐交易,存在嚴重的樣本不均衡問題。這種不均衡可能導致模型在訓練過程中更傾向于學習正常交易的特征,從而對欺詐交易的識別能力不足。

五、數據劃分與過采樣處理

將數據集劃分為訓練集和測試集:

X = data.drop(['Class'], axis=1)
y = data['Class']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

為了解決樣本不均衡問題,使用SMOTE( Synthetic Minority Over-sampling Technique)算法對訓練集進行過采樣:

oversampler = SMOTE(random_state=0)
os_x_train, os_y_train = oversampler.fit_resample(X_train, y_train)

SMOTE算法通過合成少數類樣本,增加了訓練集中欺詐交易樣本的數量,使得正負樣本比例更加均衡,有助于提升模型對少數類樣本的識別能力。

六、邏輯回歸模型調優

6.1 超參數搜索

邏輯回歸模型中的超參數C(正則化強度的倒數)對模型性能有著重要影響。為了找到最優的C值,采用交叉驗證的方式進行搜索:

scores = []
c_param_range = [0.01, 0.1, 1, 10, 100]
for i in c_param_range:start_time = time.time()lr = LogisticRegression(C=i, penalty='l2', solver='lbfgs', max_iter=2000)score = cross_val_score(lr, os_x_train, os_y_train, cv=8, scoring='recall')score_mean = sum(score) / len(score)scores.append(score_mean)end_time = time.timeprint("{} time speed :{:.2f}".format(end_time - start_time))
print("recall:}".format(score_mean))best_c = c_param_range[np.argmax(scores)]
print("最優懲罰因子為:{}".format(best_c))

在上述代碼中,遍歷不同的C值,使用 8 折交叉驗證評估模型在訓練集上的召回率(recall),選擇召回率最高的C值作為最優超參數。召回率在欺詐檢測中尤為重要,它衡量了模型正確識別出欺詐交易的能力。

6.2 模型訓練與評估

使用最優的超參數訓練邏輯回歸模型,并在訓練集和測試集上進行評估:

lr = LogisticRegression(C=best_c, penalty='l2', solver='lbfgs', max_iter=1000)
lr.fit(os_x_train, os_y_train)train_predicted = lr.predict(os_x_train)
print(metrics.classification_report(os_y_train, train_predicted))test_predicted = lr.predict(os_x_test_w)
print(metrics.classification_report(os_y_test_w, test_predicted))test_predicted_big = lr.predict(x_test_w)
print(metrics.classification_report(y_test_w, test_predicted_big))

通過classification_report輸出模型在訓練集和測試集上的精確率、召回率、F1 值等評估指標,全面了解模型的性能表現。

七、閾值調整

邏輯回歸模型默認以 0.5 作為分類閾值,但在樣本不均衡的情況下,調整閾值可能會進一步提升模型性能。嘗試不同的閾值,并計算對應的召回率:

lr = LogisticRegression(C=best_c, penalty='l2')
lr.fit(os_x_train, os_y_train)thresholds = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
recalls = []
for i in thresholds:y_predict_proba = lr.predict_proba(os_x_train)y_predict_proba = pd.DataFrame(y_predict_proba)y_predict_proba = y_predict_proba.drop([0], axis=1)y_predict_proba[y_predict_proba[[1]] > i] = 1y_predict_proba[y_predict_proba[[1]] <= i] = 0recall = metrics.recall_score(os_y_train, y_predict_proba[1])recalls.append(recall)print("{} Recall metric in the testing dataset: {:.3f}".format(i, recall))

通過調整閾值,可以在精確率和召回率之間進行權衡,根據實際業務需求選擇最合適的閾值,以達到更好的欺詐檢測效果。

八、總結

本文通過對信用卡交易數據集的處理,詳細展示了從數據預處理、樣本不均衡處理、模型調優到閾值調整的完整流程。在實際應用中,還可以嘗試其他機器學習算法(如隨機森林、支持向量機等),或者結合集成學習方法進一步提升模型的性能。同時,隨著數據的不斷更新和業務場景的變化,持續優化模型也是保障信用卡欺詐檢測準確性的關鍵。希望本文的實踐經驗能夠為從事金融風控領域的讀者提供有益的參考。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81741.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81741.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81741.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

潮乎盲盒商城系統全開源多級分銷推廣海報獎品兌換試玩概率OSS云存儲多端源碼

一、源碼描述 這是一套潮乎盲盒商城源碼&#xff0c;仿小叮當盲盒商城&#xff0c;后端Laravel框架前端uniappvue&#xff0c;前后端數據庫分離&#xff0c;支持四端同步數據&#xff08;H5小程序等&#xff09;&#xff0c;測試環境: php7.4&#xff0c;mysql5.6&#xff0c;…

c++環境和vscode常用的一些有用插件

環境 WSL需要安裝cmake 編譯器g14 應該是包含了所有std:c23把好像包含部分c26 vscode 需要插件cmake vscode clangd 方便提示吧 File Watch 插件目的在保存.h/.cpp文件時候自動執行vscode 的cmake吧 error lens 方便每次顯示錯誤和警告的提示懶得每次點擊去看錯誤 Edit Sugge…

Spring 轉發 form-data 文件上傳請求時中文文件名亂碼

Spring 轉發 form-data 文件上傳請求時中文文件名亂碼 復現問題找原因解決問題參考 復現問題 后端有兩個接口&#xff1a; /upload 是文件上傳的接口。 /forward 是轉發文件上傳請求的接口。 RequestMapping RestController public class FileUploadController {/*** 直接調…

MySQL 8.4.4 安全升級指南:從漏洞修復到版本升級全流程解析

目錄 二、升級前關鍵注意事項 1. 數據安全與備份 2. 版本兼容性與路徑規劃 三、分步升級操作流程 1. 環境預檢與準備 2. 安裝包部署 3. 強制升級組件 4. 驗證與啟動 一、背景與必要性 近期安全掃描發現生產環境的 MySQL 數據庫存在多個高危漏洞(CVE 詳情參見Oracle 官…

vulkanscenegraph顯示傾斜模型(6.4)-多線程下的記錄與提交

前言 上章深入分析了幀循環中呈現階段的具體實現。本章將分析多線程下的記錄與提交&#xff0c;進一步剖析vsg幀循環過程中的同步機制&#xff0c;并揭露信號量(VkSemaphore)和圍欄(VkFence)以及vsg::FrameBlock與vsg::Barrier在其中的作用。 目錄 1 信號量(VkSemaphore)、柵欄…

Python爬蟲實戰:獲取扇貝單詞數據并分析,為用戶高效學習單詞做參考

一、引言 隨著互聯網的迅猛發展,在線學習資源日益豐富多樣。扇貝單詞作為一款備受歡迎的在線英語學習平臺,積累了海量的單詞學習數據。借助 Python 強大的爬蟲技術獲取這些數據,并運用數據分析和機器學習方法進行深度挖掘,能夠為用戶量身定制更個性化、更高效的單詞學習方…

【Vagrant+VirtualBox創建自動化虛擬環境】Ansible-Playbook

Vagrant 后續Ansible實戰&#xff1a;【Ansible自動化運維實戰&#xff1a;從Playbook到負載均衡指南】-CSDN博客 Vagrant是一個基于Ruby的工具&#xff0c;用于創建和部署虛擬化開發環境。它使用Oracle的開源VirtualBox虛擬化系統&#xff0c;使用 Chef創建自動化虛擬環境 Do…

Codigger Desktop:重新定義數字工作與生活方式

Codigger Desktop是一款革命性的智能桌面操作系統&#xff0c;專為現代數字生活和工作場景打造。它不僅成為開發者的強大生產力工具&#xff0c;更是普通用戶日常數字生活的得力助手&#xff0c;完美實現了專業性與易用性的平衡。 Multimedia Desktop全能數字生活平臺 重新定…

Servlet+tomcat

serverlet 定義&#xff1a;是一個接口&#xff0c;定義了java類被瀏覽器&#xff08;tomcat識別&#xff09;的規則 所以我們需要自定義一個類&#xff0c;實現severlet接口復寫方法 通過配置類實現路徑和servlet的對應關系 執行原理 當用戶在瀏覽器輸入路徑&#xff0c;會…

什么是 DDoS 攻擊?高防 IP 如何有效防護?2025全面解析與方案推薦

一、DDoS 攻擊&#xff1a;互聯網時代的 “數字核武器” 1. DDoS 攻擊的本質與原理 ** 分布式拒絕服務攻擊&#xff08;DDoS&#xff09;** 通過操控海量僵尸設備&#xff0c;向目標服務器發送洪水般請求&#xff0c;耗盡帶寬、連接或計算資源&#xff0c;導致合法用戶無法訪…

Circular Plot系列(一): 環形熱圖繪制

針對近期多個粉絲咨詢環形圖的繪制&#xff0c;我意識到&#xff0c;我們似乎沒有真正介紹過circle圖&#xff0c;但這一類圖確是非常常用的圖&#xff0c;所以這里詳細學習一下circle的繪制&#xff0c;使用的是circlize包&#xff0c;功能很完善&#xff1a;安裝包, #https:/…

【數據挖掘】時間序列預測-時間序列預測策略

時間序列預測策略 &#xff08;1&#xff09;單步預測與多步預測&#xff08;2&#xff09;直接多步預測&#xff08;3&#xff09;遞歸多步預測&#xff08;4&#xff09;直接遞歸的混合預測&#xff08;5&#xff09;多輸入多輸出預測 &#xff08;1&#xff09;單步預測與多…

【LLM】deepseek R1之GRPO訓練筆記(持續更新)

note 相關框架對比&#xff1a; 需微調模型且資源有限 → Unsloth&#xff1b;本地隱私優先的小規模推理 → Ollama&#xff1b;復雜邏輯或多模態任務 → SGLang&#xff1b;高并發生產環境 → vLLM 微調SFT和GRPO是確實能學到新知識的四種格式&#xff08;messages、sharegpt…

【數據結構】--- 單鏈表的增刪查改

前言&#xff1a; 經過了幾個月的漫長歲月&#xff0c;回頭時年邁的小編發現&#xff0c;數據結構的內容還沒有寫博客&#xff0c;于是小編趕緊停下手頭的活動&#xff0c;補上博客以洗清身上的罪孽 目錄 前言 概念&#xff1a; 單鏈表的結構 我們設定一個哨兵位頭節點給鏈…

【JAVA】數據類型與變量:深入理解棧內存分配(4)

核心知識點詳細解釋 Java 的基本數據類型和引用數據類型 基本數據類型 Java 有 8 種基本數據類型&#xff0c;它們可以分為 4 類&#xff1a; 整數類型&#xff1a;byte&#xff08;1 字節&#xff09;、short&#xff08;2 字節&#xff09;、int&#xff08;4 字節&#…

ReentrantLock實現公平鎖和非公平鎖

在 Java 里&#xff0c;公平鎖和非公平鎖是多線程編程中用于同步的兩種鎖機制&#xff0c;它們的主要差異在于獲取鎖的順序規則。下面是對二者的詳細介紹&#xff1a; 公平鎖 公平鎖遵循 “先來先服務” 原則&#xff0c;也就是線程獲取鎖的順序和請求鎖的順序一致。先請求鎖…

一篇擼清 Http,SSE 與 WebSocket

HTTP,SSE 和WebSocket都是網絡傳輸的協議,本篇快速介紹三者的概念和比較。 SSE(Server-Sent Events) 是什么? SSE(Server-Sent Events),服務器發送事件, 是一種基于 HTTP 的輕量級協議,允許服務器主動向客戶端(如瀏覽器)推送實時數據。它設計用于單向通信(服務器到…

5個重要的財務指標講解

1&#xff09;凈資產收益率 2&#xff09;銷售凈利率 3&#xff09; 銷售毛利率 4&#xff09;銷售成本率 5&#xff09; 期間費用率 好的&#xff0c;我將通過一個假設的案例&#xff08;某公司2023年數據&#xff09;逐步解釋這些財務指標&#xff0c;并用具體數字演示計算…

PISI:眼圖1:眼圖相關基本概念

0 英文縮寫 TIE&#xff08;Time Interval Error&#xff09;時間間隔誤差&#xff0c;UI&#xff08;Unit Interval&#xff09;單位間隔PDF&#xff08;Probability Density Function&#xff09;概率密度函數BER&#xff08;Bit Error Rate&#xff09;誤碼率TJ&#xff08…

前端八股 CSS 2 選擇器

選擇器功能&#xff1a;選中特定 DOM節點進行渲染 原始方法 getElementById() getElementByName() 現在方法選擇器 分類&#xff1a; id選擇器 類選擇器 標簽選擇器 邏輯與選擇器 其他類型選擇器&#xff1a; 偽類選擇器&#xff1a; :link&#xff1a;未被訪問的鏈接…