¿Qué es un modelo de IA?

Un modelo de Inteligencia Artificial (IA) es un sistema que aprende patrones a partir de datos para hacer predicciones o tomar decisiones.

¿Qué es Scikit-learn?

Scikit-learn es una biblioteca de Python para el aprendizaje automático que proporciona herramientas para la clasificación, regresión, clustering y reducción de dimensionalidad.

Construcción de un modelo en Scikit-learn

Para construir un modelo en Scikit-learn, se sigue generalmente el siguiente flujo de trabajo:

Predicción de Precios de Vivienda en Melbourne

Utilizando Scikit-Learn para construir un modelo predictivo con datos de Kaggle.

Desacargar dataset de precios en Melbourne

El dataset contiene información sobre propiedades en Melbourne, incluyendo precios, ubicación y características.
DESCARGAR

import pandas as pd

# Cargar los datos desde el archivo CSV
df = pd.read_csv('melb_data.csv')

# Mostrar las primeras filas del dataset
df.head()
            

Exploración de Datos

Análisis exploratorio de datos (EDA) para entender la distribución y las relaciones entre variables.

import matplotlib.pyplot as plt
import seaborn as sns

# Visualizar la distribución de precios de las viviendas
sns.histplot(df['Price'], bins=50, kde=True)
plt.show()

# Relación entre número de habitaciones y precio
plt.figure(figsize=(8, 6))
sns.boxplot(x=df['Rooms'], y=df['Price'])
plt.xlabel("Número de Habitaciones")
plt.ylabel("Precio")
plt.title("Relación entre Habitaciones y Precio")
plt.show()
            

Preprocesamiento

Eliminación de valores nulos, selección de características y división de los datos.

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder, StandardScaler

# Eliminar valores nulos para evitar problemas con el modelo
df = df.dropna()

# Seleccionar características relevantes para la predicción
features = ['Rooms', 'Bathroom', 'Landsize', 'BuildingArea', 'YearBuilt']
X = df[features]  # Variables independientes
y = df['Price']   # Variable objetivo

# Dividir los datos en conjuntos de entrenamiento (80%) y prueba (20%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
            

Selección de Modelo

Probamos modelos de aprendizaje automático para encontrar el mejor rendimiento.

from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor

# Crear instancias de los modelos
lr = LinearRegression()  # Regresión Lineal
dt = DecisionTreeRegressor()  # Árbol de Decisión
rf = RandomForestRegressor(n_estimators=100, random_state=42)  # Random Forest
            

Entrenamiento de Modelos

Entrenamos los modelos utilizando los datos de entrenamiento.

# Diccionario para almacenar los modelos
models = {
    'Linear Regression': lr,
    'Decision Tree': dt,
    'Random Forest': rf
}

# Entrenar cada modelo
for name, model in models.items():
    model.fit(X_train, y_train)  # Entrenar el modelo
            

Evaluación de Modelos

Evaluamos el rendimiento de los modelos utilizando métricas como RMSE y R².

from sklearn.metrics import mean_squared_error, r2_score

results = {}

# Evaluar cada modelo
for name, model in models.items():
    y_pred = model.predict(X_test)  # Hacer predicciones
    rmse = mean_squared_error(y_test, y_pred)  # Error cuadrático medio
    r2 = r2_score(y_test, y_pred)  # Coeficiente de determinación
    results[name] = (rmse, r2)
    print(f"{name}: RMSE = {rmse:.2f}, R² = {r2:.2f}")
            

Comparación Visual de Modelos

Visualizamos las métricas de rendimiento para comparar los modelos.

# Comparación visual de los modelos
plt.figure(figsize=(8, 6))
names = list(results.keys())
rmse_values = [results[name][0] for name in names]
r2_values = [results[name][1] for name in names]

# Gráfico de RMSE
plt.subplot(2, 1, 1)
plt.bar(names, rmse_values, color=['blue', 'green', 'red'])
plt.ylabel("RMSE")
plt.title("Comparación de Modelos - RMSE")

# Gráfico de R²
plt.subplot(2, 1, 2)
plt.bar(names, r2_values, color=['blue', 'green', 'red'])
plt.ylabel("R²")
plt.title("Comparación de Modelos - R²")

plt.tight_layout()
plt.show()
            

Resultados y Conclusiones

Revisión de los resultados obtenidos y consideraciones para mejorar el modelo.

El modelo Random Forest mostró el mejor desempeño, pero podríamos mejorarlo ajustando hiperparámetros.