← 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

La pregunta de esta página

¿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

La nota que cuenta es la de los datos que el modelo no ha visto
Se reserva una parte de los datos, se entrena con el resto y se mide sobre la reservada. Si las dos notas se parecen, el modelo generaliza. Si la de entrenamiento es mucho mejor, ha memorizado.

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.

Separar los datos no protege de una fuga de información
La partición protege de la memorización, pero no de usar una variable que no se conoce en el momento de predecir. Eso es la fuga de información y se manifiesta al revés: la nota de prueba sale buena y es igual de falsa.

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.