EdwinFdo commited on
Commit
5e7578c
·
verified ·
1 Parent(s): d5b4525

Upload 4 files

Browse files

commit ejemplo Machine Learnig
Este proyecto estima el **valor catastral** de una vivienda en Bucaramanga (Colombia)
## 🧠 Modelo
- **Algoritmo**: Random Forest Regressor (`scikit-learn`)
- **Métricas**: MAE, R²

Files changed (4) hide show
  1. README.md +26 -14
  2. app.py +52 -0
  3. requirements.txt +5 -0
  4. vivienda_bucaramanga.py +6 -0
README.md CHANGED
@@ -1,14 +1,26 @@
1
- ---
2
- title: MLvalorcatastral
3
- emoji: 🐢
4
- colorFrom: blue
5
- colorTo: pink
6
- sdk: gradio
7
- sdk_version: 5.49.1
8
- app_file: app.py
9
- pinned: false
10
- license: gpl
11
- short_description: Random Forest Regressor -scikit-learn
12
- ---
13
-
14
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 🏠 Predicción de valor de vivienda en Bucaramanga
2
+
3
+ Este proyecto estima el **valor catastral** de una vivienda en Bucaramanga (Colombia) a partir de:
4
+
5
+ - Barrio
6
+ - Estrato socioeconómico
7
+ - Área privada (m²)
8
+
9
+ ## 📊 Datos utilizados
10
+ - [Listado de Propiedades Horizontales – Bucaramanga](https://www.datos.gov.co/Vivienda-Ciudad-y-Territorio/Listado-de-Propiedades-Horizontales-del-Municipio-/aqq4-hmf7)
11
+ - Información catastral pública de la Alcaldía de Bucaramanga
12
+
13
+ ## 🧠 Modelo
14
+ - **Algoritmo**: Random Forest Regressor (`scikit-learn`)
15
+ - **Métricas**: MAE, R²
16
+ - **Calibración**: No aplicable (es regresión, no clasificación)
17
+
18
+ ## 🚀 Cómo usar
19
+ 1. Selecciona un barrio de Bucaramanga
20
+ 2. Elige el estrato (1 a 6)
21
+ 3. Ingresa el área en m²
22
+ 4. ¡Obtén una estimación inmediata!
23
+
24
+ > ⚠️ Este modelo es **educativo** y no reemplaza una tasación profesional.
25
+
26
+ ## 🌍 Hecho con ❤️ para Bucaramanga, Santander
app.py ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py
2
+ import gradio as gr
3
+ import pandas as pd
4
+ import numpy as np
5
+ import joblib
6
+
7
+ # Cargar modelo y codificador
8
+ modelo = joblib.load("modelo.pkl")
9
+ le_barrio = joblib.load("barrios_encoder.pkl")
10
+
11
+ # Obtener lista de barrios únicos (para el desplegable)
12
+ barrios_unicos = le_barrio.classes_.tolist()
13
+
14
+ def predecir_valor(barrio, estrato, area):
15
+ try:
16
+ # Codificar barrio
17
+ if barrio in barrios_unicos:
18
+ barrio_cod = le_barrio.transform([barrio])[0]
19
+ else:
20
+ # Si no está, usar el barrio más común (moda)
21
+ barrio_cod = 0 # o np.median(le_barrio.transform(barrios_unicos))
22
+
23
+ # Preparar entrada
24
+ entrada = np.array([[barrio_cod, estrato, area]])
25
+ prediccion = modelo.predict(entrada)[0]
26
+
27
+ valor_formateado = f"${prediccion:,.0f} COP"
28
+ return valor_formateado
29
+ except Exception as e:
30
+ return f"Error: {str(e)}"
31
+
32
+ # Interfaz Gradio
33
+ with gr.Blocks(title="🏡 Predice tu vivienda en Bucaramanga") as demo:
34
+ gr.Markdown("# 🏠 ¿Cuánto vale tu vivienda en Bucaramanga?")
35
+ gr.Markdown("Modelo de predicción basado en datos catastrales públicos del municipio.")
36
+
37
+ with gr.Row():
38
+ barrio = gr.Dropdown(choices=barrios_unicos, label="Barrio", value="Girardot")
39
+ estrato = gr.Slider(1, 6, value=3, step=1, label="Estrato socioeconómico")
40
+ area = gr.Number(value=70, label="Área privada (m²)", minimum=20, maximum=500)
41
+
42
+ output = gr.Textbox(label="Valor predicho (catastral estimado)")
43
+ btn = gr.Button("Predecir valor")
44
+ btn.click(predecir_valor, inputs=[barrio, estrato, area], outputs=output)
45
+
46
+ gr.Markdown("""
47
+ > ℹ️ Este modelo usa **valor catastral** como proxy del valor comercial.
48
+ > Datos: Alcaldía de Bucaramanga - [datos.gov.co](https://www.datos.gov.co)
49
+ > Proyecto educativo y de código abierto.
50
+ """)
51
+
52
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ gradio==4.36.0
2
+ scikit-learn==1.5.0
3
+ pandas==2.2.0
4
+ joblib==1.4.0
5
+ numpy==1.26.0
vivienda_bucaramanga.py ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ # === Guardar modelo y codificador ===
2
+ import joblib
3
+
4
+ joblib.dump(modelo, 'modelo.pkl')
5
+ joblib.dump(le_barrio, 'barrios_encoder.pkl')
6
+ print("\n✅ Modelo y codificador guardados.")