FastAPI와 머신러닝을 활용한 실시간 신용카드 사기 탐지 시스템 구축

王林
풀어 주다: 2024-08-13 06:54:33
원래의
651명이 탐색했습니다.

Building a Real-Time Credit Card Fraud Detection System with FastAPI and Machine Learning

소개

신용카드 사기는 금융 업계에 심각한 위협이 되어 매년 수십억 달러의 손실을 초래합니다. 이를 해결하기 위해 사기 거래를 실시간으로 감지하고 방지하는 기계 학습 모델이 개발되었습니다. 이 기사에서는 Python용 최신 웹 프레임워크인 FastAPI와 Kaggle의 인기 있는 신용 카드 사기 탐지 데이터 세트에서 훈련된 Random Forest 분류자를 사용하여 실시간 신용 카드 사기 탐지 시스템을 구축하는 과정을 안내합니다.

프로젝트 개요

이 프로젝트의 목표는 신용카드 거래가 사기일 가능성을 예측하는 웹 서비스를 만드는 것입니다. 이 서비스는 거래 데이터를 받아 전처리한 후 사기 확률과 함께 예측을 반환합니다. 이 시스템은 빠르고 확장 가능하며 기존 금융 시스템에 쉽게 통합되도록 설계되었습니다.

주요 구성 요소

  1. 기계 학습 모델: 사기 거래와 합법적인 거래를 구별하도록 훈련된 랜덤 포레스트 분류기
  2. 데이터 전처리: 모델이 최적으로 작동하도록 트랜잭션 기능을 표준화합니다.
  3. 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단계: 기계 학습 모델 훈련

불균형 데이터 세트를 처리하는 데 적합하고 강력한 예측을 제공하는 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]))
로그인 후 복사

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
로그인 후 복사

그런 다음 컬이나 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를 사용하여 이 모델을 배포함으로써 서비스가 빠르고 확장 가능하며 여러 요청을 동시에 처리할 수 있는지 확인합니다. 이 프로젝트는 보다 정교한 모델, 향상된 기능 엔지니어링 또는 생산 환경과의 통합을 통해 더욱 확장될 수 있습니다.

다음 단계

시스템을 더욱 강화하려면 다음 사항을 고려하세요.

  1. 모델 개선: XGBoost 또는 신경망과 같은 고급 모델을 실험해 보세요.
  2. 특성 엔지니어링: 모델 정확도를 향상시킬 수 있는 추가 특성을 살펴보세요.
  3. 실제 배포: 프로덕션 용도로 AWS 또는 GCP와 같은 클라우드 플랫폼에 애플리케이션을 배포합니다.

위 내용은 FastAPI와 머신러닝을 활용한 실시간 신용카드 사기 탐지 시스템 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿