Menu
CoddyTech

Medición de errores

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

¿Cuánto se equivoca un modelo, en dólares? Aquí tienes un modelo de precios de viviendas aplicado a cinco casas de prueba que nunca había visto:

Cinco barras, una por cada casa de prueba, que muestran el tamaño del error del modelo de precios: 20, 40, 10, 90 y 30 mil dólares. Una línea discontinua marca el MAE en 38; una línea de puntos marca el RMSE en 47.1, por encima debido al gran error de 90

sklearn.metrics mide los errores por ti:

from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score

y_test = np.array([290, 410, 235, 520, 330])  # miles de dólares
pred = np.array([270, 450, 245, 430, 360])
print(mean_absolute_error(y_test, pred))
print(np.round(np.sqrt(mean_squared_error(y_test, pred)), 1))
print(np.round(r2_score(y_test, pred), 3))

Esto imprime:

38.0
47.1
0.776

El MAE, error absoluto medio, es el error típico: 38 mil. El RMSE eleva al cuadrado los errores, calcula el promedio y después obtiene la raíz: un error grande lo eleva a 47.

Ambas se expresan en las unidades de la variable objetivo. r2_score es tu R cuadrado: explica el 78 % de la dispersión de los precios.

challenge icon

Desafío

Intermedio

Una tienda fija los precios de las cámaras de segunda mano con un modelo. ¿Ayuda una segunda característica? El programa lee shutter_k (miles de fotos tomadas) o megapixels. El código inicial ajusta dos modelos, uno solo con age_years y otro con la característica adicional, y guarda sus predicciones de prueba en preds.

  1. Para cada modelo, imprime su MAE, RMSE (1 decimal) y R cuadrado (3 decimales).
  2. Imprime el que tenga el MAE más bajo.

Para otra tienda y shutter_k:

age_years: MAE 212.4, RMSE 268.1, R squared 0.853
age_years + shutter_k: MAE 98.7, RMSE 121.0, R squared 0.97
Better: age_years + shutter_k, off by 98.7 dollars on a typical camera

Pruébalo tú mismo

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# Una fila por cada cámara vendida: antigüedad, número de disparos en miles, megapíxeles y precio en dólares
cameras = pd.read_csv("cameras.csv")
extra = input()
names = ["age_years", "age_years + " + extra]
columns = [["age_years"], ["age_years", extra]]
# Divide las filas completas; cada modelo de abajo selecciona sus propias columnas
X_train, X_test, y_train, y_test = train_test_split(cameras, cameras["price"], test_size=0.25, random_state=0)
# Un modelo por cada lista de columnas y sus predicciones para las cámaras de prueba
preds = []
for cols in columns:
    model = LinearRegression()
    model.fit(X_train[cols], y_train)
    preds.append(model.predict(X_test[cols]))

# 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