Machine learning desde cero · Lección 1.3 · 4 de 33 lecciones listas · 12 min
La referencia: ¿con qué comparas tu modelo?
En pocas palabras
Antes de elogiar un modelo, calcula el resultado sin aprender: la clase más común o la media. Con pocos enfermos, «siempre sano» acierta sin detectar a nadie.
Calentamiento Dos preguntas de lecciones anteriores. Un minuto, y no bloquea la lección.
En la lección 0.1 el árbol acertaba el 95,1 % de los pingüinos y adivinar, el 43,7 %. Ese segundo número es la referencia (en inglés, baseline): el resultado de una respuesta que no aprende nada. Sin ella no sabes si un modelo ha aprendido algo. Hoy verás cómo calcularla en dos tareas y cuándo la exactitud sola te engaña. Los datos: 569 biopsias de tumores de mama y 442 pacientes con diabetes.
Elige una respuesta y tu grado de seguridad.
Responde para desbloquear el experimento.
Experimento interactivo
Este experimento interactivo funciona en un navegador con JavaScript activado. El texto que lo rodea describe lo que muestra.
Ver la respuesta
Respuesta correcta: Alrededor del 99 %, más que la regla aprendida, y no detecta ninguna
107 de 108 biopsias es un 99,1 % de exactitud, y la maligna pasa inadvertida. La regla aprendida con un umbral obtiene en esta prueba un 90,7 %, menos, pero sí detecta esa biopsia maligna. En la prueba completa, con 64 malignas, «siempre benigno» obtiene solo un 62,6 %.
Prueba esto
- Empieza con las biopsias y las 64 malignas. ¿Por cuánto supera la regla aprendida a «siempre benigno»?
- Mueve el control a la derecha hasta dejar 5 malignas y luego 1. ¿Qué pasa con la exactitud de «siempre benigno» y con el número de malignas detectadas?
- Cambia a la diabetes. Compara el error de la recta con el IMC y del modelo con 10 medidas con el error de la media sola.
Cuando lo hayas comprobado en el lab, pongamos nombre a lo que ves.
La idea en pocas palabras
La referencia es la respuesta más simple que se puede dar sin aprender. En clasificación es la clase más común: de las 398 biopsias de aprendizaje, 250 son benignas, así que la respuesta es siempre «benigno». En regresión es la media: cada paciente recibe la misma progresión prevista, la media de los pacientes de aprendizaje.
Un modelo solo tiene sentido si supera claramente a la referencia con los mismos datos de prueba. En las biopsias, la regla con una medida y un umbral obtiene un 91,2 % frente a un 62,6 %. En la diabetes, el modelo con 10 medidas tiene un error de 2827 frente a 5076 de la media, un 44,3 % menor. Una recta solo con el IMC reduce el error apenas un 19,3 %.
También hay una referencia más débil: adivinar en proporción, es decir, «benigno» con una probabilidad igual a la proporción de benignas entre las de aprendizaje. En promedio acierta un 53,2 %, menos que «siempre benigno». Por eso la referencia que se usa es la clase más común: adivinar al azar es más fácil de superar que una comprensión real.
Jak to policzono
- Biopsias: Breast Cancer Wisconsin (Diagnostic), UCI, licencia CC BY 4.0. 569 biopsias (357 benignas, 212 malignas), 10 medidas de los núcleos celulares.
- Diabetes: el conjunto Diabetes (Efron et al., 2004) incluido en scikit-learn; los autores no indicaron licencia. 442 pacientes, 10 medidas, progresión de la enfermedad un año después.
- Partición 70/30, la misma que
train_test_split(test_size=0.3, random_state=1)en scikit-learn; biopsias estratificadas. En la prueba hay 171 biopsias y 133 pacientes. - Regla: un árbol de decisión con una pregunta (CART). Modelo de regresión: mínimos cuadrados.
Por qué funciona
La exactitud de «siempre la clase más común» es simplemente la proporción de esa clase en la prueba. En la prueba completa, 107 de 171 biopsias son benignas: de ahí el 62,6 %. Si dejas 1 maligna, las benignas son 107 de 108: de ahí el 99,1 %. La exactitud de la referencia no dice nada sobre las biopsias. Solo dice lo rara que es la otra clase.
Por eso, con una clase rara, la exactitud deja de distinguir un buen modelo de uno inútil. Con 5 malignas en la prueba, «siempre benigno» obtiene un 95,5 % y la regla un 91,1 %, aunque solo la regla detecta las 5. No es una partición afortunada: en 100 particiones distintas, «siempre benigno» supera a la regla en exactitud en 82. Lo que ayuda es un segundo número junto a la exactitud: cuántos casos de la clase rara detectó de verdad el modelo.
En regresión, la media es la mejor respuesta constante: ningún otro número único da un error cuadrático medio menor en los datos de aprendizaje. Cualquier modelo que tenga medidas debería superarla, y aquí siempre lo hace. En 100 particiones, la recta con el IMC y el modelo con 10 medidas tienen un error menor que la media todas las veces, en promedio un 33,7 % y un 48,5 % menor.
Error frecuente
¿Verdadero o falso?: «Un 90 % de exactitud es mucho». Falso, o mejor dicho: el número solo no lo dice. Cuando 1 persona de cada 100 está enferma, la prueba «siempre sano» tiene un 99 % de exactitud y no detecta a nadie. Un modelo con un 90 % sería entonces peor que nada en exactitud, y aun así podría ser muy valioso si detecta a los enfermos. Indica siempre la referencia junto al resultado y comprueba cuántos casos de la clase rara detectó el modelo.
Dónde falla la analogía: la referencia es un suelo, no una meta. Superarla por un pelo no suele significar nada, porque otra partición de los datos puede dar la vuelta al resultado.
Test
Tres preguntas para comprobar lo aprendido. Elige una respuesta o despliega la solución bajo cada pregunta. Con el teclado: las flechas eligen, Enter o Espacio confirma.
Ideas clave
- La referencia es el resultado sin aprendizaje: la clase más común en clasificación, la media en regresión.
- Un modelo se compara con la referencia en los mismos datos de prueba, no con cero.
- Si una clase es rara, «siempre la clase común» acierta mucho y no detecta a nadie; indica también cuántos casos raros detectó el modelo.
- Comprueba la ventaja en muchas particiones, porque una sola puede salir bien por casualidad.
Más a fondo: fórmula, código, práctica
Las matemáticas
La exactitud de la respuesta «siempre la clase k» es la proporción de esa clase en la prueba: exactitud = n_k / n. En la prueba completa 107 / 171 ≈ 0,626, con una sola maligna 107 / 108 ≈ 0,991.
Adivinar «benigno» con probabilidad p (la proporción de benignas en el aprendizaje, 250 / 398 ≈ 0,628) acierta en promedio p · q + (1 − p) · (1 − q) de las veces, donde q es la proporción de benignas en la prueba. En la prueba completa da alrededor de 0,532.
En regresión, una respuesta constante c tiene el error MSE(c) = (1/n) · Σ (yᵢ − c)². Su derivada −(2/n) · Σ (yᵢ − c) se anula en c = ȳ, así que la media da el menor error de todas las constantes. La mejora relativa es 1 − MSE(modelo) / MSE(media): con 10 medidas, 1 − 2827 / 5076 ≈ 0,443.
En código (Python)
El mismo experimento en scikit-learn: la referencia y la regla de un umbral en las biopsias con 64, 5 y 1 malignas en la prueba, la comparación en 100 particiones y, después, la media, la recta con el IMC y el modelo con 10 medidas en la diabetes.
import numpy as np
from sklearn.datasets import load_breast_cancer, load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LinearRegression
X, y = load_breast_cancer(return_X_y=True)
X = X[:, :10] # las 10 medidas "mean", como en el lab; y: 0 = maligno, 1 = benigno
def biopsies(seed, keep_malignant):
tr, te = train_test_split(np.arange(len(y)), test_size=0.3, stratify=y, random_state=seed)
te = np.sort(te) # filas de prueba en el orden del archivo, como en el lab
major = np.bincount(y[tr]).argmax() # referencia: la clase más común entre las biopsias de aprendizaje
rule = DecisionTreeClassifier(max_depth=1, random_state=0).fit(X[tr], y[tr]) # una medida, un umbral
rows = np.r_[te[y[te] == 1], te[y[te] == 0][:keep_malignant]] # todas las benignas + las primeras m malignas
pred = rule.predict(X[rows])
return (y[rows] == major).mean(), ((major == 0) & (y[rows] == 0)).sum(), (pred == y[rows]).mean(), ((pred == 0) & (y[rows] == 0)).sum()
for m in (64, 5, 1):
base, base_found, acc, found = biopsies(1, m)
print(f"malignant {m}: always benign {base:.3f} (finds {base_found}), rule {acc:.3f} (finds {found})")
wins = sum(biopsies(s, 5)[0] > biopsies(s, 5)[2] for s in range(100))
print(f"100 splits, 5 malignant: always benign beats the rule in {wins}")
Xd, yd = load_diabetes(return_X_y=True)
def diabetes(seed):
a, b, c, e = train_test_split(Xd, yd, test_size=0.3, random_state=seed)
mse = lambda p: ((e - p) ** 2).mean()
return mse(c.mean()), mse(LinearRegression().fit(a[:, [2]], c).predict(b[:, [2]])), mse(LinearRegression().fit(a, c).predict(b))
mean, bmi, full = diabetes(1)
print(f"diabetes: mean {mean:.0f}, BMI {bmi:.0f} ({1 - bmi / mean:.1%} lower), all 10 {full:.0f} ({1 - full / mean:.1%} lower)")
r = np.array([diabetes(s) for s in range(100)])
print(f"100 splits: BMI beats the mean in {(r[:, 1] < r[:, 0]).sum()}, all 10 in {(r[:, 2] < r[:, 0]).sum()}; error lower by {1 - r[:, 1].mean() / r[:, 0].mean():.1%} and {1 - r[:, 2].mean() / r[:, 0].mean():.1%} on average")
Resultado
malignant 64: always benign 0.626 (finds 0), rule 0.912 (finds 59)
malignant 5: always benign 0.955 (finds 0), rule 0.911 (finds 5)
malignant 1: always benign 0.991 (finds 0), rule 0.907 (finds 1)
100 splits, 5 malignant: always benign beats the rule in 82
diabetes: mean 5076, BMI 4096 (19.3% lower), all 10 2827 (44.3% lower)
100 splits: BMI beats the mean in 100, all 10 in 100; error lower by 33.7% and 48.5% on average
En la partición 1 los números son los mismos que en el lab. El modelo de 10 medidas del lab trabaja con datos redondeados a dos decimales, así que su error puede diferir de este código en una fracción, pero redondeado es el mismo: 2827.
Descargar el notebook (.ipynb). Ábrelo en Jupyter o súbelo a Google Colab; descarga por sí solo los datos que falten.
Para profesionales
- En scikit-learn, la referencia la dan
DummyClassifier(strategy="most_frequent")yDummyRegressor(strategy="mean"). Calcúlala con la misma partición que el modelo. - Con clases desequilibradas, indica junto a la exactitud la sensibilidad de la clase rara o la exactitud equilibrada; «siempre la clase común» tiene una exactitud equilibrada del 50 %.
- Una referencia más fuerte suele ser una regla simple con una medida o el modelo que la empresa ya usa. Un modelo nuevo tiene que superar al mejor de ellos.
- Cuando la ventaja sobre la referencia es pequeña, compruébala en muchas particiones o con validación cruzada antes de anunciarla.
¿Te ha sido útil?
¡Gracias! Nos ayuda a mejorar.
Profundiza en el Atlas
Entradas de la enciclopedia sobre las ideas de esta lección: