La fuga silenciosa
La fuga significa que la información de las filas de prueba llega al modelo antes de ser puntuada. Las formas ruidosas son fáciles de evitar (una variable construida con el precio de mañana). La forma silenciosa se esconde en el preprocesamiento: se eligen las mejores columnas, o se escala, o se rellenan huecos con todas las filas, y solo después se divide para la validación cruzada. Cada pliegue de prueba ya influyó en la elección y la puntuación resulta halagüeña. La selección de variables es el peor infractor, porque cien columnas ruidosas siempre contienen algunas que parecen predictivas en cualquier muestra; si se eligen con todos los datos, los pliegues de prueba son en parte «predichos» por columnas elegidas porque encajaban con esos mismos pliegues. La solución estructural es un Pipeline: cuando se da a cross_val_score el pipeline completo, reajusta escalado, selección y modelo en cada ventana de entrenamiento y solo luego puntúa la ventana de prueba.
El laboratorio usa una pregunta deliberadamente difícil: ¿pueden los rendimientos de ayer de 60 activos más predecir si SPY sube hoy? Casi no hay nada que encontrar. La evaluación con fuga (SelectKBest(f_classif, k=5) sobre todas las filas y luego validación cruzada TimeSeriesSplit) da un AUC de 0,534. La honesta (escalador, selector y regresión logística en un pipeline, reajustados en cada ventana) da 0,512. Los 0,022 de diferencia son pura fuga. También se puede mirar dentro: cross_validate(modelo, X, y, cv=..., return_estimator=True) devuelve los pipelines ajustados, y estimator.named_steps['select'].get_support(indices=True) enumera las columnas que eligió cada uno. En los cinco pliegues solo una columna se elige siempre, que es lo que parece una selección sobre ruido. Una puntuación calculada con un pipeline se puede defender; una calculada tras «un poco de preprocesamiento sobre todo» no.
- Primero dividir, luego aprender: el escalado, la selección y la imputación pertenecen al interior del bucle de validación cruzada.
- Un Pipeline es una protección contra fugas: dé a
cross_val_scoreel pipeline completo y cada paso se reajusta en cada ventana de entrenamiento. - Mire lo que eligió cada pliegue: las columnas que cambian de un pliegue a otro son ruido, no señal.
Lab: qué se califica
- La evaluación con fuga15 pts
- El pipeline10 pts
- La evaluación honesta15 pts
- Lo que eligió cada pliegue20 pts
- El tamaño de la fuga10 pts
- La comparación con datos reales30 pts