| |
| import streamlit as st |
| import joblib |
| import pandas as pd |
| import os |
| from dotenv import load_dotenv |
|
|
| |
| |
| |
| |
| load_dotenv() |
|
|
| |
| ruta_base = os.getenv("PROYECTO_RUTA_BASE") |
|
|
| |
| if not ruta_base: |
| st.error("Error Crítico: La variable 'PROYECTO_RUTA_BASE' no se encontró en el archivo .env.") |
| st.stop() |
|
|
| |
| CARPETA_PROCESADO = os.path.join(ruta_base, "PROCESADO") |
| ARCHIVO_PIPELINE = os.path.join(CARPETA_PROCESADO, "modelo_prioridad_pipeline_FINAL.joblib") |
| ARCHIVO_CSV = os.path.join(CARPETA_PROCESADO, "reporte_mesa_ayuda_COMBINADO.csv") |
|
|
| |
| |
| |
| @st.cache_data(show_spinner=False) |
| def cargar_pipeline(path): |
| return joblib.load(path) |
|
|
| @st.cache_data(show_spinner=False) |
| def cargar_csv(path): |
| return pd.read_csv(path) |
|
|
| pipeline = cargar_pipeline(ARCHIVO_PIPELINE) |
| df_csv = cargar_csv(ARCHIVO_CSV) |
|
|
| |
| |
| |
| categorias = sorted(df_csv['Categoria'].dropna().unique()) |
| grupos_asignados = sorted(df_csv['Grupo_Asignado'].dropna().unique()) |
| areas_solicitantes = sorted(df_csv['Area_Solicitante'].dropna().unique()) |
|
|
| |
| |
| |
| st.title("Predictor de Prioridad de Tickets") |
| st.write("📌 Ingresa los detalles del ticket y obtén la predicción automática de prioridad.") |
|
|
| |
| |
| |
| with st.form("form_ticket"): |
| categoria = st.selectbox("Categoría", categorias) |
| grupo_asignado = st.selectbox("Grupo Asignado", grupos_asignados) |
| area_solicitante = st.selectbox("Área Solicitante", areas_solicitantes) |
|
|
| submitted = st.form_submit_button("Predecir Prioridad") |
|
|
| |
| |
| |
| if submitted: |
| |
| df_input = pd.DataFrame([{ |
| "Categoria": categoria, |
| "Grupo_Asignado": grupo_asignado, |
| "Area_Solicitante": area_solicitante, |
| "Asunto": "No informado" |
| }]) |
|
|
| pred = pipeline.predict(df_input)[0] |
| proba = pipeline.predict_proba(df_input)[0] |
|
|
| st.subheader("🎯 Resultado de la predicción") |
| st.write(f"**Prioridad predicha:** {pred}") |
|
|
| st.subheader("📊 Probabilidades por clase") |
| for clase, p in zip(pipeline.classes_, proba): |
| st.write(f"- {clase}: {p:.2f}") |
|
|