# app.py import gradio as gr import pandas as pd import numpy as np import joblib # Cargar modelo y codificador modelo = joblib.load("modelo.pkl") le_barrio = joblib.load("barrios_encoder.pkl") # Obtener lista de barrios únicos (para el desplegable) barrios_unicos = le_barrio.classes_.tolist() def predecir_valor(barrio, estrato, area): try: # Codificar barrio if barrio in barrios_unicos: barrio_cod = le_barrio.transform([barrio])[0] else: # Si no está, usar el barrio más común (moda) barrio_cod = 0 # o np.median(le_barrio.transform(barrios_unicos)) # Preparar entrada entrada = np.array([[barrio_cod, estrato, area]]) prediccion = modelo.predict(entrada)[0] valor_formateado = f"${prediccion:,.0f} COP" return valor_formateado except Exception as e: return f"Error: {str(e)}" # Interfaz Gradio with gr.Blocks(title="🏡 Predice tu vivienda en Bucaramanga") as demo: gr.Markdown("# 🏠 ¿Cuánto vale tu vivienda en Bucaramanga?") gr.Markdown("Modelo de predicción basado en datos catastrales públicos del municipio.") with gr.Row(): barrio = gr.Dropdown(choices=barrios_unicos, label="Barrio", value="Girardot") estrato = gr.Slider(1, 6, value=3, step=1, label="Estrato socioeconómico") area = gr.Number(value=70, label="Área privada (m²)", minimum=20, maximum=500) output = gr.Textbox(label="Valor predicho (catastral estimado)") btn = gr.Button("Predecir valor") btn.click(predecir_valor, inputs=[barrio, estrato, area], outputs=output) gr.Markdown(""" > ℹ️ Este modelo usa **valor catastral** como proxy del valor comercial. > Datos: Alcaldía de Bucaramanga - [datos.gov.co](https://www.datos.gov.co) > Proyecto educativo y de código abierto. """) demo.launch()