← 16 · ¿Se puede predecir? Y las anomalías H5
Medido con los datos con los que aprendió, un modelo sin señal saca un 0,65
¿Cómo se sabe si un modelo ha aprendido algo o solo ha memorizado los datos?
1 El problema
La página 16 intenta predecir la satisfacción de cada venta con lo que se sabe de ella (producto, categoría, provincia, importe, cantidad, precio y mes). Concluye que no se puede. Esa conclusión depende de un paso que es fácil saltarse: apartar una parte de las ventas antes de entrenar y medir el modelo solo sobre ellas.
2 Por qué engaña
Un modelo flexible, como un bosque de árboles sin límite de profundidad, puede memorizar los datos con los que se entrena. Medido sobre esos mismos datos acierta mucho, pero lo que se mide entonces es lo que ha memorizado, que no sirve para predecir una venta nueva.
3 El principio
4 La solución
Separar los datos antes de entrenar, con una semilla fija para poder reproducir el corte. Después se repite con varias particiones distintas para ver cuánto varía la nota de prueba.
5 Qué pasa con estos datos
| Partición | R² entrenamiento | R² prueba |
|---|---|---|
| semilla 42 | 0,6527 | -0,2489 |
| semilla 7 | 0,6560 | -0,2989 |
| semilla 123 | 0,6561 | -0,2793 |
| semilla 2024 | 0,6528 | -0,2629 |
| semilla 99 | 0,6564 | -0,2823 |
Sobre las 12.784 ventas con las que aprende, el bosque explica en torno a dos tercios de la satisfacción, un 0,65. Sobre las 3.196 que no ha visto, el R² sale entre -0,30 y -0,25: negativo, es decir, peor que predecir la media para todas las ventas.
Las cinco particiones dan un resultado muy parecido, así que no depende de un corte concreto. Sin la parte apartada, este mismo bosque se habría presentado como un modelo que explica dos tercios de la satisfacción.
6 Para qué sirve
En cualquier modelo que vaya a usarse con datos nuevos: previsión de demanda, riesgo de impago, probabilidad de baja. Si alguien presenta un modelo sin decir sobre qué datos se midió, esa cifra todavía no es fiable.
El detalle técnico
R² de un bosque aleatorio que predice la satisfacción, medido sobre las ventas que vio y sobre las que no vio, con cinco particiones. 15.980 ventas válidas con satisfacción y como variables producto, provincia, categoría, mes y cantidad. 80 % para entrenar y 20 % para probar, el mismo corte que la página 16. Aquí el bosque va sin límite de profundidad, para que se vea bien la memorización; la página 16 lo limita a doce niveles, suma importe y precio y su nota de prueba se queda en torno a cero.
Las dos notas
X_ent, X_prueba, y_ent, y_prueba = train_test_split(X, y, test_size=0.2, random_state=42)
modelo = RandomForestRegressor(n_estimators=80, random_state=42).fit(X_ent, y_ent)
r2_score(y_ent, modelo.predict(X_ent)) # la nota sobre lo que ya vio
r2_score(y_prueba, modelo.predict(X_prueba)) # la nota que vale Fuente: segmentacion.json, campo h5_particion.