Regresión lineal múltiple en Python: modelado con múltiples predictores
La regresión lineal múltiple amplía la regresión simple al incorporar múltiples variables independientes. El modelo ajusta un hiperplano en un espacio multidimensional para predecir la variable objetivo Y utilizando predictores X₁ hasta Xₙ. Cada coeficiente βᵢ refleja el impacto aislado de su factor respectivo, manteniendo todas las demás variables constantes. Usando el conjunto de datos Advertising, predeciremos las ventas basadas en los presupuestos de publicidad en TV, Radio y Diario.
Formulación matemática
La ecuación del modelo es:
Y = β₀ + β₁X₁ + β₂X₂ + ⋯ + βₙXₙ + ε
β₀ es la intersección, βᵢ son los coeficientes de regresión y ε representa los residuos. Los valores óptimos de β se calculan mediante mínimos cuadrados ordinarios (OLS):
β̂ = (XᵀX)⁻¹Xᵀy
Aquí, X es la matriz extendida de características (con una columna de unos), y y es el vector objetivo. Las suposiciones clave incluyen relaciones lineales y homocedasticidad de residuos.
Preparación de los datos
Divida los datos en conjuntos de entrenamiento y prueba (80/20) para evaluar el rendimiento de generalización y evitar sobreajuste. Aplique codificación One-Hot para variables categóricas y use StandardScaler para estandarizar las características numéricas—esto mejora la interpretabilidad de los coeficientes.
Pasos clave de preparación:
- Verifique valores faltantes y valores atípicos.
- Codifique variables categóricas.
- Divida el conjunto de datos:
train_test_split(X, y, test_size=0.2, random_state=42). - Escale las características:
StandardScaler().fit_transform(X_train).
Implementación con el conjunto de datos Advertising
Conjunto de datos: 200 observaciones, prediciendo Ventas a partir de presupuestos de publicidad en TV, Radio y Diario.
Importar y cargar datos
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error
plt.style.use('seaborn-v0_8-whitegrid')
sns.set_palette("husl")
df = pd.read_csv("Advertising.csv")
if 'Unnamed: 0' in df.columns:
df = df.drop('Unnamed: 0', axis=1)
df.columns = ['TV', 'Radio', 'Newspaper', 'Sales']
print(df.head())
print(f"Tamaño de los datos: {df.shape}")
Primeras filas:
| TV | Radio | Newspaper | Sales |
|-------|-------|-----------|-------|
| 230.1 | 37.8 | 69.2 | 22.1 |
| 44.5 | 39.3 | 45.1 | 10.4 |
EDA y correlaciones
Estadísticas descriptivas:
| | TV | Radio | Newspaper | Sales |
|-------|--------|-------|-----------|-------|
| media | 147.04 | 23.26 | 30.55 | 14.02 |
| desv. | 85.85 | 14.85 | 21.78 | 5.22 |
Correlación con Ventas: TV (0.78), Radio (0.58), Diario (0.23).
Los gráficos de dispersión revelan relaciones lineales fuertes entre TV-Ventas y Radio-Ventas, pero una relación débil para Diario.
Entrenamiento del modelo
X = df[['TV', 'Radio', 'Newspaper']]
y = df['Sales']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LinearRegression()
model.fit(X_train, y_train)
print(f"Intersección: {model.intercept_:.4f}")
for name, coef in zip(X.columns, model.coef_):
print(f"{name}: {coef:.4f}")
Resultados:
- Intersección: 2.9791
- TV: 0.0447
- Radio: 0.1892
- Diario: 0.0028
Interpretación: Por cada aumento de $1,000 en anuncios de TV, las ventas aumentan en ~44.7 unidades; Radio genera ~189.2 unidades adicionales. El impacto del Diario es prácticamente nulo.
Evaluación del modelo
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"MSE: {mse:.2f}, RMSE: {rmse:.2f}, MAE: {mae:.2f}, R²: {r2:.4f}")
Métricas:
- MSE: 3.17
- RMSE: 1.78
- MAE: 1.46
- R²: 0.8994
Un valor de R² de 0.90 indica que el modelo explica el 90 % de la variabilidad en las ventas. RMSE y MAE proporcionan la magnitud del error en unidades reales de ventas.
Diagnóstico de residuos
- Histograma de residuos: simétrico alrededor de cero.
- Residuos vs predicciones: sin patrones visibles (homocedasticidad).
- Gráfico de dispersión de valores reales vs predichos muestra puntos agrupados cerca de la línea diagonal.
Conclusiones clave
- La regresión múltiple aísla los efectos de los predictores controlando factores confusos.
- El coeficiente cercano a cero para Diario sugiere que aporta poca capacidad predictiva.
- R² = 0.90 refleja un poder explicativo fuerte, pero siempre verifique el VIF para multicolinealidad.
- Analice siempre los residuos para validar supuestos de linealidad y normalidad.
- El escalado no es necesario para OLS, pero mejora la interpretabilidad de los coeficientes.
— Editorial Team
Aún no hay comentarios.