介紹
信用卡欺詐對金融業構成重大威脅,每年造成數十億美元的損失。為了解決這個問題,人們開發了機器學習模型來實時檢測和防止欺詐交易。在本文中,我們將逐步介紹使用 fastapi(python 的現代 web 框架)以及在 kaggle 流行的信用卡欺詐檢測數據集上訓練的隨機森林分類器構建實時信用卡欺詐檢測系統的過程。
項目概況
該項目的目標是創建一個 web 服務來預測信用卡交易欺詐的可能性。該服務接受交易數據,對其進行預處理,然后返回預測以及欺詐概率。該系統設計快速、可擴展且易于集成到現有的金融系統中。
關鍵部件
- 機器學習模型:經過訓練以區分欺詐交易和合法交易的隨機森林分類器。
- 數據預處理:交易特征標準化,確保模型達到最佳性能。
- api:使用 fastapi 構建的 restful api,用于實時處理預測請求。
第 1 步:準備數據集
本項目使用的數據集是來自 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)
第 2 步:訓練機器學習模型
我們訓練了一個隨機森林分類器,它非常適合處理不平衡的數據集并提供可靠的預測。該模型在過采樣數據上進行訓練,并使用準確度、精確度、召回率和 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]))
第 3 步:構建 fastapi 應用程序
使用 joblib 保存訓練好的模型和縮放器后,我們繼續構建 fastapi 應用程序。選擇 fastapi 是因為它的速度和易用性,使其成為實時應用程序的理想選擇。
創建 api
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))
第 4 步:部署應用程序
要在本地測試應用程序,您可以使用 uvicorn 運行 fastapi 服務器并向 /predict/ 端點發送 post 請求。該服務將處理傳入的請求,擴展數據,并返回交易是否存在欺詐。
本地運行 api
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 部署此模型,我們確保服務不僅快速而且可擴展,能夠同時處理多個請求。該項目可以通過更復雜的模型、改進的特征工程或與生產環境的集成來進一步擴展。
下一步
要進一步增強系統,請考慮以下事項:
- 模型改進:嘗試更高級的模型,如 xgboost 或神經網絡。
- 特征工程:探索可能提高模型準確性的其他功能。
- 真實世界部署:將應用程序部署在 aws 或 gcp 等云平臺上以供生產使用。
以上就是使用 FastAPI 和機器學習構建實時信用卡欺詐檢測系統的詳細內容,更多請關注愛掏網 - it200.com其它相關文章!