Métricas, outliers y polinomios
En simple: lee esto primero
Para saber si el modelo es bueno, medimos cuánto se equivoca en promedio; y si una recta no alcanza, podemos usar curvas.
Es como calificar a un pronosticador del clima: ¿por cuántos grados se equivoca en promedio? ¿Y es mejor que simplemente decir «hará la temperatura de siempre»?
- MSE / RMSE / MAE miden el error típico (RMSE y MAE en las mismas unidades que lo que predices).
- R² responde: ¿qué tanto mejor que predecir siempre el promedio? 1 = perfecto, 0 = igual que el promedio.
- Con curvas (polinomios) puedes ajustar mejor, pero si te pasas el modelo empieza a «memorizar» el ruido.
- outlier
- un dato raro, muy lejos del resto, que puede jalar la recta hacia él.
- features polinómicas
- agregar x², x³… como nuevas columnas para que la «recta» pueda curvarse.
- overfitting (sobreajuste)
- el modelo se aprende de memoria los datos de entrenamiento, incluido el ruido, y falla con datos nuevos.
- underfitting
- el modelo es demasiado simple y ni siquiera acierta en los datos de entrenamiento.
Más abajo viene la versión completa, con fórmulas. Si una palabra aparece subrayada con puntos, pasa el mouse (o tócala) para ver qué significa.
Midiendo el error
Sección titulada «Midiendo el error»Con residuales sobre puntos de validación o test:
- RMSE vuelve a las unidades del target («un error de 50 soles», no «50 soles²»): es lo más fácil de reportar y es justo lo que minimizan los mínimos cuadrados.
- MAE pesa cada error linealmente: mucho más robusto a outliers.
- Siempre RMSE ≥ MAE; la brecha crece cuando unos pocos errores son grandes: una pista de outliers.
: ¿cuánto mejor que la media?
Sección titulada «R2R^2R2: ¿cuánto mejor que la media?»Estas métricas dicen qué tan grande es el error, no si es bueno. Para eso comparamos contra el modelo tonto que siempre predice :
perfecto; = igual que la media; puede ser negativo en datos de validación (peor que la media). No tiene unidades, así que compara entre problemas. Ejemplo de la slide: , .
¿Qué métrica reportar?
Sección titulada «¿Qué métrica reportar?»| Situación | Métrica recomendada | Por qué |
|---|---|---|
| Comunicar el error a un no experto | RMSE o MAE | están en las unidades del target («S/ 230 de error típico») |
| Los errores grandes son graves (sobrecarga, stock) | RMSE / MSE | eleva al cuadrado: castiga fuerte los errores grandes |
| Hay outliers que no quieres que dominen | MAE | lineal: un outlier pesa como uno más |
| Comparar entre problemas distintos | sin unidades: «qué fracción de la variación explico» | |
| Elegir hiperparámetros | la misma métrica, en validación | nunca en train ni en test |
Predicho vs real
Sección titulada «Predicho vs real»Graficar contra en datos no vistos: puntos pegados a la diagonal = preciso; curvas o abanicos sistemáticos revelan sesgo o varianza cambiante. Ese dibujo muestra dónde falla el modelo, cosa que esconde en un número.
Outliers y lectura de coeficientes
Sección titulada «Outliers y lectura de coeficientes»Los mínimos cuadrados son sensibles a outliers: al elevar al cuadrado, un punto lejano domina el costo e inclina la recta hacia él (pruébalo en el simulador de la página anterior). Inspecciona tus datos; considera pérdidas robustas si los outliers son reales.
Cada es el cambio esperado en por una unidad más de , manteniendo las demás fijas. El signo da la dirección y la magnitud la fuerza, pero las magnitudes solo son comparables si las features comparten escala: estandariza primero. Cuidado: con features correlacionadas «mantener las demás fijas» es frágil, y un peso es asociación, no causalidad.
Cuando una recta no basta: features polinómicas
Sección titulada «Cuando una recta no basta: features polinómicas»Una recta solo tiene dos perillas: puede inclinarse pero no doblarse. Señal de underfitting: los residuales no son ruido aleatorio, todavía trazan un patrón.
El truco: mantener la misma máquina pero alimentarla con potencias de como features nuevas:
La matriz de diseño (de Vandermonde) solo gana columnas. Nada más cambia: sigue siendo mínimos cuadrados lineales, mismas ecuaciones normales, mismo descenso de gradiente. La curva es una suma ponderada de funciones base fijas; los mínimos cuadrados solo eligen los pesos.
Interacciones
Sección titulada «Interacciones»Con dos entradas, grado 2 agrega también el término cruzado: . Si la verdad es (una silla), un plano da ; agregar la columna da : ahora el efecto de depende de . Pero grado sobre entradas necesita columnas (286 para grado 3 y 10 entradas): se sobreajusta rápido.
Subiendo de grado: under → bien → overfit
Sección titulada «Subiendo de grado: under → bien → overfit»Sube el grado… y mira la validación
Datos de sin(2πx) + ruido. El modelo sigue siendo lineal en los pesos: solo añadimos columnas x², x³… a la matriz de diseño. Los puntos llenos entrenan; los huecos validan.
- Grado 1: muy rígido (underfit). Grado 3: sigue la señal. Grado 9+: persigue el ruido (overfit).
- El síntoma del overfitting son los pesos enormes: una curva ondulante se arma con coeficientes gigantes de signos opuestos que casi se cancelan.
- ¿Y si simplemente prohibimos que los pesos crezcan? Eso es ridge: , con solución . Mueve el slider de λ arriba. Es el tema de la siguiente unidad.
Ejercicio
Sección titulada «Ejercicio»Un modelo tiene en validación y . ¿? ¿Qué significa?
Ver solución
. Es negativo: el modelo predice peor en validación que simplemente responder la media siempre. Típico de un modelo sobreajustado evaluado fuera de su training set.
Autoevaluación
0/5 correctas · 0 respondidasEn código
Sección titulada «En código»from sklearn.pipeline import make_pipelinefrom sklearn.preprocessing import PolynomialFeatures, StandardScalerfrom sklearn.linear_model import LinearRegression, Ridgefrom sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
for deg in [1, 3, 9]: m = make_pipeline(PolynomialFeatures(deg), StandardScaler(), LinearRegression()) m.fit(X_tr, y_tr) p = m.predict(X_val) print(deg, mean_squared_error(y_val, p) ** 0.5, # RMSE mean_absolute_error(y_val, p), # MAE r2_score(y_val, p)) # R² (puede ser < 0)
# grado alto + ridge: misma flexibilidad, pesos controladosm = make_pipeline(PolynomialFeatures(9), StandardScaler(), Ridge(alpha=1e-3)).fit(X_tr, y_tr)Para profundizar
Sección titulada «Para profundizar»Fuente ·ML_Course_Linear_Regression.pdf (slides 29–46) · ML_Course/session-02d-evaluation-and-complexity.ipynb · BANCO_DE_PREGUNTAS_ML_PART_1.pdf