¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Ajustar una recta a los datos (regresión lineal)

Después de esta lección: Puedo ajustar una recta a unos datos y decir lo buena que es.

Lección de 55 min3 comandosLaboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

¿Cuántas bicis sacar mañana?

Cada noche, el encargado decide cuántas bicis deja listas para el día siguiente. Si se queda corto, pierde clientes. Si se pasa, paga horas de trabajo que nadie usa.

Conoce la previsión del tiempo. Si una recta une la temperatura con los alquileres, la previsión se convierte en un número.

Al final de esta lección

Nota

Puedo ajustar una recta a unos datos y decir lo buena que es.

Palabras clave

PalabraQué significa
Pendientecuánto sube la salida por cada unidad más de entrada
Ordenada en el origenel valor de la recta cuando la entrada es 0 (intercept en inglés)
Residuoel valor real menos el valor que da la recta
Mínimos cuadradoselegir la recta con la menor suma de residuos al cuadrado
Conjunto de pruebafilas guardadas aparte para juzgar el modelo
R cuadradola parte de la variación que explica el modelo, de 0 a 1

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Una recta es una ordenada y una pendiente

Una recta predice así: alquileres = ordenada + pendiente × temperatura. La pendiente dice cuántos alquileres más trae cada grado. La ordenada en el origen es la predicción a 0 grados.

Las dos tienen unidades, así que se pueden leer en voz alta. «Cada grado más trae unas once bicis más» es una frase que entiende la gerente.

Ajusta alquileres contra temperatura

Comando
docker exec jupyter python3 steps/line.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Mínimos cuadrados elige la mejor recta

Cada día tiene un residuo: lo real menos lo que dice la recta. Algunos son positivos y otros negativos, y en la mejor recta suman 0.

Por eso se elevan al cuadrado antes de sumar. Mínimos cuadrados busca la recta con la menor suma de cuadrados. Salen dos sumas: los productos de las distancias a las medias, entre los cuadrados de las distancias en x.

Ejemplo resuelto: tres días y sus residuos

TemperaturaAlquileresLa recta 150 + 9 × tResiduoAl cuadrado
5200195525
10230240-10100
15290285525
Suma0150

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Las dos sumas a mano

Código: python
# Tres días: temperatura y alquileres.
temps = [5, 10, 15]
hires = [200, 230, 290]

mean_x = 0
mean_y = 0
for n in range(len(temps)):
    mean_x = mean_x + temps[n] / len(temps)
    mean_y = mean_y + hires[n] / len(hires)

top = 0
bottom = 0
for n in range(len(temps)):
    top = top + (temps[n] - mean_x) * (hires[n] - mean_y)
    bottom = bottom + (temps[n] - mean_x) ** 2
slope = top / bottom
print("pendiente:", round(slope, 1))
print("ordenada:", round(mean_y - slope * mean_x, 1))
# Cambia 290 por 260. ¿Sube o baja la pendiente?

Escribe esto en tu cuaderno: el año entero

Código: python
import numpy as np
import pandas as pd

hires = pd.read_csv("hires.csv")
# Con grado 1, polyfit da la pendiente y la ordenada en el origen.
line = np.polyfit(hires["temp_c"], hires["hires"], 1)
line.round(1)

Se juzga con días que no vio

Un modelo siempre parece bueno con los datos de los que aprendió. La pregunta real es otra: ¿acierta con días nuevos?

Por eso se separan las filas. El modelo aprende con el conjunto de entrenamiento, unas tres cuartas partes. Se juzga con el conjunto de prueba, que no ha visto nunca. El error medio dice cuántos alquileres se equivoca de media.

Aprende con unos días y prueba con otros

Comando
docker exec jupyter python3 steps/split.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error muy común

Advertencia

Mucha gente cree que un R cuadrado alto en los datos de entrenamiento demuestra que el modelo es bueno. No lo demuestra: el modelo ya conoce esas filas. Juzga siempre con el conjunto de prueba. Aquí baja de 0,608 a 0,554.

Escribe esto en tu cuaderno: los peores días

Código: python
guess = line[1] + line[0] * hires["temp_c"]
hires["error"] = (hires["hires"] - guess).round(1)
# Los tres días en que la recta se pasa más.
hires.sort_values("error").head(3)

Una segunda entrada mejora la recta

Los tres peores días de tu celda tienen algo en común: llovió mucho. La recta solo conoce la temperatura, así que no puede saberlo.

model.py ajusta con dos entradas, la temperatura y la lluvia. Cada una tiene su propia pendiente, y el R cuadrado sube.

Ajusta con temperatura y lluvia

Comando
docker exec jupyter python3 steps/model.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Para ir más lejos: el fin de semana

Los días que la recta se queda corta suelen ser sábados y domingos. En tu cuaderno, crea una columna weekend con isin(["Sat", "Sun"]).astype(int).

Ajusta un LinearRegression con temp_c, rain_mm y weekend, separando los días como split.py, con random_state=1. ¿Cuántos alquileres añade un fin de semana? ¿Cuánto sube el R cuadrado con los días guardados?

Sobre este laboratorio y su código: Laboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.