Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Matemáticas para IA, Unidad 9 — Matemáticas de modelos clásicos de ML, 9.1 — Regresión lineal ·

Modelo matemático

Modelo matemático de regresión lineal

Introducción

La regresión lineal es uno de los modelos más fundamentales e importantes en machine learning (ML). Es una técnica que permite predecir una variable continua basándose en una o más variables independientes. Esta técnica es esencial para entender y aplicar muchos conceptos más avanzados en ML, como la optimización y el ajuste de modelos. En este artículo, exploraremos el modelo matemático detrás de la regresión lineal, proporcionando ejemplos prácticos y discutiendo algunos errores comunes a evitar.

Explicación principal con ejemplos

La regresión lineal se basa en una línea que minimiza la distancia total entre sus puntos de datos y el modelo. Matemáticamente, un modelo de regresión lineal simple puede expresarse como:

\[ \hat{y} = \beta_0 + \beta_1 x \]

donde:

  • \( \hat{y} \) es el valor predicho.
  • \( \beta_0 \) es la intercepción (valor donde la línea se cruza con el eje y).
  • \( \beta_1 \) es la pendiente de la línea, indicando cuánto cambia \( \hat{y} \) para un cambio unitario en \( x \).

Para calcular los valores óptimos de \( \beta_0 \) y \( \beta_1 \), se minimiza la suma de los errores al cuadrado (SSE). Este proceso es conocido como el método del error cuadrático medio (Mean Squared Error, MSE):

\[ SSE = \sum_{i=1}^{n} (y_i - (\beta_0 + \beta_1 x_i))^2 \]

Una forma común de resolver este problema es mediante el uso del método de los mínimos cuadrados ordinarios. Este método proporciona soluciones analíticas para \( \beta_0 \) y \( \beta_1 \):

\[ \hat{\beta}_1 = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sum (x_i - \bar{x})^2} \] \[ \hat{\beta}_0 = \bar{y} - \hat{\beta}_1 \bar{x} \]

donde:

  • \( \bar{x} \) y \( \bar{y} \) son las medias de \( x \) e \( y \), respectivamente.

Para ilustrar esto, vamos a utilizar un ejemplo en Python:

import numpy as np

# Datos de ejemplo
x = np.array([1, 2, 3, 4, 5])
y = np.array([2.2, 4.0, 6.8, 7.9, 10.1])

def calcular_beta_0_y_beta_1(x, y):
    n = len(x)
    x_mean = np.mean(x)
    y_mean = np.mean(y)
    
    beta_1 = sum((x - x_mean) * (y - y_mean)) / sum((x - x_mean)**2)
    beta_0 = y_mean - beta_1 * x_mean
    
    return beta_0, beta_1

beta_0, beta_1 = calcular_beta_0_y_beta_1(x, y)

print(f'Intercepción (β₀): {beta_0}')
print(f'Pendiente (β₁): {beta_1}')

Este código calcula la intercepción \( \beta_0 \) y la pendiente \( \beta_1 \) para los datos de ejemplo proporcionados. El resultado nos da una línea que puede ser utilizada para hacer predicciones.

Errores típicos / trampas

Aunque la regresión lineal es simple, hay varios errores comunes que deben ser evitados:

  1. No-linealidad en los datos: La regresión lineal asume una relación lineal entre las variables. Si los datos tienen una relación no-lineal, como una curva cuadrática o logarítmica, la predicción será inexacta.
  1. Multicolinealidad: Esta ocurre cuando dos o más predictores están altamente correlacionados entre sí. Esto puede causar problemas de interpretación y estabilidad en los estimadores de regresión.
  1. Outliers: Un outlier (o punto atípico) puede influir significativamente en el modelo, ya que el método de mínimos cuadrados busca minimizar la suma de todos los errores al cuadrado. Los outliers pueden distorsionar la línea de mejor ajuste.
  1. Autocorrelación: En datos con estructura temporal (como series de tiempo), los valores en una variable pueden estar correlacionados con los anteriores, lo que puede dar lugar a modelos suboptimos o incorrectos.
  1. Presupuesto de error: La regresión lineal asume un error constante en todos los puntos. Si la varianza del error no es constante (heterocedasticidad), las estimaciones y las inferencias pueden ser inexactas.

Checklist accionable

Aquí tienes una lista de 10 pasos que puedes seguir para implementar y verificar correctamente un modelo de regresión lineal:

  1. Comprueba la relación entre variables: Verifica si existe una relación lineal entre tus variables independientes y la variable dependiente.
  2. Analiza la correlación: Evalúa la correlación entre las variables predicciones para identificar multicolinealidad.
  3. Identifica outliers: Usa métodos estadísticos como el rango intercuartil o boxplots para encontrar puntos atípicos en tus datos.
  4. Verifica la homocedasticidad: Comprueba si los errores tienen varianza constante utilizando una prueba de Breusch-Pagan o Granger.
  5. Analiza la normalidad del error: Verifica que los residuos sean aproximadamente normales utilizando gráficos Q-Q y pruebas estadísticas como la prueba de Shapiro-Wilk.
  6. Revisa la estabilidad temporal (si es necesario): Para datos con estructura temporal, verifica la ausencia de autocorrelación en los errores.
  7. Elije un modelo apropiado: Si existen problemas en los supuestos de regresión lineal, considera modelos no-lineales o técnicas como regresión cuadrática.
  8. Evalúa el ajuste del modelo: Usa métricas como R² para evaluar la calidad del ajuste.
  9. Realiza validación cruzada: Verifica la capacidad de predicción del modelo en datos no vistos usando validación cruzada.
  10. Interpreta cuidadosamente los resultados: Asegúrate de interpretar correctamente las pendientes y el intercepto, teniendo en cuenta el contexto de tu problema.

Siguientes pasos

Ahora que has entendido la regresión lineal, es importante considerar sus limitaciones:

  • Avanzar a modelos no-lineales: Si los datos no siguen una relación lineal, considera modelos como polinómicos o logísticos.
  • Aumentar el número de predictores: Si tienes varios predictores relevantes, puedes implementar regresión múltiple para un mejor ajuste.
  • Optimizar parámetros: Ajusta los hiperparámetros del modelo utilizando técnicas como la búsqueda en cuadrícula o optimización bayesiana.

La regresión lineal es una herramienta poderosa y fundamental, pero siempre es importante validar cuidadosamente tu modelo para asegurar su precisión y relevancia.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).