Introducción

En este módulo, exploraremos dos de los modelos más fundamentales en el análisis de datos: la regresión lineal y la regresión logística. Ambos modelos son esenciales para entender cómo las variables independientes pueden predecir una variable dependiente.

Objetivos del Módulo

  1. Comprender los conceptos básicos de la regresión lineal y logística.
  2. Aprender a implementar estos modelos utilizando herramientas de software comunes.
  3. Evaluar la efectividad de los modelos mediante métricas de desempeño.

Regresión Lineal

Conceptos Básicos

La regresión lineal es una técnica estadística utilizada para modelar la relación entre una variable dependiente continua y una o más variables independientes. La fórmula general de una regresión lineal simple es:

\[ y = \beta_0 + \beta_1 x + \epsilon \]

Donde:

  • \( y \) es la variable dependiente.
  • \( x \) es la variable independiente.
  • \( \beta_0 \) es la intersección (constante).
  • \( \beta_1 \) es el coeficiente de la variable independiente.
  • \( \epsilon \) es el término de error.

Ejemplo Práctico

Supongamos que queremos predecir el precio de una casa en función de su tamaño en pies cuadrados.

Código en Python

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

# Generar datos de ejemplo
np.random.seed(0)
tamaño = np.random.rand(100, 1) * 1000  # Tamaño en pies cuadrados
precio = 30000 + 150 * tamaño + np.random.randn(100, 1) * 10000  # Precio en dólares

# Convertir a DataFrame
data = pd.DataFrame({'Tamaño': tamaño.flatten(), 'Precio': precio.flatten()})

# Dividir en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(data[['Tamaño']], data['Precio'], test_size=0.2, random_state=0)

# Crear el modelo de regresión lineal
modelo = LinearRegression()
modelo.fit(X_train, y_train)

# Predicciones
y_pred = modelo.predict(X_test)

# Visualización
plt.scatter(X_test, y_test, color='blue', label='Datos Reales')
plt.plot(X_test, y_pred, color='red', linewidth=2, label='Predicción')
plt.xlabel('Tamaño (pies cuadrados)')
plt.ylabel('Precio ($)')
plt.legend()
plt.show()

Explicación del Código

  1. Generación de Datos: Creamos un conjunto de datos sintéticos con una relación lineal entre el tamaño de la casa y su precio.
  2. División de Datos: Dividimos los datos en conjuntos de entrenamiento y prueba.
  3. Creación del Modelo: Utilizamos LinearRegression de sklearn para crear y entrenar el modelo.
  4. Predicciones y Visualización: Realizamos predicciones y visualizamos los resultados.

Ejercicio Práctico

Ejercicio: Utiliza el conjunto de datos Boston Housing de sklearn.datasets para predecir el precio de las casas en función de todas las características disponibles.

Solución:

from sklearn.datasets import load_boston
from sklearn.metrics import mean_squared_error

# Cargar datos
boston = load_boston()
X = pd.DataFrame(boston.data, columns=boston.feature_names)
y = pd.Series(boston.target)

# Dividir en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# Crear el modelo de regresión lineal
modelo = LinearRegression()
modelo.fit(X_train, y_train)

# Predicciones
y_pred = modelo.predict(X_test)

# Evaluación del modelo
mse = mean_squared_error(y_test, y_pred)
print(f'Error Cuadrático Medio: {mse}')

Regresión Logística

Conceptos Básicos

La regresión logística se utiliza para modelar la probabilidad de un evento binario (sí/no, verdadero/falso). La fórmula general de una regresión logística es:

\[ P(y=1) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 x)}} \]

Donde:

  • \( P(y=1) \) es la probabilidad de que el evento ocurra.
  • \( x \) es la variable independiente.
  • \( \beta_0 \) y \( \beta_1 \) son los coeficientes del modelo.

Ejemplo Práctico

Supongamos que queremos predecir si un estudiante aprobará un examen en función de sus horas de estudio.

Código en Python

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# Generar datos de ejemplo
np.random.seed(0)
horas_estudio = np.random.rand(100, 1) * 10  # Horas de estudio
aprobado = (horas_estudio + np.random.randn(100, 1) > 5).astype(int).flatten()  # 1 si aprobado, 0 si no

# Convertir a DataFrame
data = pd.DataFrame({'Horas de Estudio': horas_estudio.flatten(), 'Aprobado': aprobado})

# Dividir en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(data[['Horas de Estudio']], data['Aprobado'], test_size=0.2, random_state=0)

# Crear el modelo de regresión logística
modelo = LogisticRegression()
modelo.fit(X_train, y_train)

# Predicciones
y_pred = modelo.predict(X_test)

# Evaluación del modelo
accuracy = accuracy_score(y_test, y_pred)
print(f'Precisión del Modelo: {accuracy}')

Explicación del Código

  1. Generación de Datos: Creamos un conjunto de datos sintéticos con una relación entre las horas de estudio y la probabilidad de aprobar.
  2. División de Datos: Dividimos los datos en conjuntos de entrenamiento y prueba.
  3. Creación del Modelo: Utilizamos LogisticRegression de sklearn para crear y entrenar el modelo.
  4. Predicciones y Evaluación: Realizamos predicciones y evaluamos la precisión del modelo.

Ejercicio Práctico

Ejercicio: Utiliza el conjunto de datos Breast Cancer de sklearn.datasets para predecir si un tumor es maligno o benigno en función de todas las características disponibles.

Solución:

from sklearn.datasets import load_breast_cancer
from sklearn.metrics import classification_report

# Cargar datos
cancer = load_breast_cancer()
X = pd.DataFrame(cancer.data, columns=cancer.feature_names)
y = pd.Series(cancer.target)

# Dividir en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# Crear el modelo de regresión logística
modelo = LogisticRegression(max_iter=10000)
modelo.fit(X_train, y_train)

# Predicciones
y_pred = modelo.predict(X_test)

# Evaluación del modelo
print(classification_report(y_test, y_pred))

Conclusión

En este módulo, hemos cubierto los conceptos básicos y la implementación de la regresión lineal y logística. Estos modelos son fundamentales para el análisis de datos y proporcionan una base sólida para técnicas más avanzadas. En el próximo módulo, exploraremos otros modelos de datos como los árboles de decisión y los bosques aleatorios.

© Copyright 2024. Todos los derechos reservados