¿Imputación antes o después de dividirse en tren y prueba?

18

Tengo un conjunto de datos con N ~ 5000 y falta aproximadamente 1/2 en al menos una variable importante. El principal método analítico será el riesgo proporcional de Cox.

Planeo usar la imputación múltiple. También me dividiré en un tren y un set de prueba.

¿Debo dividir los datos y luego imputarlos por separado, o imputar y luego dividir?

Si es importante, lo usaré PROC MIen SAS.

Peter Flom - Restablece a Monica
fuente
2
¿50% de valores faltantes para una variable crucial? Ugh En lugar de imputar, ¿por qué no crear una categoría 'Falta' para la variable?
RobertF
A ninguna variable le falta el 50%, pero falta al menos un 50% en al menos una. Además, son continuos, por lo que "faltar" arruinaría las cosas.
Peter Flom - Restablece a Monica
Ah Me pongo nervioso usando la imputación. Me pregunto sobre los méritos de tener una variable continua con 50% de valores imputados vs.convertir el cont. variable a categórica con una categoría 'Missing' más suficientes bins para capturar el comportamiento de los valores que no faltan?
RobertF
No me gusta binning variables continuas.
Peter Flom - Restablece a Monica

Respuestas:

20

Debes dividir antes de preprocesar o imputar.

La división entre entrenamiento y conjunto de prueba es un intento de replicar la situación en la que tiene información pasada y está creando un modelo que probará en información futura aún desconocida: el conjunto de entrenamiento toma el lugar del pasado y el conjunto de prueba toma el lugar del futuro, por lo que solo puede probar su modelo entrenado una vez.

Teniendo en cuenta la analogía pasado / futuro, esto significa cualquier cosa que haga para preprocesar o procesar sus datos, como imputar valores perdidos, debe hacer solo en el conjunto de capacitación. Luego puede recordar lo que le hizo a su conjunto de entrenamiento si su conjunto de prueba también necesita preprocesamiento o imputación, de modo que lo haga de la misma manera en ambos conjuntos.

Agregado de los comentarios: si usa los datos de la prueba para afectar los datos de entrenamiento, entonces los datos de la prueba se están utilizando para construir su modelo, por lo que deja de ser datos de prueba y no proporcionará una prueba justa de su modelo. Corre el riesgo de sobreajustar, y fue para desalentar esto que separó los datos de prueba en primer lugar

Enrique
fuente
Cuando dice "lo hace de la misma manera en ambos conjuntos", ¿quiere decir: "utiliza el mismo método para imputar datos faltantes en el conjunto de prueba, pero NO los mismos datos"?
timwiz
@colorlace Use la analogía pasado / futuro. Usaste el conjunto de entrenamiento en el pasado e imputaste algunos valores. Ahora obtiene el conjunto de pruebas en el futuro y desea imputar algunos de sus valores; presumiblemente usará el mismo método que antes aplicado a los datos de la prueba (aunque es libre de incorporar lo que aprendió de los datos de entrenamiento)
Henry
Si "es libre de incorporar lo que aprendió de los datos de entrenamiento", entonces, ¿cómo es eso diferente de no dividirse antes de imputar?
timwiz
1
@colorlace: ese punto final es precisamente lo que digo: nada de lo que hagas con los datos de entrenamiento debe ser informado por los datos de la prueba (la analogía es que el futuro no debería afectar el pasado), pero lo que haces con los datos de la prueba pueden ser informados por los datos de entrenamiento (la analogía es que puedes usar el pasado para ayudar a predecir el futuro)
Henry
1
@colorlace: si usa los datos de prueba para afectar los datos de entrenamiento, entonces los datos de prueba se están utilizando para construir su modelo, por lo que deja de ser datos de prueba y no proporcionará una prueba justa de su modelo. Corre el riesgo de sobreajustar, y fue para desalentar esto que separó los datos de prueba en primer lugar
Henry
1

Creo que será mejor que te separes antes de imputar. Para los casos, es posible que desee imputar los valores faltantes con la media de la columna. En este caso, si se imputa primero con el conjunto de datos válidos tren + y luego se divide, entonces ha utilizado el conjunto de datos de validación antes de construir su modelo, que es la forma en que aparece un problema de fuga de datos.

Pero puede preguntar, si imputo después de dividir, puede ser demasiado tedioso cuando necesito hacer una validación cruzada. Mi sugerencia para eso es usar sklearn pipeline. Realmente simplifica su código y reduce la posibilidad de cometer un error. Ver tubería

cc458
fuente
0

Solo para agregar lo anterior, también favorecería la división antes de la imputación o cualquier tipo de preprocesamiento. Nada de lo que haga con los datos de entrenamiento debe ser informado por los datos de la prueba (la analogía es que el futuro no debería afectar el pasado). Luego puede recordar lo que le hizo a su conjunto de entrenamiento si su conjunto de prueba también necesita preprocesamiento o imputación, de modo que lo haga de la misma manera en ambos conjuntos (la analogía es que puede usar el pasado para ayudar a predecir el futuro) .

Si utiliza los datos de prueba para afectar los datos de entrenamiento de alguna manera, entonces los datos de prueba se están utilizando para construir su modelo, por lo que deja de ser datos de prueba y no proporcionará una prueba justa de su modelo. ¡Corre el riesgo de un ajuste excesivo, y fue para desalentar esto que separó los datos de prueba en primer lugar!

Creo que el paquete caret en r es muy útil en ese entorno. En particular, encontré que la publicación es extremadamente útil https://topepo.github.io/caret/model-training-and-tuning.html

ALEX.VAMVAS
fuente