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
- 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.
- Preprocesar los datos: Limpiar, transformar y preparar los datos para el modelado.
- Seleccionar y entrenar modelos de Machine Learning: Probar diferentes algoritmos de regresión y seleccionar el mejor modelo.
- Evaluar el rendimiento del modelo: Utilizar métricas de evaluación para medir la precisión del modelo.
- 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
- Cargar el conjunto de datos.
- Mostrar las primeras filas del conjunto de datos.
- Obtener un resumen estadístico del conjunto de datos.
- 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
- Identificar las columnas con valores faltantes.
- Rellenar los valores faltantes con la mediana.
- 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
- Dividir el conjunto de datos en entrenamiento y prueba.
- Entrenar un modelo de regresión lineal y evaluar su rendimiento.
- 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
- Calcular el coeficiente de determinación (R²) para el modelo de regresión lineal.
- 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
- Definir el espacio de búsqueda de hiperparámetros.
- Realizar la búsqueda en cuadrícula para encontrar los mejores hiperparámetros.
- 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
- ¿Qué es el Machine Learning?
- Historia y evolución del Machine Learning
- Tipos de Machine Learning
- Aplicaciones del Machine Learning
Módulo 2: Fundamentos de Estadística y Probabilidad
- Conceptos básicos de estadística
- Distribuciones de probabilidad
- Inferencia estadística
- Teorema de Bayes
Módulo 3: Preprocesamiento de Datos
Módulo 4: Algoritmos de Machine Learning Supervisado
- Regresión lineal
- Regresión logística
- Árboles de decisión
- Máquinas de soporte vectorial (SVM)
- K-Vecinos más cercanos (K-NN)
- Redes neuronales
Módulo 5: Algoritmos de Machine Learning No Supervisado
- Clustering: K-means
- Clustering jerárquico
- Análisis de componentes principales (PCA)
- Análisis de agrupamiento DBSCAN
Módulo 6: Evaluación y Validación de Modelos
Módulo 7: Técnicas Avanzadas y Optimización
- Ensemble Learning
- Gradient Boosting
- Redes neuronales profundas (Deep Learning)
- Optimización de hiperparámetros
Módulo 8: Implementación y Despliegue de Modelos
- Frameworks y bibliotecas populares
- Implementación de modelos en producción
- Mantenimiento y monitoreo de modelos
- Consideraciones éticas y de privacidad
Módulo 9: Proyectos Prácticos
- Proyecto 1: Predicción de precios de viviendas
- Proyecto 2: Clasificación de imágenes
- Proyecto 3: Análisis de sentimientos en redes sociales
- Proyecto 4: Detección de fraudes