En este proyecto, aplicaremos los conceptos y técnicas aprendidas en los módulos anteriores para desarrollar un modelo de Machine Learning que prediga los precios de viviendas. Este proyecto práctico te permitirá consolidar tus conocimientos y habilidades en el preprocesamiento de datos, selección de características, entrenamiento de modelos y evaluación de su rendimiento.

Objetivos del Proyecto

  1. Comprender y explorar el conjunto de datos: Realizar un análisis exploratorio de los datos (EDA) para entender las características y relaciones en el conjunto de datos.
  2. Preprocesar los datos: Limpiar, transformar y preparar los datos para el modelado.
  3. Seleccionar y entrenar modelos de Machine Learning: Probar diferentes algoritmos de regresión y seleccionar el mejor modelo.
  4. Evaluar el rendimiento del modelo: Utilizar métricas de evaluación para medir la precisión del modelo.
  5. Optimizar el modelo: Ajustar hiperparámetros y mejorar el rendimiento del modelo.

Paso 1: Comprender y explorar el conjunto de datos

Descripción del Conjunto de Datos

Utilizaremos el conjunto de datos de precios de viviendas de Ames, Iowa, disponible en Kaggle. Este conjunto de datos contiene 79 variables explicativas que describen (casi) todos los aspectos de las viviendas residenciales en Ames, Iowa.

Análisis Exploratorio de Datos (EDA)

El primer paso es cargar y explorar el conjunto de datos para entender su estructura y contenido.

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# Cargar el conjunto de datos
data = pd.read_csv('train.csv')

# Mostrar las primeras filas del conjunto de datos
print(data.head())

# Resumen estadístico del conjunto de datos
print(data.describe())

# Información sobre los tipos de datos y valores faltantes
print(data.info())

# Visualización de la distribución de precios de las viviendas
sns.histplot(data['SalePrice'], kde=True)
plt.title('Distribución de Precios de Viviendas')
plt.xlabel('Precio de Venta')
plt.ylabel('Frecuencia')
plt.show()

Ejercicio 1: Realizar un análisis exploratorio de datos

  1. Cargar el conjunto de datos.
  2. Mostrar las primeras filas del conjunto de datos.
  3. Obtener un resumen estadístico del conjunto de datos.
  4. Visualizar la distribución de precios de las viviendas.

Solución:

# Cargar el conjunto de datos
data = pd.read_csv('train.csv')

# Mostrar las primeras filas del conjunto de datos
print(data.head())

# Resumen estadístico del conjunto de datos
print(data.describe())

# Información sobre los tipos de datos y valores faltantes
print(data.info())

# Visualización de la distribución de precios de las viviendas
sns.histplot(data['SalePrice'], kde=True)
plt.title('Distribución de Precios de Viviendas')
plt.xlabel('Precio de Venta')
plt.ylabel('Frecuencia')
plt.show()

Paso 2: Preprocesar los datos

Limpieza de Datos

Identificaremos y manejaremos los valores faltantes, y transformaremos las variables categóricas en variables numéricas.

# Identificar valores faltantes
missing_data = data.isnull().sum().sort_values(ascending=False)
missing_data = missing_data[missing_data > 0]
print(missing_data)

# Manejo de valores faltantes (ejemplo: rellenar con la mediana)
data['LotFrontage'].fillna(data['LotFrontage'].median(), inplace=True)

# Transformar variables categóricas en variables numéricas
data = pd.get_dummies(data)

Ejercicio 2: Manejar valores faltantes y transformar variables categóricas

  1. Identificar las columnas con valores faltantes.
  2. Rellenar los valores faltantes con la mediana.
  3. Transformar las variables categóricas en variables numéricas.

Solución:

# Identificar valores faltantes
missing_data = data.isnull().sum().sort_values(ascending=False)
missing_data = missing_data[missing_data > 0]
print(missing_data)

# Manejo de valores faltantes (ejemplo: rellenar con la mediana)
data['LotFrontage'].fillna(data['LotFrontage'].median(), inplace=True)

# Transformar variables categóricas en variables numéricas
data = pd.get_dummies(data)

Paso 3: Seleccionar y entrenar modelos de Machine Learning

División del Conjunto de Datos

Dividiremos el conjunto de datos en un conjunto de entrenamiento y un conjunto de prueba.

from sklearn.model_selection import train_test_split

# Separar las características (X) y la variable objetivo (y)
X = data.drop('SalePrice', axis=1)
y = data['SalePrice']

# Dividir el conjunto de datos en entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

Entrenamiento de Modelos

Probaremos diferentes algoritmos de regresión, como la regresión lineal y el bosque aleatorio.

from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error

# Modelo de Regresión Lineal
lr = LinearRegression()
lr.fit(X_train, y_train)
y_pred_lr = lr.predict(X_test)
mse_lr = mean_squared_error(y_test, y_pred_lr)
print(f'MSE de Regresión Lineal: {mse_lr}')

# Modelo de Bosque Aleatorio
rf = RandomForestRegressor(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
y_pred_rf = rf.predict(X_test)
mse_rf = mean_squared_error(y_test, y_pred_rf)
print(f'MSE de Bosque Aleatorio: {mse_rf}')

Ejercicio 3: Entrenar y evaluar modelos de Machine Learning

  1. Dividir el conjunto de datos en entrenamiento y prueba.
  2. Entrenar un modelo de regresión lineal y evaluar su rendimiento.
  3. Entrenar un modelo de bosque aleatorio y evaluar su rendimiento.

Solución:

from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error

# Modelo de Regresión Lineal
lr = LinearRegression()
lr.fit(X_train, y_train)
y_pred_lr = lr.predict(X_test)
mse_lr = mean_squared_error(y_test, y_pred_lr)
print(f'MSE de Regresión Lineal: {mse_lr}')

# Modelo de Bosque Aleatorio
rf = RandomForestRegressor(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
y_pred_rf = rf.predict(X_test)
mse_rf = mean_squared_error(y_test, y_pred_rf)
print(f'MSE de Bosque Aleatorio: {mse_rf}')

Paso 4: Evaluar el rendimiento del modelo

Métricas de Evaluación

Utilizaremos el error cuadrático medio (MSE) y el coeficiente de determinación (R²) para evaluar el rendimiento de los modelos.

from sklearn.metrics import r2_score

# Evaluación del modelo de Regresión Lineal
r2_lr = r2_score(y_test, y_pred_lr)
print(f'R² de Regresión Lineal: {r2_lr}')

# Evaluación del modelo de Bosque Aleatorio
r2_rf = r2_score(y_test, y_pred_rf)
print(f'R² de Bosque Aleatorio: {r2_rf}')

Ejercicio 4: Evaluar el rendimiento del modelo

  1. Calcular el coeficiente de determinación (R²) para el modelo de regresión lineal.
  2. Calcular el coeficiente de determinación (R²) para el modelo de bosque aleatorio.

Solución:

from sklearn.metrics import r2_score

# Evaluación del modelo de Regresión Lineal
r2_lr = r2_score(y_test, y_pred_lr)
print(f'R² de Regresión Lineal: {r2_lr}')

# Evaluación del modelo de Bosque Aleatorio
r2_rf = r2_score(y_test, y_pred_rf)
print(f'R² de Bosque Aleatorio: {r2_rf}')

Paso 5: Optimizar el modelo

Optimización de Hiperparámetros

Utilizaremos la búsqueda en cuadrícula (Grid Search) para encontrar los mejores hiperparámetros para el modelo de bosque aleatorio.

from sklearn.model_selection import GridSearchCV

# Definir el espacio de búsqueda de hiperparámetros
param_grid = {
    'n_estimators': [50, 100, 200],
    'max_depth': [None, 10, 20, 30],
    'min_samples_split': [2, 5, 10],
    'min_samples_leaf': [1, 2, 4]
}

# Búsqueda en cuadrícula
grid_search = GridSearchCV(estimator=rf, param_grid=param_grid, cv=3, n_jobs=-1, verbose=2)
grid_search.fit(X_train, y_train)

# Mejor modelo
best_rf = grid_search.best_estimator_
y_pred_best_rf = best_rf.predict(X_test)
mse_best_rf = mean_squared_error(y_test, y_pred_best_rf)
r2_best_rf = r2_score(y_test, y_pred_best_rf)
print(f'MSE del Mejor Bosque Aleatorio: {mse_best_rf}')
print(f'R² del Mejor Bosque Aleatorio: {r2_best_rf}')

Ejercicio 5: Optimizar el modelo de bosque aleatorio

  1. Definir el espacio de búsqueda de hiperparámetros.
  2. Realizar la búsqueda en cuadrícula para encontrar los mejores hiperparámetros.
  3. Evaluar el rendimiento del mejor modelo.

Solución:

from sklearn.model_selection import GridSearchCV

# Definir el espacio de búsqueda de hiperparámetros
param_grid = {
    'n_estimators': [50, 100, 200],
    'max_depth': [None, 10, 20, 30],
    'min_samples_split': [2, 5, 10],
    'min_samples_leaf': [1, 2, 4]
}

# Búsqueda en cuadrícula
grid_search = GridSearchCV(estimator=rf, param_grid=param_grid, cv=3, n_jobs=-1, verbose=2)
grid_search.fit(X_train, y_train)

# Mejor modelo
best_rf = grid_search.best_estimator_
y_pred_best_rf = best_rf.predict(X_test)
mse_best_rf = mean_squared_error(y_test, y_pred_best_rf)
r2_best_rf = r2_score(y_test, y_pred_best_rf)
print(f'MSE del Mejor Bosque Aleatorio: {mse_best_rf}')
print(f'R² del Mejor Bosque Aleatorio: {r2_best_rf}')

Conclusión

En este proyecto, hemos desarrollado un modelo de Machine Learning para predecir los precios de viviendas utilizando el conjunto de datos de Ames, Iowa. Hemos seguido un flujo de trabajo típico de Machine Learning que incluye la comprensión y exploración de datos, preprocesamiento, selección y entrenamiento de modelos, evaluación del rendimiento y optimización del modelo. Este proyecto práctico te ha permitido aplicar los conceptos y técnicas aprendidas en los módulos anteriores y te ha preparado para abordar problemas similares en el mundo real.

Resumen de Conceptos Clave

  • Análisis Exploratorio de Datos (EDA): Comprender y explorar el conjunto de datos.
  • Preprocesamiento de Datos: Limpieza, transformación y preparación de datos.
  • Entrenamiento de Modelos: Selección y entrenamiento de algoritmos de Machine Learning.
  • Evaluación del Rendimiento: Uso de métricas para medir la precisión del modelo.
  • Optimización de Modelos: Ajuste de hiperparámetros para mejorar el rendimiento del modelo.

Próximos Pasos

  • Aplicar técnicas avanzadas de Machine Learning y optimización en otros proyectos.
  • Explorar diferentes conjuntos de datos y problemas de predicción.
  • Continuar aprendiendo y practicando para mejorar tus habilidades en Machine Learning.

¡Felicidades por completar este proyecto!

Curso de Machine Learning

Módulo 1: Introducción al Machine Learning

Módulo 2: Fundamentos de Estadística y Probabilidad

Módulo 3: Preprocesamiento de Datos

Módulo 4: Algoritmos de Machine Learning Supervisado

Módulo 5: Algoritmos de Machine Learning No Supervisado

Módulo 6: Evaluación y Validación de Modelos

Módulo 7: Técnicas Avanzadas y Optimización

Módulo 8: Implementación y Despliegue de Modelos

Módulo 9: Proyectos Prácticos

Módulo 10: Recursos Adicionales

© Copyright 2024. Todos los derechos reservados