¿En qué parte del flujo de trabajo debemos tratar los datos faltantes?

16

Estoy construyendo un flujo de trabajo para crear modelos de aprendizaje automático (en mi caso, usando Python pandasy sklearnpaquetes) a partir de datos extraídos de una base de datos muy grande (aquí, Vertica a través de SQL y pyodbc), y un paso crítico en ese proceso implica que faltan valores de los predictores. Esto es sencillo dentro de una única plataforma de análisis o estadísticas, ya sea Python, R, Stata, etc., pero tengo curiosidad sobre dónde ubicar mejor este paso en un flujo de trabajo multiplataforma.

Es bastante simple hacer esto en Python, ya sea con la sklearn.preprocessing.Imputerclase, usando el pandas.DataFrame.fillnamétodo o a mano (dependiendo de la complejidad del método de imputación utilizado). Pero dado que voy a usar esto para docenas o cientos de columnas en cientos de millones de registros, me pregunto si hay una forma más eficiente de hacerlo directamente a través de SQL con anticipación. Además de las eficiencias potenciales de hacer esto en una plataforma distribuida como Vertica, esto tendría el beneficio adicional de permitirnos crear una tubería automatizada para construir versiones "completas" de tablas, por lo que no necesitamos completar un nuevo conjunto de valores perdidos desde cero cada vez que queremos ejecutar un modelo.

No he podido encontrar mucha orientación sobre esto, pero imagino que podríamos:

  1. crear una tabla de valores sustitutos (p. ej., media / mediana / modo, ya sea global o por grupo) para cada columna incompleta
  2. unirse a la tabla de valores sustitutos con la tabla original para asignar un valor sustituto para cada fila y columna incompleta
  3. use una serie de declaraciones de casos para tomar el valor original si está disponible y el valor sustituto de lo contrario

¿Es esto algo razonable para hacer en Vertica / SQL, o hay una buena razón para no molestarse y simplemente manejarlo en Python? Y si es esto último, ¿hay un caso sólido para hacer esto en pandas en lugar de sklearn o viceversa? ¡Gracias!

Therriault
fuente

Respuestas:

14

Mi fuerte opinión con respecto a tareas automatizadas como la imputación (pero, aquí también puedo incluir el escalado, el centrado, la selección de funciones, etc.) es evitar hacer tales cosas sin inspeccionar cuidadosamente sus datos.

Por supuesto, después de decidir qué tipo de imputación aplicar se puede automatizar (bajo el supuesto de que los nuevos datos tienen la misma forma / problemas).

Entonces, antes que nada, toma una sabia decisión. A menudo perdía el tiempo tratando de automatizar estas cosas, destruyendo mis datos. Le daré algunos ejemplos: - un mercado codificado como N / A, que extrañé y consideré América del Norte - números como -999.0, porque el productor de datos no pudo encontrar un mejor reemplazo para los datos faltantes - número como 0 para presión arterial o temperatura corporal, en lugar de datos faltantes (es difícil imaginar un ser humano vivo con presión arterial 0): múltiples marcadores de posición para datos faltantes, debido al hecho de que los datos se obtuvieron de varias fuentes

Después de eso, debe comprender qué tipo de imputación se parecería mejor a la información de sus datos para una tarea determinada. Esto suele ser mucho más difícil de hacer bien de lo que parece.

Después de todas esas cosas, mi consejo es retrasar su tarea de imputación a una capa superior donde tenga herramientas para reproducir nuevos datos e inspeccionar si no se violan los supuestos de los nuevos datos (si es posible).

rapaio
fuente
1
¡La automatización de +1 no necesariamente mejora las cosas, solo de manera más consistente y a menudo más rápida!
James
4

Therriault, ¡me alegra saber que estás usando Vertica! Revelación completa, soy el principal científico de datos allí :). El flujo de trabajo que describe es exactamente lo que encuentro con bastante frecuencia y creo firmemente en el preprocesamiento de esos conjuntos de datos muy grandes en la base de datos antes de cualquier trabajo de pyodBC y pandas. Sugeriría crear una vista o tabla a través de una consulta basada en archivos solo para garantizar un trabajo reproducible. Buena suerte

Will Cairns
fuente