El dataset más pequeño del libro. No sirve para construir nada y no pretende hacerlo: existe para volver tangible una única distinción: que hay dos maneras de responder por un caso que nunca se vio.
Dos fuentes cruzadas por país: el Better Life Index de la OCDE, que pregunta a la gente cómo de satisfecha está con su vida en una escala de 0 a 10, y las cifras de PIB per cápita del FMI. Géron lo publica ya cruzado y filtrado.
Una sola variable de entrada. Eso es deliberado: con una dimensión todo cabe en una gráfica plana y no hace falta creerse nada. La diferencia entre los dos modelos se ve.
No hay preprocesamiento, ni partición, ni búsqueda de hiperparámetros. Se ajustan los dos sobre las 27 filas completas y se les pregunta lo mismo.
src/lifesat.pylineal = LinearRegression().fit(X, y)
vecinos = KNeighborsRegressor(n_neighbors=3).fit(X, y)
lineal.predict([[37_655.2]]) # Chipre, que no está en los datos
vecinos.predict([[37_655.2]])
Tres centésimas de diferencia. Si el criterio fuera solo la respuesta, daría igual cuál usar, y ese es justamente el punto: la distinción no está en el resultado, está en qué tuvo que quedarse cada uno para producirlo.
| Regresión lineal |
Dos números: pendiente 6.78e-05 e
intersección 3.75. Terminado el ajuste, los 27 países ya no
hacen falta y se pueden borrar. Predecir es una multiplicación y una suma.
|
| k-vecinos | El dataset entero. No resume nada: guarda las 27 filas y, ante un caso nuevo, recorre buscando los 3 más parecidos y promedia su satisfacción. El «entrenamiento» es literalmente copiar los datos. |
Esa forma no es un defecto del dibujo, es la predicción real. El k-vecinos no interpola: devuelve el promedio de un conjunto discreto, y ese conjunto solo cambia en saltos. Por eso los escalones tienen anchos distintos: son más anchos donde los países están más separados.
La recta, en cambio, no puede saltar. Se le impuso una forma antes de ver un solo dato, y lo único que el ajuste decidió fue su inclinación y su altura. Eso es exactamente lo que significa «basado en modelo»: la forma se elige, los datos solo la calibran.
En la demo se ve mejor que en la imagen, porque ahí se resaltan los tres países que el modelo está usando en cada momento y se puede ver el instante en que uno sale y otro entra.
La recta explica el 73% de la variación. El 27% restante no es ruido de medición ni un problema de muestra pequeña: es que la satisfacción de un país no es una función de su riqueza.
En la gráfica se ve a simple vista. Hay países ricos claramente por debajo de la recta y países modestos por encima. Ninguna recta puede pasar por ambos a la vez, porque una recta solo tiene dos grados de libertad y la estructura de los datos necesita más.
Eso es subajuste: un modelo demasiado simple para lo que hay. Se arregla con más parámetros, mejores variables o menos regularización, nunca con más datos. Esa es la diferencia clave frente al sobreajuste.
Ese R² está calculado sobre los mismos datos con los que se ajustó. No es una estimación de cómo generalizaría. Es solo cuánta variación capta la recta donde ya sabe la respuesta. Con 27 filas no hay conjunto de prueba que signifique nada.
| Sin train/test | Partir 27 filas deja unas 5 en prueba. El número que saliera dependería de qué cinco países tocaron. |
| Sin MLflow | El resto del repositorio registra cada experimento. Aquí serían dos modelos de una línea sin hiperparámetros que comparar: ceremonia sin sustancia. |
| Sin validación cruzada | Mismo motivo. Promediar pliegues de cinco países mide ruido de muestreo, no desempeño. |
Decirlo importa porque el capítulo dedica su última sección justo a esto: a que el conjunto de prueba se gasta y a que medir mal es peor que no medir. Publicar un 0.73 sin la advertencia sería contradecir el capítulo dentro del capítulo.
cd ch01-panorama
make lifesat
reports/lifesat.png y vuelca los datos que consume la demo en
web/public/data/ch01.json, 2.4 KB, que es todo lo que el navegador
necesita para reajustar ambos modelos por su cuenta.
Lo que este dataset deja. Que «entrenar» significa cosas distintas según el modelo: para uno es resolver un ajuste, para otro es guardar una copia. Y que dos modelos con la misma respuesta pueden tener costes de operación incomparables.
Probarlo en vivo →