Menu
CoddyTech

Gráficos de residuos

Parte de la sección Aprendizaje supervisado del Journey de Machine Learning de Coddy. Lección 14 de 58.

Una buena puntuación puede ocultar una forma incorrecta. Esta línea obtiene un R cuadrado de 0.82 en una masa que sube, pero sus errores forman un arco:

Izquierda: altura de la masa en función de las horas, sube rápidamente y luego se ralentiza, con una línea ajustada recta, R cuadrado 0.82. Derecha: los residuos en función de las predicciones suben de -1.3 a +0.7 y vuelven a bajar hasta -0.7, formando un arco alrededor de la línea discontinua de cero

Ese gráfico de la derecha es un gráfico de residuos: cada residuo, valor real menos valor predicho, frente a su predicción, sobre una línea en 0:

residuals = y_test - pred
fig, ax = plt.subplots()
ax.scatter(pred, residuals)
ax.axhline(0, color="gray", linestyle="--")
plt.show()

Los residuos saludables se dispersan como ruido alrededor de 0. Un patrón significa que al modelo se le escapa algo: aquí, que el aumento se ralentiza.

Con varias características, representa también los residuos frente a cada característica: la que forma un arco oculta la curva.

challenge icon

Desafío

Intermedio

Una escuela de conducción ajustó una recta a 80 pruebas de frenado: speed_kmh y braking_m. El código inicial guarda las predicciones de las pruebas en pred y etiqueta el gráfico.

  1. Calcula los residuos.
  2. Represéntalos en un diagrama de dispersión frente a las predicciones, sobre una línea gris discontinua en 0; luego, muéstralo.

¿La recta no capta una curva? A la izquierda incluso predice una distancia de frenado negativa.

El gráfico de una recta adecuada, obtenido con otros datos, tiene este aspecto:

Un gráfico de residuos titulado Una recta adecuada: veinte puntos dispersos sin ningún patrón por encima y por debajo de una línea discontinua en 0

Coddy describe tu gráfico.

Pruébalo tú mismo

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

brakes = pd.read_csv("braking.csv")
X_train, X_test, y_train, y_test = train_test_split(brakes[["speed_kmh"]], brakes["braking_m"], test_size=0.25, random_state=0)
model = LinearRegression()
model.fit(X_train, y_train)
pred = model.predict(X_test)

fig, ax = plt.subplots()
ax.set_title("Braking Line Check")
ax.set_xlabel("Predicted braking distance (m)")
ax.set_ylabel("Residual (m)")

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje supervisado

Practica por tu cuenta: Compilador de Python online