File size: 1,625 Bytes
c52d8d5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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)}"}