預測模型開發與評估:基于機器學習的數據分析實踐

在當今數據驅動的時代,預測模型已成為各行各業決策制定的核心工具。本文將分享我在COMP5310課程項目中開發預測模型的經驗,探討從數據清洗到模型優化的完整過程,并提供詳細的技術實現代碼。

## 研究問題與數據集

### 研究問題

我們的研究聚焦于信用卡欺詐檢測,主要探討以下問題:如何通過機器學習技術有效識別信用卡交易中的欺詐行為,并最大化檢測準確率同時減少誤報?

這一問題對金融機構和消費者都具有重大意義。對金融機構而言,能夠及時識別欺詐交易可以減少經濟損失;對消費者而言,則能保障個人財產安全并增強使用信用卡的信心。

### 數據集概述

我們使用的是信用卡交易數據集,包含了大量真實交易記錄,其中少部分被標記為欺詐交易。數據集具有以下特點:

- 包含交易時間、金額及多個經PCA變換后的特征變量

- 存在嚴重的類別不平衡問題(欺詐交易占比不到1%)

- 原始數據中存在缺失值和異常值,需要進行預處理

## 建模準備

### 評估指標選擇

考慮到欺詐檢測的特殊性,我們選擇以下評估指標:

1. **AUC-ROC曲線下面積**:能夠全面評估模型在不同閾值下的表現

2. **精確率-召回率曲線及F1分數**:特別關注模型對少數類(欺詐交易)的識別能力

### 數據劃分策略

我們采用了時間序列驗證的方式劃分數據:

- 訓練集:70%(按時間順序的前70%交易)

- 驗證集:15%(用于超參數調優)

- 測試集:15%(用于最終評估)

這種劃分方式能更好地模擬真實世界中欺詐檢測的應用場景。

## 預測模型開發

### 模型選擇:XGBoost算法

我選擇了XGBoost作為主要模型,原因如下:

- 對類別不平衡數據集有較好的處理能力

- 能有效處理非線性關系

- 具有內置的特征重要性評估

- 在許多類似欺詐檢測任務中表現優異

### 算法原理

XGBoost是梯度提升決策樹(GBDT)的一種高效實現,其核心原理是通過構建多個弱學習器(決策樹),每個新樹都專注于修正前面樹的預測誤差。

XGBoost的主要算法步驟如下:

# XGBoost算法偽代碼def xgboost_training(data, labels, n_estimators, learning_rate):# 初始化預測為0predictions = [0 for _ in range(len(labels))]# 迭代構建決策樹for i in range(n_estimators):# 計算當前預測的殘差(梯度)gradients = compute_gradients(labels, predictions)hessians = compute_hessians(labels, predictions)# 基于梯度和Hessian矩陣構建新樹tree = build_tree(data, gradients, hessians)# 更新預測值tree_predictions = tree.predict(data)predictions = [pred + learning_rate * tree_predfor pred, tree_pred in zip(predictions, tree_predictions)]return final_model

### 模型開發過程

首先,我進行了深入的數據預處理:

# 數據預處理代碼import pandas as pdimport numpy as npfrom sklearn.preprocessing import StandardScalerfrom sklearn.model_selection import train_test_split# 加載數據df = pd.read_csv('credit_card_fraud.csv')# 處理缺失值df.fillna(df.median(), inplace=True)# 特征縮放scaler = StandardScaler()df[['Amount', 'Time']] = scaler.fit_transform(df[['Amount', 'Time']])# 時間序列劃分df = df.sort_values('Time')train_size = int(0.7 * len(df))val_size = int(0.15 * len(df))train_data = df.iloc[:train_size]val_data = df.iloc[train_size:train_size+val_size]test_data = df.iloc[train_size+val_size:]X_train, y_train = train_data.drop('Class', axis=1), train_data['Class']X_val, y_val = val_data.drop('Class', axis=1), val_data['Class']X_test, y_test = test_data.drop('Class', axis=1), test_data['Class']```接下來,我訓練了初始XGBoost模型:```python# XGBoost模型訓練import xgboost as xgbfrom sklearn.metrics import roc_auc_score, f1_score, precision_recall_curve# 創建DMatrix數據結構dtrain = xgb.DMatrix(X_train, label=y_train)dval = xgb.DMatrix(X_val, label=y_val)# 設置初始參數params = {'objective': 'binary:logistic','eval_metric': 'auc','max_depth': 6,'eta': 0.1,'subsample': 0.8,'colsample_bytree': 0.8,'scale_pos_weight': sum(y_train == 0) / sum(y_train == 1) ?# 處理類別不平衡}# 訓練模型watchlist = [(dtrain, 'train'), (dval, 'eval')]model = xgb.train(params, dtrain, num_boost_round=100,evals=watchlist, early_stopping_rounds=10)```

## 模型評估與優化

### 模型評估

我使用了ROC曲線和精確率-召回率曲線進行全面評估:

# 模型評估代碼import matplotlib.pyplot as pltfrom sklearn.metrics import roc_curve, precision_recall_curve, auc# 在測試集上進行預測dtest = xgb.DMatrix(X_test)y_pred_prob = model.predict(dtest)# 計算ROC曲線fpr, tpr, _ = roc_curve(y_test, y_pred_prob)roc_auc = auc(fpr, tpr)# 計算PR曲線precision, recall, _ = precision_recall_curve(y_test, y_pred_prob)pr_auc = auc(recall, precision)# 計算最佳閾值下的F1分數f1_scores = []thresholds = np.arange(0.1, 0.9, 0.05)for threshold in thresholds:y_pred = (y_pred_prob >= threshold).astype(int)f1_scores.append(f1_score(y_test, y_pred))best_threshold = thresholds[np.argmax(f1_scores)]y_pred_optimized = (y_pred_prob >= best_threshold).astype(int)```

初始模型評估結果:

- AUC-ROC: 0.975

- PR-AUC: 0.856

- 最佳閾值下F1分數: 0.823

### 模型優化

通過網格搜索進行超參數優化:

# 超參數調優代碼from sklearn.model_selection import GridSearchCV# 設置超參數搜索空間param_grid = {'max_depth': [3, 5, 7, 9],'learning_rate': [0.01, 0.05, 0.1, 0.2],'n_estimators': [50, 100, 200],'subsample': [0.6, 0.8, 1.0],'colsample_bytree': [0.6, 0.8, 1.0],'min_child_weight': [1, 3, 5]}# 創建XGBoost分類器xgb_clf = xgb.XGBClassifier(objective='binary:logistic',scale_pos_weight=sum(y_train == 0) / sum(y_train == 1))# 執行網格搜索grid_search = GridSearchCV(estimator=xgb_clf,param_grid=param_grid,scoring='f1',cv=5,verbose=1,n_jobs=-1)grid_search.fit(X_train, y_train)# 獲取最佳參數best_params = grid_search.best_params_print(f"最佳參數: {best_params}")# 使用最佳參數訓練最終模型final_model = xgb.XGBClassifier(**best_params)final_model.fit(X_train, y_train)```

優化后模型評估結果:

- AUC-ROC: 0.991

- PR-AUC: 0.912

- 最佳閾值下F1分數: 0.887

## 結論與討論

通過本次項目,我成功開發了一個高效的信用卡欺詐檢測模型。XGBoost算法在處理類別不平衡數據集方面展現出優異性能,特別是經過超參數優化后,模型在測試集上取得了令人滿意的結果。

模型的主要優勢在于:

1. 高準確率:減少誤報同時保持高檢出率

2. 可解釋性:通過特征重要性分析,了解哪些因素對欺詐檢測最為關鍵

3. 計算效率:相比復雜的神經網絡,XGBoost在實際應用中更具部署優勢

未來工作方向包括:

- 融合多模型集成學習,進一步提升性能

- 探索深度學習方法在欺詐檢測中的應用

- 研究基于異常檢測的無監督學習方法,用于發現新型欺詐模式

通過本項目,我不僅掌握了預測模型開發的完整流程,更深入理解了在現實業務場景中應用機器學習技術的挑戰與策略。

## 參考資料

1. Chen, T., & Guestrin, C. (2016). XGBoost: A Scalable Tree Boosting System.

2. Brownlee, J. (2020). Imbalanced Classification with Python.

3. Pozzolo, A. D., et al. (2015). Calibrating Probability with Undersampling for Unbalanced Classification.

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

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

相關文章

Java 并發編程歸納總結(可重入鎖 | JMM | synchronized 實現原理)

1、鎖的可重入 一個不可重入的鎖,搶占該鎖的方法遞歸調用自己,或者兩個持有該鎖的方法之間發生調用,都會發生死鎖。以之前實現的顯式獨占鎖為例,在遞歸調用時會發生死鎖: public class MyLock implements Lock {/* 僅…

數據治理域——數據同步設計

摘要 本文主要介紹了數據同步的多種方式,包括直連同步、數據文件同步和數據庫日志解析同步。每種方式都有其適用場景、技術特點、優缺點以及適用的數據類型和實時性要求。文章還詳細探討了數據直連同步的特點、工作原理、優點、缺點、適用場景等,并對數…

AI人工智能在教育領域的應用

AI人工智能在教育領域的應用 隨著科技的飛速發展,人工智能(AI)逐漸成為推動教育變革的重要力量。AI在教育領域的應用不僅改變了傳統的教學模式,還為個性化學習、教育資源優化和教育管理帶來了前所未有的機遇。本文將從多個方面探…

ohttps開啟群暉ssl證書自動更新

開啟群暉ssl證書自動更新OHTTPS ohttps是一個免費自動簽發ssl證書、管理、部署的項目。 https://ohttps.com 本文舉例以ohttps項目自動部署、更新群暉的ssl證書。 部署 簽發證書 打開ohttps-證書管理-創建證書-按你實際情況創建證書。創建部署節點 打開Ohttps-部署節點-添加…

ElasticSearch聚合操作案例

1、根據color分組統計銷售數量 只執行聚合分組,不做復雜的聚合統計。在ES中最基礎的聚合為terms,相當于 SQL中的count。 在ES中默認為分組數據做排序,使用的是doc_count數據執行降序排列。可以使用 _key元數據,根據分組后的字段數…

SQLite 數據庫常見問題及解決方法

一、數據庫文件鎖定問題 1. 問題表現 在多線程或多進程環境下訪問 SQLite 數據庫時,常常會出現數據庫文件被鎖定的情況。當一個進程對數據庫執行寫操作時,其他進程的讀寫操作都會被阻塞,導致應用程序出現卡頓甚至無響應。比如在移動應用開發…

DeepSeek基礎:PPO、DPO、GRPO概念詳解

DeepSeek-R1 的強化學習方案中,其亮點之一在于通過 GRPO 算法取代RLHF 常用的 PPO,通過盡可能減少人類標注數據,設計純 RL 的環境,用精心設計的獎勵機制來訓練模型自己學會推理。那么什么是PPO、GRPO,其產生的背景、核…

一分鐘了解機器學習

一分鐘了解機器學習 A Minute to Know About Machine Learning By JacksonML 1. 什么是機器學習? 機器學習(Machine Learning,ML) 是人工智能的分支,通過從數據中自動學習規律,使計算機無需顯式編程即可完成任務。…

mvc-service引入

什么是業務層 1)Model1(JSP)和Model2(模糊的mvc): MVC:Model(模型),View(視圖),Controller(控制器) 視圖層:用于數據展示以及用戶交互的界…

第一次做逆向

題目來源:ctf.show 1、下載附件,發現一個exe和一個txt文件 看看病毒加沒加殼,發現沒加那就直接放IDA 放到IDA找到main主函數,按F5反編譯工具就把他還原成類似C語言的代碼 然后我們看邏輯,將flag.txt文件的內容進行加…

docker(四)使用篇二:docker 鏡像

在上一章中,我們介紹了 docker 鏡像倉庫,本文就來介紹 docker 鏡像。 一、什么是鏡像 docker 鏡像本質上是一個 read-only 只讀文件, 這個文件包含了文件系統、源碼、庫文件、依賴、工具等一些運行 application 所必須的文件。 我們可以把…

k8s 1.10.26 一次containerd失敗引發kubectl不可用問題

k8s 1.10.26 一次containerd失敗引發kubectl不可用問題 開機k8s 1.10.26時,報以下錯誤 [rootmaster ~]# kubectl get no E0515 08:03:00.914894 7993 memcache.go:265] couldnt get current server API group list: Get "https://192.168.80.50:6443/api?…

今日積累:若依框架配置QQ郵箱,來發郵件,注冊賬號使用

QQ郵箱SMTP服務器設置 首先,我們需要了解QQ郵箱的SMTP服務器地址。對于QQ郵箱,SMTP服務器地址通常是smtp.qq.com。這個地址適用于所有使用QQ郵箱發送郵件的客戶端。 QQ郵箱SMTP端口設置 QQ郵箱提供了兩種加密方式:SSL和STARTTLS。根據您選…

無縫部署您的應用程序:將 Jenkins Pipelines 與 ArgoCD 集成

在 DevOps 領域,自動化是主要目標之一。這包括自動化軟件部署方式。與其依賴某人在部署軟件的機器上進行 rsync/FTP/編寫軟件,不如使用 CI/CD 的概念。 CI,即持續集成,是通過代碼提交創建工件的步驟。這可以是 Docker 鏡像&#…

4.2.3 Thymeleaf標準表達式 - 5. 片段表達式

在本次實戰中,我們通過 Thymeleaf 的片段表達式實現了模板的模塊化和復用。首先,我們定義了一個導航欄片段 navbar,并通過參數 activeTab 動態高亮當前激活的標簽。然后,我們在多個頁面(如主頁、關于頁和聯系頁&#x…

網安面試經(1)

1.說說IPsec VPN 答:IPsec VPN是利用IPsec協議構建的安全虛擬網絡。它通過加密技術,在公共網絡中創建加密隧道,確保數據傳輸的保密性、完整性和真實性。常用于企業分支互聯和遠程辦公,能有效防范數據泄露與篡改,但部署…

【C++/Qt shared_ptr 與 線程池】合作使用案例

以下是一個結合 std::shared_ptr 和 Qt 線程池(QThreadPool)的完整案例,展示了如何在多線程任務中安全管理資源,避免內存泄漏。 案例場景 任務目標:在后臺線程中處理一個耗時的圖像檢測任務,任務對象通過 …

【Unity】 HTFramework框架(六十五)ScrollList滾動數據列表

更新日期:2025年5月16日。 Github 倉庫:https://github.com/SaiTingHu/HTFramework Gitee 倉庫:https://gitee.com/SaiTingHu/HTFramework 索引 一、ScrollList滾動數據列表二、使用ScrollList1.快捷創建ScrollList2.ScrollList的屬性3.自定義…

經典案例 | 筑基與躍升:解碼制造企業產供銷協同難題

引言 制造企業如何在投產初期突破管理瓶頸,實現高效運營?G公司作為某大型集團的新建子公司,面對產供銷流程缺失、跨部門協同低效等難題,選擇與AMT企源合作開展流程優化。 項目通過端到端流程體系搭建、標準化操作規范制定及長效管…

【Python 操作 MySQL 數據庫】

在 Python 中操作 MySQL 數據庫主要通過 pymysql 或 mysql-connector-python 庫實現。以下是完整的技術指南,包含連接管理、CRUD 操作和最佳實踐: 一、環境準備 1. 安裝驅動庫 pip install pymysql # 推薦(純Python實現&#xff0…