¿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
| Palabra | Qué significa |
|---|---|
| Pendiente | cuánto sube la salida por cada unidad más de entrada |
| Ordenada en el origen | el valor de la recta cuando la entrada es 0 (intercept en inglés) |
| Residuo | el valor real menos el valor que da la recta |
| Mínimos cuadrados | elegir la recta con la menor suma de residuos al cuadrado |
| Conjunto de prueba | filas guardadas aparte para juzgar el modelo |
| R cuadrado | la 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
docker exec jupyter python3 steps/line.pySe 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
| Temperatura | Alquileres | La recta 150 + 9 × t | Residuo | Al cuadrado |
|---|---|---|---|---|
| 5 | 200 | 195 | 5 | 25 |
| 10 | 230 | 240 | -10 | 100 |
| 15 | 290 | 285 | 5 | 25 |
| Suma | 0 | 150 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Las dos sumas a mano
# 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
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
docker exec jupyter python3 steps/split.pySe 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
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
docker exec jupyter python3 steps/model.pySe 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?