信用卡詐欺對金融業構成重大威脅,每年造成數十億美元的損失。為了解決這個問題,人們開發了機器學習模型來即時偵測和防止詐欺交易。在本文中,我們將逐步介紹使用 FastAPI(Python 的現代 Web 框架)以及在 Kaggle 流行的信用卡詐欺偵測資料集上訓練的隨機森林分類器建立即時信用卡詐欺偵測系統的過程。
該專案的目標是建立一個 Web 服務來預測信用卡交易詐欺的可能性。該服務接受交易數據,對其進行預處理,然後返回預測以及欺詐機率。該系統設計快速、可擴展,並且易於整合到現有的金融系統中。
本專案使用的資料集是來自 Kaggle 的信用卡詐欺偵測資料集,其中包含 284,807 筆交易,其中只有 492 筆是詐欺交易。這種類別不平衡帶來了挑戰,但可以透過對少數類別進行過採樣來解決。
這些功能首先使用 scikit-learn 的 StandardScaler 進行標準化。然後將資料集分為訓練集和測試集。鑑於不平衡,在訓練模型之前應用 RandomOverSampler 技術來平衡類別。
from sklearn.preprocessing import StandardScaler from imblearn.over_sampling import RandomOverSampler # Standardize features scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # Balance the dataset ros = RandomOverSampler(random_state=42) X_resampled, y_resampled = ros.fit_resample(X_scaled, y)
我們訓練了一個隨機森林分類器,它非常適合處理不平衡的資料集並提供可靠的預測。該模型在過採樣資料上進行訓練,並使用準確度、精確度、召回率和 AUC-ROC 曲線來評估其效能。
from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import classification_report, roc_auc_score # Train the model model = RandomForestClassifier(n_estimators=100, random_state=42) model.fit(X_resampled, y_resampled) # Evaluate the model y_pred = model.predict(X_test_scaled) print(classification_report(y_test, y_pred)) print("AUC-ROC:", roc_auc_score(y_test, model.predict_proba(X_test_scaled)[:, 1]))
使用 joblib 儲存訓練好的模型和縮放器後,我們繼續建立 FastAPI 應用程式。選擇 FastAPI 是因為其速度快且易於使用,使其成為即時應用程式的理想選擇。
FastAPI 應用程式定義了一個 POST 端點 /predict/,它接受交易資料、對其進行處理並傳回模型的預測和機率。
from fastapi import FastAPI, HTTPException from pydantic import BaseModel import joblib import pandas as pd # Load the trained model and scaler model = joblib.load("random_forest_model.pkl") scaler = joblib.load("scaler.pkl") app = FastAPI() class Transaction(BaseModel): V1: float V2: float # Include all other features used in your model Amount: float @app.post("/predict/") def predict(transaction: Transaction): try: data = pd.DataFrame([transaction.dict()]) scaled_data = scaler.transform(data) prediction = model.predict(scaled_data) prediction_proba = model.predict_proba(scaled_data) return {"fraud_prediction": int(prediction[0]), "probability": float(prediction_proba[0][1])} except Exception as e: raise HTTPException(status_code=400, detail=str(e))
要在本地測試應用程序,您可以使用 uvicorn 運行 FastAPI 伺服器並向 /predict/ 端點發送 POST 請求。該服務將處理傳入請求、擴展資料並傳回交易是否有詐欺。
uvicorn main:app --reload
然後您可以使用curl 或Postman 等工具測試API:
curl -X POST http://127.0.0.1:8000/predict/ \ -H "Content-Type: application/json" \ -d '{"V1": -1.359807134, "V2": -0.072781173, ..., "Amount": 149.62}'
API 將傳回一個 JSON 對象,其中包含詐欺預測和相關機率。
在本文中,我們建立了一個即時信用卡詐欺偵測系統,該系統將機器學習與現代 Web 框架結合。 github 連結在這裡。該系統旨在處理即時交易數據並提供即時預測,使其成為金融機構打擊詐欺的寶貴工具。
透過使用 FastAPI 部署此模型,我們確保服務不僅快速且可擴展,能夠同時處理多個請求。該專案可以透過更複雜的模型、改進的特徵工程或與生產環境的整合來進一步擴展。
要進一步增強系統,請考慮以下事項:
以上是使用 FastAPI 和機器學習建立即時信用卡詐欺偵測系統的詳細內容。更多資訊請關注PHP中文網其他相關文章!