from fastapi import FastAPI, Query import joblib import pandas as pd # Cargar modelo y datos modelo_defecto = joblib.load("modelo_causa_paro.pkl") encoder_defecto = joblib.load("encoder_paro_codigo.pkl") df_defecto = joblib.load("df_codificado_causa_paro.pkl") app = FastAPI() @app.get("/") def root(): return {"mensaje": "API de predicción de defecto"} @app.get("/defecto") def defecto(maquina: str = Query(..., description="Nombre de la máquina")): if maquina not in df_defecto["Maquina"].unique(): return {"error": f"Máquina '{maquina}' no encontrada en datos de defecto."} try: maquina_encoded = df_defecto[df_defecto["Maquina"] == maquina]["Maquina_encoded"].iloc[0] df_maquina = df_defecto[df_defecto["Maquina"] == maquina] exclude_cols_defecto = ["ParoCodigo", "ParoCodigo_encoded", "ParoDescripcion", "Maquina", "FechaHoraEvento"] features_defecto = [col for col in df_defecto.columns if col not in exclude_cols_defecto] fila_test = df_maquina[features_defecto].mean().to_frame().T fila_test["Maquina_encoded"] = maquina_encoded pred = modelo_defecto.predict(fila_test)[0] prob = modelo_defecto.predict_proba(fila_test)[0][pred] causa_paro = encoder_defecto.inverse_transform([pred])[0] return { "tipo": "defecto", "maquina": maquina, "causa_paro_predicha": causa_paro, "probabilidad": round(prob * 100, 2) } except Exception as e: return {"error": f"Error en predicción de defecto: {str(e)}"}