Spaces:
Runtime error
Runtime error
| from fastapi import FastAPI, HTTPException | |
| from pydantic import BaseModel | |
| import joblib | |
| import pandas as pd | |
| from fastapi.middleware.cors import CORSMiddleware | |
| # 1. Uygulamayı Başlat | |
| app = FastAPI(title="Credit Risk API", description="Kredi Risk Tahmin Modeli Servisi") | |
| # 2. CORS Ayarları (Frontend'in bu API'ye erişebilmesi için gerekli) | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], # Güvenlik için gerçek projede sadece frontend URL'ini yazın | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| # 3. Eğitilmiş Modeli Yükle | |
| try: | |
| model = joblib.load('credit_risk_model.pkl') | |
| print("Model başarıyla yüklendi.") | |
| except Exception as e: | |
| print(f"Model yüklenirken hata oluştu: {e}") | |
| # Hata durumunda boş bir model değişkeni (Uygulama çökmesin diye) | |
| model = None | |
| # 4. Veri Modeli (Frontend'den beklenen veri formatı) | |
| # Buradaki isimler CSV'deki kolon isimleriyle birebir aynı olmalı. | |
| class LoanApplication(BaseModel): | |
| person_age: int | |
| person_income: float | |
| person_home_ownership: str # Örn: RENT, OWN, MORTGAGE | |
| person_emp_length: float | |
| loan_intent: str # Örn: EDUCATION, MEDICAL, VENTURE | |
| loan_grade: str # Örn: A, B, C, D | |
| loan_amnt: float | |
| loan_int_rate: float | |
| loan_percent_income: float | |
| cb_person_default_on_file: str # Y veya N | |
| cb_person_cred_hist_length: int | |
| # 5. Ana Sayfa (Health Check) | |
| def read_root(): | |
| return {"message": "Credit Risk API Çalışıyor! /docs adresine giderek test edebilirsin."} | |
| # 6. Tahmin Endpoint'i | |
| def predict_risk(data: LoanApplication): | |
| if not model: | |
| raise HTTPException(status_code=500, detail="Model yüklenemedi, sunucu hatası.") | |
| # Gelen veriyi (JSON) Pandas DataFrame'e çevir | |
| # Çünkü modelimiz (Pipeline) DataFrame bekliyor. | |
| input_df = pd.DataFrame([data.dict()]) | |
| try: | |
| # Tahmin Yap | |
| prediction = model.predict(input_df)[0] # 0 veya 1 döner | |
| probability = model.predict_proba(input_df)[0][1] # 1 olma (Batık) ihtimali | |
| # Sonucu Hazırla | |
| result = { | |
| "prediction": int(prediction), | |
| "risk_score": round(float(probability), 4), | |
| "risk_status": "Yüksek Risk (Red)" if prediction == 1 else "Düşük Risk (Onay)", | |
| "risk_percentage": f"%{round(probability * 100, 2)}" | |
| } | |
| return result | |
| except Exception as e: | |
| raise HTTPException(status_code=500, detail=f"Tahmin sırasında hata: {str(e)}") | |
| # Bu dosya 'python main.py' ile çalıştırılırsa uvicorn'u tetikle | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run(app, host="127.0.0.1", port=8000) |