Regresión Lineal: Fundamentos y Ejemplos con Python

En el campo del aprendizaje automático y el análisis de datos, la regresión lineal es uno de los algoritmos más fundamentales y utilizados. Su simplicidad y capacidad para modelar relaciones lineales la convierten en una herramienta esencial para problemas de predicicón. Este artículo explica los conceptos clave, la implementación práctica y varios casos de uso.

¿Qué es la regresión lineal?

La regresión lineal es un algoritmo de aprendizaje supervisado diseñado para predecir una variable objetivo continua. Su objetivo es encontrar la mejor línea recta (o hiperplano en múltiples dimensiones) que minimice el error entre los valores predichos y los reales. La relación entre las características (variables independientes) y la variable objetivo se describe mediante una ecuación lineal.

Expresión matemática

Dado un conjunto de datos con características \(X_1, X_2, \dots, X_n\) y variable objetivo \(y\), el modelo de regresión lineal se expresa como:

\[ y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \dots + \beta_n X_n + \epsilon \]

  • \(y\): variable dependiente (objetivo)
  • \(X_i\): variables independientes (características)
  • \(\beta_0\): término de intersección
  • \(\beta_i\): coeficientes de las características
  • \(\epsilon\): término de error (parte no explicada por el modelo)

Cuando solo hay una característica, se denomina regresión lineeal simple; si hay múltiples, se trata de regresión lineal múltiple.

Aplicaciones comunes

La regresión lineal se usa en diversos campos:

  • Economía: predicción del PIB o inflación
  • Finanzas: estimación de precios de acciones
  • Marketing: análisis de la relación entre inversión publicitaria y ventas

Ejemplo 1: Regresión lineal simple – Publicidad y ventas

Analizaremos la relación entre la inversión en publicidad y las ventas. Primero, visualizamos los datos con un diagrama de dispersión y luego ajustamos el modelo.

import pandas as pd
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression

# Cargar datos
datos = pd.read_csv("datos_publicidad.csv")
inversion = datos['inversion_publicitaria']
ventas = datos['ventas']

# Visualización inicial
plt.scatter(inversion, ventas, alpha=0.6)
plt.xlabel('Inversión en publicidad')
plt.ylabel('Ventas')
plt.title('Relación entre inversión y ventas')
plt.show()

# Matriz de correlación
correlacion = datos[['inversion_publicitaria', 'ventas']].corr()

# Construir modelo
modelo = LinearRegression()
X = datos[['inversion_publicitaria']]
y = datos[['ventas']]
modelo.fit(X, y)

# Evaluación (R²)
puntaje = modelo.score(X, y)
interseccion = round(modelo.intercept_[0], 2)
pendiente = round(modelo.coef_[0][0], 2)

# Predicciones para nuevos valores
nuevas_inversiones = [[40], [45], [50]]
predicciones = modelo.predict(nuevas_inversiones)
print("Predicciones:", predicciones)

El diagrama de dispersión nos permite evaluar visualmente la posible linealidad. El coeficiente de correlación y el R² indican la fuerza de la relación. La ecuación final será: ventas = pendiente * inversion + interseccion.

Ejemplo 2: Regresión lineal múltiple – Peso, edad y presión arterial

Utilizaremos las variables peso y edad para predecir la presión arterial sistólica.

import pandas as pd
from sklearn.linear_model import LinearRegression

datos = pd.read_csv("datos_presion.csv", encoding='gbk')

# Matriz de correlación
correlacion = datos[["peso", "edad", "presion_sistolica"]].corr()

# Modelo
modelo = LinearRegression()
X = datos[['peso', 'edad']]
y = datos[['presion_sistolica']]
modelo.fit(X, y)

# R²
puntaje = modelo.score(X, y)

# Predicciones
prediccion1 = modelo.predict([[80, 60]])
prediccion2 = modelo.predict([[70, 30], [70, 20]])
print("Predicción (80kg, 60años):", prediccion1)
print("Predicciones múltiples:", prediccion2)

# Coeficientes
coeficientes = modelo.coef_
interseccion = modelo.intercept_
print(f"Ecuación: y = {coeficientes[0][0]:.2f} * peso + {coeficientes[0][1]:.2f} * edad + {interseccion[0]:.2f}")

El modelo resultante permite interpretar cómo afectan el peso y la edad a la presión arterial, manteniendo constantes las demás variables.

Ejemplo 3: Regresión lineal múltiple – Datos de diabetes

Este ejemplo utiliza diez características (edad, sexo, IMC, presión arterial, etc.) para predecir la progresión de la diabetes.

import pandas as pd
from sklearn.linear_model import LinearRegression

datos = pd.read_csv("datos_diabetes.csv", encoding='gbk')

# Matriz de correlación (opcional, para análisis exploratorio)
columnas = ["age","sex","bmi","bp","s1","s2","s3","s4","s5","s6","target"]
correlacion = datos[columnas].corr()

# Modelo
modelo = LinearRegression()
X = datos[['age','sex','bmi','bp','s1','s2','s3','s4','s5','s6']]
y = datos[['target']]
modelo.fit(X, y)

# R²
puntaje = modelo.score(X, y)

# Predicciones sobre los mismos datos
predicciones = modelo.predict(X)
print("Primeras 5 predicciones:\n", predicciones[:5])

# Coeficientes e intersección
coef = modelo.coef_[0]
interseccion = modelo.intercept_[0]
print(f"Ecuación: target = {coef[0]:.2f}*age + {coef[1]:.2f}*sex + {coef[2]:.2f}*bmi + {coef[3]:.2f}*bp + {coef[4]:.2f}*s1 + {coef[5]:.2f}*s2 + {coef[6]:.2f}*s3 + {coef[7]:.2f}*s4 + {coef[8]:.2f}*s5 + {coef[9]:.2f}*s6 + {interseccion:.2f}")

El modelo permite evaluar el impacto de cada factor en la progresión de la enfermedad, ofreciendo una visión cuantitativa de las relaciones.

Limitaciones de la regresión lineal

  • Suposición de linealidad: asume una relación lineal entre características y objetivo; si no se cumple, el rendimiento se degrada.
  • Multicolinealidad: la alta correlación entre características puede desestabilizar los coeficientes estimados.
  • Sensibilidad a valores atípicos: los outliers pueden sesgar significativamente el modelo.

Etiquetas: regresión lineal scikit-learn Python análisis de datos machine learning

Publicado el 6-26 06:24