Predicción del precio de la vivienda en EE. UU.

Prediccion Del Precio De La Vivienda En Ee Uu



Construir una casa es uno de los factores desafiantes en nuestras vidas. Antes de la construcción, es posible estimar el precio de su casa basándose en el precio de la casa anterior. Los factores que afectan principalmente el precio de la vivienda incluyen el número total de habitaciones (dormitorio, baño, etc.) y la superficie del terreno. Con esto, podemos estimar el presupuesto necesario para construir la casa.

En esta guía veremos cómo predecir el precio de las casas en EE. UU. utilizando Machine Learning a través de Python. Primero, analizamos el conjunto de datos que utilizamos y luego preprocesamos los datos. Después de eso, visualizamos los atributos que están presentes en el conjunto de datos y aplicamos diferentes algoritmos de aprendizaje automático en el conjunto de datos de entrenamiento (Seattle, Washington, agosto de 2022 - diciembre de 2022). Finalmente, terminamos esta guía prediciendo el precio de algunas casas que están presentes en el conjunto de datos de prueba. Antes de implementar este proyecto, debemos comprender las terminologías de aprendizaje automático que se utilizan en este proyecto.







Regresión

En Machine Learning, si trabaja con datos numéricos, necesita comprender la regresión. La regresión es una técnica de aprendizaje supervisado en aprendizaje automático que se utiliza para comprender la relación entre atributos independientes y atributos dependientes (etiqueta de clase/objetivo). La máquina predice el precio de la vivienda aprendiendo cada registro presente en el conjunto de datos. Por tanto, es un aprendizaje supervisado.



Por ejemplo, en nuestro escenario, los atributos independientes son la cantidad de camas, la cantidad de baños, el tamaño del terreno, el código postal, etc. En base a estos, podemos predecir el precio de nuestra casa. Entonces, estos son atributos independientes que no dependen de nada. El precio es el atributo objetivo o la etiqueta de clase que depende de estos atributos.



1. Regresión lineal

El algoritmo de regresión lineal muestra una relación lineal entre las variables del atributo dependiente (Y) y del atributo independiente (X). Matemáticamente podemos evaluarlo de la siguiente manera:





Y = aX+b

Aquí, 'a' y 'b' son coeficientes lineales.

En Python, LinearRegression() está disponible en el módulo 'sklearn.linear_model'. Veremos cómo especificar esto durante la implementación del proyecto. El siguiente es el modelo con parámetros:



2. Árbol de decisión

Básicamente, un árbol de decisión es una representación gráfica para obtener todas las soluciones posibles a un problema en función de las condiciones proporcionadas mediante los nodos. El nodo Decisión se utiliza para tomar la decisión y el nodo Hoja se refiere al resultado de una decisión específica. Podemos predecir el precio de nuestra casa con el Decision Tree Regresor.

En Python, DecisionTreeRegressor está disponible en el módulo 'sklearn.tree'. Veremos cómo especificar esto durante la implementación del proyecto. El siguiente es el modelo con parámetros:

3. Bosque aleatorio

Random Forest realiza la misma funcionalidad que es similar a un árbol de decisión. Pero se necesita un bosque (colección de árboles de decisión) y combinar (valor medio) todos los resultados de los árboles de decisión. Por ejemplo, el tamaño del bosque aleatorio es 3. Entonces, internamente, se crean tres árboles de decisión y el resultado del precio de la vivienda del primer árbol de decisión es 20000. El resultado del precio de la vivienda del segundo árbol de decisión es 20000. Y el resultado del precio de la vivienda de el último árbol de decisión es 10000. 16.666,666 es el resultado final ((20000+20000+10000)/3).

En Python, RandomForestRegressor está disponible en el módulo 'sklearn.ensemble'. El siguiente es el modelo con parámetros. Podemos especificar el número de árboles en el parámetro “n_estimators”. Es 100 por defecto.

Implementación

Vea rápidamente los pasos necesarios para predecir el precio de la vivienda en EE. UU. Consideramos el conjunto de datos house_train (archivo CSV) con registros de 2016 (utilizado para entrenar el modelo de aprendizaje automático). Luego, predecimos los registros de precio de la casa (505) que están presentes en el archivo house_test.

1. Cargando los conjuntos de datos de entrenamiento y prueba

Pandas es el módulo disponible en Python que se utiliza para el análisis de datos. Utilizamos este módulo para cargar los conjuntos de datos en el entorno Python. Aquí utilizamos el Google Co. como el entorno de código. Esto está disponible de forma gratuita. Sólo se necesita una cuenta de Google.

Primero, necesitamos cargar los archivos desde nuestra PC local a Colab Env. Descargue los conjuntos de datos de aquí .

# Cargue los archivos house_train.csv y house_test.csv en su Google Colab

# Uno después del otro.

de Google. Y AL importar archivos

archivos. subir ( )

read_csv() es la función que se utiliza para cargar los datos CSV en una variable. Toma el nombre del archivo como parámetro.

importar pandas

# Cargue el house_train.csv en la variable train_data

datos_tren = pandas. leer_csv ( 'casas_tren.csv' )

# Cargue house_test.csv en la variable test_data

datos de prueba = pandas. leer_csv ( 'casa_prueba.csv' )

# Almacenar test_data en la variable test_data1

prueba_datos1 = datos de prueba

Veamos las columnas y el recuento de registros no nulos en cada columna. Pandas.DataFrame.info() se utiliza para obtener esta información.

imprimir ( datos_tren. información ( ) )

imprimir ( prueba_datos1. información ( ) )

Producción:

2. Preprocesamiento de datos

En ambos conjuntos de datos, la columna 'lot_size' contiene los valores en pies cuadrados y acre (encontrará la variación al ver las filas en la columna 'lot_size_unit'). Pero el formato debe estar en pies cuadrados. Entonces, necesitamos convertir los valores en la columna 'lot_size' de acre a pies cuadrados. De manera similar, esto debe hacerse para 'test_data1'.

El DataFrame.loc[] se utiliza aquí para encontrar 'lot_size_units' con 'acre' y multiplicar el valor que está presente en 'lot_size' con 43560.

# Convertir los valores de acres del tamaño del lote en pies cuadrados en train_data

datos_tren. lugar [ ( datos_tren [ 'unidades_tamaño_lote' ] == 'acre' ) , 'tamaño del lote' ] = datos_tren [ 'tamaño del lote' ] * 43560

# Convertir los valores de acres del tamaño del lote en pies cuadrados en test_data1

prueba_datos1. lugar [ ( prueba_datos1 [ 'unidades_tamaño_lote' ] == 'acre' ) , 'tamaño del lote' ] = prueba_datos1 [ 'tamaño del lote' ] * 43560

imprimir ( datos_tren. cabeza ( ) )

imprimir ( prueba_datos1. cabeza ( ) )

Producción:

Ahora verá que todos los valores en la columna 'lot_size' son valores de pies cuadrados.

Verá algunos valores faltantes en esta columna. Reemplacemos los valores de NaN que están presentes en las columnas con la media de la misma columna en ambos conjuntos de datos.

El DataFrame['column_name'].fillna() se usa para completar los valores faltantes con la media usando la función mean(). El DataFrame['column_name'].mean() se pasa como parámetro a la función finna(). Mostremos la media y veamos el recuento ahora:

# Complete los valores faltantes presentes en la columna tamaño_lote con la media de los valores existentes

datos_tren [ 'tamaño del lote' ] = datos_tren [ 'tamaño del lote' ] . sentir ( datos_tren [ 'tamaño del lote' ] . significar ( ) )

# Mostrar media

imprimir ( 'Datos del tren Valor medio: ' , datos_tren [ 'tamaño del lote' ] . significar ( ) )

imprimir ( solo ( datos_tren [ 'tamaño del lote' ] ) )

# Complete los valores faltantes presentes en la columna tamaño_lote con la media de los valores existentes

prueba_datos1 [ 'tamaño del lote' ] = prueba_datos1 [ 'tamaño del lote' ] . sentir ( prueba_datos1 [ 'tamaño del lote' ] . significar ( ) )

# Mostrar media

imprimir ( 'Datos de prueba Valor medio: ' , prueba_datos1 [ 'tamaño del lote' ] . significar ( ) )

imprimir ( solo ( prueba_datos1 [ 'tamaño del lote' ] ) )

Producción:

Los valores faltantes que están presentes en la columna 'lot_size' Train Dataset se reemplazan por el valor medio de 18789.95194 y los valores faltantes que están presentes en la columna 'lot_size' Test Dataset se reemplazan por el valor medio de 8961.0

3. Limpieza de datos

Mientras se entrena el modelo, existen algunos atributos innecesarios que no son necesarios para predecir el resultado. En nuestro caso, hay tres atributos que son 'lot_size_units', 'zip_code' y 'size_units' que se eliminarán de ambos conjuntos de datos. Pandas.DataFrame.drop() se utiliza para eliminar estas tres columnas de ambos conjuntos de datos.

datos_tren = datos_tren. gota ( [ 'unidades_tamaño_lote' , 'código postal' , 'tamaño_unidades' ] , eje = 1 )

prueba_datos1 = prueba_datos1. gota ( [ 'unidades_tamaño_lote' , 'código postal' , 'tamaño_unidades' ] , eje = 1 )

imprimir ( datos_tren. información ( ) )

imprimir ( prueba_datos1. información ( ) )

Producción:

Ahora, los conjuntos de datos están en buena forma. Se eliminan las columnas innecesarias y los valores faltantes no existen.

4. Visualización de datos

Creemos un histograma para las columnas de los datos del Tren. La función pandas.DataFrame.hist() se utiliza para generar histogramas para todos los atributos.

datos_tren. historia ( tamaño de higo = ( 4 , 9 ) )

Producción:

Se genera un histograma para las columnas de camas, baños, tamaño, tamaño de lote y precio para los datos del Tren.

Creemos la correlación para todos los campos entre sí. El módulo Plotly.express se utiliza para trazar los valores correlacionados.

importar trama. expresar

corri = datos_tren. corri ( )

# Trazar los datos correlacionados

ver_fig = trama. expresar . estoy mostrando ( corri , texto_auto = Verdadero )

# Mostrar

ver_fig. espectáculo ( )

Producción:

  1. Las camas tienen una correlación de 0,2935 con el precio, -0,059 con el tamaño del lote, 0,77 con el tamaño y 0,65 con los baños.
  2. Los baños están correlacionados 0,3173 con el precio, -0,054 correlacionados con el tamaño del lote, 0,667 correlacionados con los baños y 0,771 correlacionados con las camas.
  3. El tamaño tiene una correlación de 0,444 con el precio, -0,044 con el tamaño del lote, 0,667 con el tamaño y 0,652 con las camas.

5. Preparación del modelo

Necesitamos establecer el precio como objetivo eliminándolo de train_data. Asegúrese de que los atributos que están presentes en los datos de Entrenamiento y Prueba sean los mismos en esta fase.

objetivo = datos_tren [ 'precio' ]

datos_tren = datos_tren. gota ( [ 'precio' ] , eje = 1 )

imprimir ( datos_tren. información ( ) )

imprimir ( prueba_datos1. información ( ) )

Producción:

Ahora, hay cuatro atributos independientes (dormitorios, baños, tamaño y tamaño del lote) y el precio es el atributo dependiente que depende de estos cuatro atributos.

6. Entrenando el modelo

Primero, aplicamos el algoritmo RandomForestRegressor. Importarlo desde el paquete “sklearn.ensemble”. Es una técnica de conjunto.

  1. Cree un modelo a partir de RandomForestRegressor(). No estamos pasando ningún parámetro a este modelo. Entonces, el número de árboles de decisión es 100 por defecto.
  2. Utilice el método fit() para ajustar el modelo. Se necesitan dos parámetros. El primer parámetro son los atributos dependientes y el segundo parámetro es la etiqueta/objetivo de clase.
  3. Utilice el método score() para ver la precisión del modelo. También toma los mismos parámetros similares al método fit().
de aprendió conjunto importar AleatorioBosqueRegresor

# Definir el modelo

modelo1 = AleatorioBosqueRegresor ( )

# Ajustar el modelo

modelo1. adaptar ( datos_tren , objetivo )

# Precisión del modelo

imprimir ( modelo1. puntaje ( datos_tren , objetivo ) * 100 )

Producción:

86.08400889419033

7. Pruebe el modelo y almacene los resultados

Este es el paso final en el que debemos predecir el resultado y almacenarlo.

  1. El método predict() se utiliza para predecir los datos de prueba. Se usa con el modelo y toma la lista anidada de valores/DataFrame.
  2. Utilice el método to_csv() para almacenar los resultados en el archivo CSV.
  3. Descargue el archivo del entorno Python (Google Colab).
# Predecir test_data1 con el modelo1.

datos de prueba [ 'Precio' ] = modelo1. predecir ( prueba_datos1 )

# Guarde los datos_prueba en test_results.csv

datos de prueba. a_csv ( 'test_results.csv' )

# Descargue este archivo de Colab

archivos. descargar ( 'test_results.csv' )

Producción:

Mostremos 20 registros de 505 registros. Puede ver que la columna Precio contiene los valores previstos para cada casa.

Otros modelos

Prediigamos las casas usando DecisionTreeRegressor. Puede importarlo desde el módulo 'sklearn.tree'.

de aprendió árbol importar Árbol De DecisiónRegresor

# Definir el modelo

modelo2 = Árbol De DecisiónRegresor ( )

# Ajustar el modelo

modelo2. adaptar ( datos_tren , objetivo )

# Precisión del modelo

imprimir ( modelo2. puntaje ( datos_tren , objetivo ) * 100 )

# Predecir test_data1 con el modelo1.

datos de prueba [ 'Precio' ] = modelo2. predecir ( prueba_datos1 )

# Guarde los datos_prueba en test_results.csv

datos de prueba. a_csv ( 'test_results.csv' )

# Descargue este archivo de Colab

archivos. descargar ( 'test_results.csv' )

Producción:

99.94183165335028

Puedes ver el resultado previsto aquí:

Prediigamos las casas usando la Egresión Lineal. Importe el modelo desde el módulo “sklearn.linear_model”.

de aprendió Modelo lineal importar Regresión lineal

# Definir el modelo

modelo3 = Regresión lineal ( )

# Ajustar el modelo

modelo3. adaptar ( datos_tren , objetivo )

# Predecir test_data1 con el modelo1.

datos de prueba [ 'Precio' ] = modelo3. predecir ( prueba_datos1 )

# Guarde los datos_prueba en test_results.csv

datos de prueba. a_csv ( 'test_results.csv' )

# Descargue este archivo de Colab

archivos. descargar ( 'test_results.csv' )

Puedes ver el resultado previsto aquí:

Conclusión

Ahora, puede predecir el precio de su casa en función de atributos como la cantidad de habitaciones, el área de su terreno, etc. En esta guía, consideramos los datos reales de las casas de Seattle, Washington. Utilizando técnicas de regresión como regresión lineal, árbol de decisión y bosque aleatorio, predijimos el precio de 505 casas. Todos los pasos (preprocesamiento de datos, limpieza de datos y visualización de datos) que deben realizarse antes de entrenar el modelo se explican paso a paso con fragmentos de código y resultados.