El precio de una vivienda depende de factores que se comportan de formas muy distintas. Algunos son cuasi-reglas ("más de 3 baños dispara el precio en esta zona"); otros son interacciones suaves y continuas (la relación entre metros, antigüedad y barrio). Ningún tipo de modelo captura bien ambas cosas a la vez. Por eso usé un ensemble.
El problema
Estimar el precio de mercado de una vivienda a partir de sus características, con un error lo bastante bajo como para ser útil en una valoración real, y exponerlo como una API de predicción en tiempo real.
Los dos modelos del ensemble
Gradient Boosting Machine: excelente capturando relaciones no lineales y "reglas" abruptas sobre datos tabulares. Es el caballo de batalla de los datos estructurados.
Perceptrón multicapa (MLP): una red neuronal que modela bien las interacciones suaves y continuas entre variables, algo donde los árboles, por su naturaleza escalonada, son más toscos.
Las predicciones de ambos se combinan. El ensemble funciona porque sus errores están poco correlacionados: donde uno falla por su sesgo, el otro tiende a compensar.
Decisiones técnicas
El preprocesado trató con cuidado las variables sesgadas (el precio y la superficie se distribuyen log-normalmente, no normalmente) y las categóricas de localización. El stack es scikit-learn para el GBM y PyTorch para el MLP, servido todo con FastAPI.
Resultados
R² ≈ 0.90: el modelo explica alrededor del 90% de la varianza del precio.
MAE ≈ ±$62K: error medio absoluto.
~11% de error porcentual relativo.
Qué aprendí
Que el ensembling no es hacer trampa: es reconocer que distintos modelos tienen distintos puntos ciegos, y que combinarlos es casi siempre más robusto que pelearse por exprimir el último 0,5% de un único modelo.
Publicado originalmente en adrianmoreno-dev.com.
Top comments (0)