Spaces:
Sleeping
Sleeping
| from fastapi import FastAPI | |
| from pydantic import BaseModel | |
| import joblib | |
| import numpy as np | |
| import pandas as pd | |
| app = FastAPI(title="EPL Predictions") | |
| # Load model | |
| try: | |
| model = joblib.load('simple_rf_model.joblib') | |
| scaler = joblib.load('simple_scaler.joblib') | |
| print("Models loaded successfully") | |
| except: | |
| model = None | |
| scaler = None | |
| print("Failed to load models") | |
| class MatchRequest(BaseModel): | |
| home_team: str | |
| away_team: str | |
| home_xg: float = 1.5 | |
| away_xg: float = 1.3 | |
| class PredictionResponse(BaseModel): | |
| home_team: str | |
| away_team: str | |
| home_win: float | |
| draw: float | |
| away_win: float | |
| prediction: str | |
| confidence: float | |
| def root(): | |
| return {"status": "EPL Prediction API", "model_loaded": model is not None} | |
| def health(): | |
| return {"status": "healthy", "models_loaded": model is not None} | |
| def predict(match: MatchRequest): | |
| if model is None or scaler is None: | |
| return {"error": "Models not loaded"} | |
| # Prepare features | |
| features = pd.DataFrame([{ | |
| 'home_xg': match.home_xg * 0.82, # Apply calibration | |
| 'away_xg': match.away_xg * 0.82 | |
| }]) | |
| # Scale and predict | |
| X_scaled = scaler.transform(features) | |
| probs = model.predict_proba(X_scaled)[0] | |
| # Map probabilities (0=away, 1=draw, 2=home) | |
| away_prob = probs[0] | |
| draw_prob = probs[1] if len(probs) > 2 else 0.25 | |
| home_prob = probs[2] if len(probs) > 2 else probs[1] | |
| # Get prediction | |
| if home_prob > draw_prob and home_prob > away_prob: | |
| prediction = "Home" | |
| confidence = home_prob | |
| elif away_prob > draw_prob: | |
| prediction = "Away" | |
| confidence = away_prob | |
| else: | |
| prediction = "Draw" | |
| confidence = draw_prob | |
| return PredictionResponse( | |
| home_team=match.home_team, | |
| away_team=match.away_team, | |
| home_win=float(home_prob), | |
| draw=float(draw_prob), | |
| away_win=float(away_prob), | |
| prediction=prediction, | |
| confidence=float(confidence) | |
| ) | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run(app, host="0.0.0.0", port=7860) |