import pickle from fastapi import FastAPI, HTTPException from pydantic import BaseModel from typing import List import numpy as np # Cargar el modelo desde el archivo .pkl usando joblib import joblib # Define la estructura de entrada esperada para FastAPI class InputData(BaseModel): Gender: int Age: float PlayTimeHours: float InGamePurchases: int SessionsPerWeek: int AvgSessionDurationMinutes: int PlayerLevel: int AchievementsUnlocked: int # Iniciar la aplicación FastAPI app = FastAPI() # Función para cargar el modelo guardado con joblib def load_model(): with open('miarbol.pkl', 'rb') as f: model = pickle.load(f) return model # Cargar el modelo al iniciar la aplicación miarbol = load_model() # Ruta de predicción @app.post("/predict/") async def predict(data: InputData): try: # Convertir los datos de entrada en un array de NumPy para la predicción X_input = np.array([[data.Gender, data.Age, data.PlayTimeHours, data.InGamePurchases, data.SessionsPerWeek, data.AvgSessionDurationMinutes, data.PlayerLevel, data.AchievementsUnlocked]]) # Realizar la predicción utilizando el modelo cargado prediction = miarbol.predict(X_input) # Retornar el resultado de la predicción return {"prediction": prediction[0]} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) # Ruta para verificar el estado de la API @app.get("/status/") async def status(): return {"status": "Modelo cargado y API en funcionamiento"} # Ejemplo de cómo utilizar la API if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)