Skip to main content

Prediciendo precios de casas usando Machine Learning

Tan solo imagine que usted es un agente de bienes inmuebles, y desea un sistema que le prediga el precio de una casa, tomando en cuenta factores como número de cuartos y la ubicación de la misma.

Para resolver este problema usaremos conceptos básicos de Machine Learning. Para ello lo primero que ocupamos son datos históricos para entrenar una pequeña red neuronal (los mismos se pueden encontrar en UCI).    

Exploración de datos


De esta información, es importante definir los features (información de entrada que va a definir la salida) y el target (variable que nos interesa predecir).

Dentro de los features tenemos:
  • RM (número de cuartos)
  • LSTAT(% de vecinos cerca de clase baja)
  • PTRATIO (relación de estudiantes y profesores en el vecindario)
Y el target es:

  • MEDV (precio de la casa)

Es importante analizar los datos, sobre todo el target. Como por ejemplo, conocer el mínimo y máximo de los precios,  así como la media, el promedio y la desviación estándar de los mismos. Esto permitirá analizar situaciones como: si aumentamos RM (el número de cuartos) se va a aumentar el precio de las casas (MEDV), por el hecho que se requiere más área de construcción; si se aumenta LSTAT el precio de la casa baja, ya que vecindarios de clase baja hacen que los mismos sean más inseguros reduciendo el costo de las propiedades en esas zonas (muy pocos quieren vivir con esas condiciones) y de igual manera cuando se aumenta PTRATIO, el precio de las casas baja.

Desarrollando un modelo

Ahora bien, ya que se entiende bien el problema, así como los datos que vamos a usar para solucionarlo, es hora de empezar a darle una solución al mismo. Lo primero que ocupamos es revolver los datos aleatoriamente y luego dividirlos, una parte será para el entrenamiento (alrededor de un 80% de los datos) de la red y el resto (20%) será destinado para probar que la solución está prediciendo correctamente los resultados esperados.

Analizando el rendimiento del modelo


El análisis del modelo a usar es muy importante a tomar en cuenta, por el hecho de que es este quien nos va a solucionar el problema y tiene que hacerlo de la mejor forma.  

Partiendo del hecho que se va a usar el Árbol de decisión (Decision Tree) como algoritmo para predecir las casas, se debe determinar cual es el máximo depths permitido para resolver el problema de la forma más eficiente y exacta. Usando gráficas de curvas de aprendizaje se puede ver cual es el valor apropiado a usar, por ejemplo: con un max_depth = 3 se obtiene un alto puntaje (0.8), tanto para el entrenamiento como para las pruebas, y conforme se aumenta los datos estos se mantienen juntos y estables, tendiendo a converger en un mismo punto y el más alto alcanzado (0.8), esto significa que con una mayor cantidad de datos se llegaría al modelo ideal, ya que el modelo se ajusta y se generaliza bien, sin problemas de high bias o high variance.  En cambio con  max_depth = 1 este no genera ni predice bien (el máximo resultado es 0.4),  y se presenta el problema de High Bias (ya que por más datos que se agregue al modelo, este no va a predecir bien los precios de las casas, se va a mantener en 0.4). Adicionalmente, con  max_depth = 10, tampoco se predice bien los datos y se presenta problemas de High Variance (mucho espacio entre los datos entrenados y los validados) o Overfitting (el modelo está sobre entrenado tendiendo a predecir mal los precios de las casas).

Evaluando el rendimiento del modelo


En este punto es importante aclarar conceptos como Grid Search y Cross-Validation. El primero es una técnica para ajustar parámetros al modelo, utilizando la fuerza bruta para generar muestras para cada combinación de parámetros. Y junto con Cross-Validation permite determinar cual es el parámetro que ofrece el mejor rendimiento, ya que K-fold Cross-Calidation es una técnica de validación del modelo en la que la muestra original, donde esta es dividida de forma aleatoria en K submuestras de igual tamaño, y se utiliza una única submuestra como datos de prueba y las K-1 restantes, como datos de entrenamiento.

Finalmente, es hora de unir todo lo evaluado y discutido anteriormente en una sola solución. Usando librerías de Sklearn como ShuffleSplit (para dividir los datos), DecisionTreeRegressor (algoritmo de supervised learning), make_scorer y GridSearchCV, creamos un modelo que mejor se ajuste a la solución que estamos buscandoSi creamos el código y lo corremos vemos que el modelo óptimo que mejor se ajusta, debe tener un valor  de max_depth = 4, independientemente si se usa GridSearchCV o RandomizedSearchCV (algo similar a lo que se discutió anteriormente).


Y por último, es hora de probar nuestro modelo usando datos de prueba reales, de clientes de un agente de bienes inmuebles:

Cliente 1: $406,933.33
Cliente 2: $232,200.00
Cliente 3: $938,053.85

Para los clientes 1 y 2, los precios están por debajo de la media y del promedio; para el cliente 2, parece razonable debido al alto nivel de pobreza y la proporción de estudiantes por maestro; para el cliente 1, también parece razonable debido al nivel de pobreza promedio y la proporción de alumnos por maestro; y el precio de la casa del cliente 3 está muy por encima del precio promedio y de la media, acercándose al precio máximo en el conjunto de datos, esto parece razonable dado el bajo nivel de pobreza, la proporción de estudiantes por maestro y por el alto número de cuartos.

El código completo lo puede ver en Kaggle.

Popular posts from this blog

ISTQB - Foundation Level Agile Tester Recap

ISTQB - Foundation Level Agile Tester Recap This is a summary that will help you to approve the Agile Tester certification test. 1 - Agile Software Development 1.1 - The fundamentals of Agile Software Development  The Agile Manifesto has 4 values : - Individuals and interactions over processes and tools (people-centered) - Working software over big documentations (time to market advantage) - Customer collaboration over contract negotiation (customer requirements) - Responding to change over following plan (change is more important)   The Agile Manifesto has 12 principles : - Satisfy the customer with continuous delivery - Changing requirements - Deliver software frequently (few weeks or months) - Business people and developer must work together - Build projects around motivated individuals - Face to face conversation - Working software is the primary measure of progress - The team should maintain a constant pace indefinitely - Technical excellence and good design - Simplic

RasPI Assistant: Google Assistant + Dialogflow + Raspberry Pi

Would you like to control the TV using your voice without spend a lot of money? ... Amazing right?. So, in this post, I will teach you how to do that and more. Some of my dreams always have been control things without touch them, for example: the television, due to tired to raise the hand to change the channel. So ... let's create a device that can do this action automatically. What things will we need? First, I should understand the problem and be aware about it. For example: if we want to control a TV that is not smart, how will we do that? ... a possibility is to send infrared signals (IR) to transmit the events that the person's desire. Also, if I want that the device can hear me, I may need a microphone. Additionally, it should have a speaker to talk with the people. Further, I will need a database to save all the information, APIs that can help me with the smart logic and cheap electronic components like a Raspberry Pi , resistors, leds, wires an

How to create a simple Chatbot?

Developing an amazing Chatbot ... What is a Chatbot? First to understand how it works, you need to know how it was originated and some algorithms  like  the Natural Language Processing (NLP). It is another AI area, but it is around the language (usually written), it is the component that bridges the gap between human conversation and understanding programmed by a computer. NLP allows the computer to interpret the vast and complicated human language, understand it, process it, and effectively "speak", just like humans. Through the process, the machine has to understand all the jargon that is being using and developing or adapting with the ability to respond, as a human computer. NLP has to do with the creation of systems that process or "understand" the language to perform certain tasks, such as answering questions, analyzing the sentiment in a sentence, making translations between different languages, and another. In the past, the NLP involved a lot