EdwinFdo's picture
Upload 4 files
5e7578c verified
# 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()