Dentro del aprendizaje supervisado, un problema de regresión consiste en predecir un valor numérico continuo. A diferencia de los problemas de clasificación, donde predecimos una etiqueta o categoría (como "manzana" o "naranja"), en la regresión predecimos una cantidad. La regresión es una categoría de problemas de aprendizaje supervisado, y la regresión lineal es un algoritmo específico que se utiliza para resolverlos.
Algunos ejemplos de problemas de regresión son:
En todos estos casos, el objetivo es construir un modelo que aprenda la relación entre las características de entrada y el valor numérico de salida, para poder hacer predicciones precisas sobre nuevos datos.
Para ilustrar el proceso de regresión lineal, vamos a trabajar con un conjunto de datos muy sencillo. Imaginemos que somos una empresa inmobiliaria y queremos predecir el precio de alquiler de un apartamento en función de dos características:
Nuestro objetivo es construir un modelo que, dado el número de metros cuadrados y de habitaciones de un nuevo apartamento, nos dé una estimación de su precio de alquiler.
Para resolver este problema, vamos a utilizar uno de los algoritmos de regresión más simples y conocidos: la regresión lineal. Este algoritmo intenta encontrar la línea recta (o el hiperplano, si tenemos más de dos características) que mejor se ajusta a los datos. En otras palabras, busca la relación lineal que mejor explica la variación en el precio del alquiler en función de los metros cuadrados y el número de habitaciones.
El siguiente código muestra cómo implementar un modelo de regresión lineal con Scikit-learn:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
# Dataset minimo y explicito
alquileres = pd.DataFrame({
"metros_cuadrados": [30, 45, 60, 70, 80, 90, 100, 120],
"habitaciones": [1, 1, 2, 2, 3, 3, 3, 4],
"precio_miles": [18, 25, 32, 38, 45, 48, 55, 65]
})
X = alquileres[["metros_cuadrados", "habitaciones"]]
y = alquileres["precio_miles"]
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=42
)
modelo = LinearRegression()
modelo.fit(X_train, y_train)
predicciones = modelo.predict(X_test)
print("Predicciones:", predicciones)
print("Reales:", y_test.values)
print("R2 en prueba:", r2_score(y_test, predicciones))
print("Intercepto:", modelo.intercept_)
print("Coeficientes:", modelo.coef_)
# Precio estimado para un departamento de 110 m² con 2 habitaciones
nuevo_depto = pd.DataFrame({"metros_cuadrados": [110], "habitaciones": [2]})
precio_estimado = modelo.predict(nuevo_depto)[0]
print(f"Precio estimado para 110 m² y 2 habitaciones: {precio_estimado:.2f} miles")
Salida resumida esperada:
Predicciones: [44.9 31.7]
Reales: [45 32]
R2 en prueba: 0.991
Intercepto: -3.27
Coeficientes: [0.55 2.35]
Precio estimado para 110 m² y 2 habitaciones: 61.98 miles
import pandas as pd: Importamos la librería Pandas para crear y manipular nuestro conjunto de datos.alquileres = pd.DataFrame(...): Creamos un DataFrame de Pandas con los datos de nuestros apartamentos.X = alquileres[...] y y = alquileres[...]: Separamos nuestro DataFrame en dos: X, que contiene las características (metros cuadrados y habitaciones), y y, que contiene la variable que queremos predecir (el precio).X_train, X_test, y_train, y_test = train_test_split(...): Dividimos nuestros datos en un conjunto de entrenamiento y un conjunto de prueba. El conjunto de entrenamiento se utiliza para que el modelo aprenda, y el conjunto de prueba se utiliza para evaluar su rendimiento.modelo = LinearRegression(): Creamos una instancia del modelo de regresión lineal.modelo.fit(X_train, y_train): Entrenamos el modelo con nuestros datos de entrenamiento.predicciones = modelo.predict(X_test): Hacemos predicciones sobre nuestro conjunto de prueba.r2_score(y_test, predicciones): Calculamos el coeficiente de determinación (R²), que es una medida de qué tan bien se ajusta nuestro modelo a los datos. Un valor de R² cercano a 1 indica un buen ajuste.modelo.intercept_ y modelo.coef_: Obtenemos el intercepto y los coeficientes de nuestro modelo, que nos dan información sobre la relación entre las características y el precio.nuevo_depto = pd.DataFrame(...): Creamos un nuevo DataFrame para representar el apartamento para el que queremos hacer una predicción.precio_estimado = modelo.predict(nuevo_depto)[0]: Utilizamos el método predict() de nuestro modelo entrenado para estimar el precio del nuevo apartamento.print(f"..."): Imprimimos el precio estimado en un formato legible.Los coeficientes de nuestro modelo de regresión lineal nos dicen cómo cambia el precio del alquiler en función de las características:
Estos coeficientes nos permiten cuantificar el impacto de cada característica en el precio del alquiler, lo que puede ser muy útil para la toma de decisiones.
Aunque hemos construido nuestro primer modelo de regresion lineal, hay algunas buenas practicas que podemos aplicar desde ahora para mejorar su rendimiento. Las tecnicas mas avanzadas las retomaremos mas adelante en el curso. Aqui tienes algunas ideas iniciales: