신용카드 사기는 금융 업계에 심각한 위협이 되어 매년 수십억 달러의 손실을 초래합니다. 이를 해결하기 위해 사기 거래를 실시간으로 감지하고 방지하는 기계 학습 모델이 개발되었습니다. 이 기사에서는 Python용 최신 웹 프레임워크인 FastAPI와 Kaggle의 인기 있는 신용 카드 사기 탐지 데이터 세트에서 훈련된 Random Forest 분류자를 사용하여 실시간 신용 카드 사기 탐지 시스템을 구축하는 과정을 안내합니다.
이 프로젝트의 목표는 신용카드 거래가 사기일 가능성을 예측하는 웹 서비스를 만드는 것입니다. 이 서비스는 거래 데이터를 받아 전처리한 후 사기 확률과 함께 예측을 반환합니다. 이 시스템은 빠르고 확장 가능하며 기존 금융 시스템에 쉽게 통합되도록 설계되었습니다.
이 프로젝트에 사용된 데이터세트는 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)
불균형 데이터 세트를 처리하는 데 적합하고 강력한 예측을 제공하는 Random Forest 분류기를 교육합니다. 모델은 오버샘플링된 데이터를 학습하고 정확도, 정밀도, 재현율 및 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
그런 다음 컬이나 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 개체를 반환합니다.
이 기사에서는 머신러닝과 최신 웹 프레임워크를 결합한 실시간 신용카드 사기 탐지 시스템을 구축했습니다. github 링크는 여기입니다. 이 시스템은 실시간 거래 데이터를 처리하고 즉각적인 예측을 제공하도록 설계되어 사기 방지를 원하는 금융 기관에 유용한 도구입니다.
FastAPI를 사용하여 이 모델을 배포함으로써 서비스가 빠르고 확장 가능하며 여러 요청을 동시에 처리할 수 있는지 확인합니다. 이 프로젝트는 보다 정교한 모델, 향상된 기능 엔지니어링 또는 생산 환경과의 통합을 통해 더욱 확장될 수 있습니다.
시스템을 더욱 강화하려면 다음 사항을 고려하세요.
위 내용은 FastAPI와 머신러닝을 활용한 실시간 신용카드 사기 탐지 시스템 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!