La regresión lineal es el algoritmo más simple del Machine Learning — y uno de los más poderosos para entender los fundamentos. Si puedes explicar cómo funciona la regresión lineal, puedes entender casi cualquier otro algoritmo de ML.
¿Qué aprende un modelo de ML?
Un modelo de Machine Learning aprende patrones en datos para hacer predicciones. En lugar de programar reglas explícitas, el algoritmo encuentra la relación entre los datos de entrada (features) y la salida esperada (target) por sí solo.
Regresión lineal: la intuición
Imagina que quieres predecir el precio de un departamento basándote en su tamaño en m². Si graficas todos tus datos (m² en X, precio en Y), la regresión lineal encuentra la línea recta que mejor se ajusta a esos puntos.
La ecuación es: precio = m × metros + b
- m (pendiente) — cuánto sube el precio por cada m² adicional
- b (intercepto) — el precio base
El algoritmo ajusta m y b para minimizar el error cuadrático medio (MSE) entre sus predicciones y los valores reales.
Implementación con Python
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
# Datos de ejemplo: metros cuadrados → precio (en miles de pesos)
datos = {
'metros': [45, 60, 75, 80, 100, 120, 150, 90, 55, 130],
'precio': [850, 1100, 1400, 1500, 1900, 2200, 2800, 1700, 950, 2500]
}
df = pd.DataFrame(datos)
# Preparar features (X) y target (y)
X = df[['metros']] # doble corchete → DataFrame en lugar de Series
y = df['precio']
# Dividir en datos 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
)
# Crear y entrenar el modelo
modelo = LinearRegression()
modelo.fit(X_train, y_train)
# Ver los parámetros aprendidos
print(f"Pendiente (m): {modelo.coef_[0]:.2f}")
print(f"Intercepto (b): {modelo.intercept_:.2f}")
# Salida aprox: pendiente = 18.5, intercepto = 15.3
# Interpretación: cada m² extra cuesta ~$18,500 pesos
# Predecir con datos de prueba
y_pred = modelo.predict(X_test)
# Evaluar el modelo
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"Error cuadrático medio (MSE): {mse:.2f}")
print(f"R² Score: {r2:.4f}")
# R² de 1.0 = modelo perfecto, 0 = no mejor que predecir el promedio siempre
¿Qué es R² y por qué importa?
El coeficiente de determinación (R²) mide qué porcentaje de la variación en el precio explica el modelo. Un R² de 0.92 significa que el tamaño en m² explica el 92% de la variación en precio — el 8% restante se debe a otros factores (ubicación, antigüedad, etc.).
Regresión múltiple: más features
# Con múltiples variables predictoras
datos_multi = {
'metros': [45, 60, 75, 80, 100, 120, 150, 90, 55, 130],
'habitaciones': [1, 2, 2, 3, 3, 3, 4, 3, 1, 4],
'antiguedad': [5, 10, 2, 1, 8, 3, 15, 6, 20, 1],
'precio': [850, 1100, 1400, 1500, 1900, 2200, 2800, 1700, 950, 2500]
}
df_multi = pd.DataFrame(datos_multi)
X_multi = df_multi[['metros', 'habitaciones', 'antiguedad']]
y_multi = df_multi['precio']
modelo_multi = LinearRegression()
modelo_multi.fit(X_multi, y_multi)
# Predecir el precio de un depto de 85 m², 2 habitaciones, 4 años
nuevo = pd.DataFrame({'metros': [85], 'habitaciones': [2], 'antiguedad': [4]})
precio_predicho = modelo_multi.predict(nuevo)
print(f"Precio estimado: ${precio_predicho[0]:,.0f} miles de pesos")
"La regresión lineal es como aprender las escalas en guitarra — quizás no es lo que tocarás en concierto, pero sin ella no puedes aprender nada más."