api-defecto / app_defecto.py
Francogv's picture
Upload 5 files
c52d8d5 verified
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)}"}