Blog de Amazon Web Services (AWS)
Análisis exploratorio de datos, feature engineering y puesta en funcionamiento de su flujo de datos en su pipeline de ML con Amazon SageMaker Data Wrangler
Por Phi Nguyen y Roberto Bruno Martins
Según la encuesta The State of Data Science 2020 , la gestión de datos, el análisis exploratorio de datos (EDA), la selección de características y el feature engineering representan más del 66% del tiempo de un científico de datos (ver el siguiente diagrama).
La misma encuesta pone de relieve que los tres principales obstáculos para implementar un modelo en producción son la administración de dependencias y entornos, seguridad y deficiencias de habilidades (consulte el siguiente diagrama).
La encuesta posiciona que estas luchas resultan en que menos de la mitad (48%) de los encuestados se sientan capaces de ilustrar el impacto que tiene la ciencia de datos en los resultados empresariales.
Entre en Amazon SageMaker Data Wrangler, la forma más rápida y sencilla de preparar datos para el aprendizaje automático (ML). SageMaker Data Wrangler le ofrece la posibilidad de utilizar una interfaz visual para acceder a los datos, realizar feature engineering y EDA, y operar sin problemas el flujo de datos exportándolos a un pipeline de Amazon SageMaker , un trabajo de Amazon SageMaker Data Wrangler, un archivo Python o SageMaker grupo de features.
SageMaker Data Wrangler también le proporciona más de 300 transformaciones integradas, transformaciones personalizadas utilizando un tiempo de ejecución Python, PySpark o SparkSQL, análisis de datos integrado como gráficos comunes (como diagrama de dispersión o histograma), gráficos personalizados usando la biblioteca Altair y análisis de modelos útiles como la importancia de la entidad, la fuga de destino y la explicabilidad del modelo. Finalmente, SageMaker Data Wrangler crea un archivo de flujo de datos que se puede versionar y compartir entre sus equipos para su reproducibilidad.
Resumen de la solución
En esta publicación, utilizamos el ejemplo de la tienda de demostración minorista y generamos un conjunto de datos de muestra. Utilizamos tres archivos: users.csv, items.csv y interactions.csv. Primero preparamos los datos con el fin de predecir el segmento de clientes en función de las interacciones pasadas. Nuestro objetivo es el campo llamado persona, que luego transformamos y cambiamos el nombre a USER_SEGMENT.
El código siguiente es una vista previa del dataset de usuarios:
id, nombre de usuario, correo electrónico, nombre_nombre, apellidos, direcciones, edad, género, persona 1, usuario1, nathan.smith@example.com, Nathan, Smith, "[{" "nombre_nombre "»: «" Nathan "», «" apellido "»: «" Smith "», «" address1"»: «" 049 Isaac Stravenue Apt. 770"», «" address2"»: «" "», «" país "»: «" US "», «" ciudad "»: «" Johnsonmouth "», «" estado "»: «" NY "», «" código postal "»: «»12758"», «" default "»: true}]» ,28, M, electronics_beauty_outdoors 2, usuario2, kevin.martinez@example.com, Kevin, Martínez, "[{" "nombre_nombre "»: «" Kevin "», «" apellido "»: «" Martinez "», «" address1"»: «" 074 Jennifer Flats Suite 538"», «" address2"»: «" "», «" país "»: «" US "», «" ciudad "»: «" East Christineview "», «" estado "»: «" MI "», «" código postal "»: «" 49758"», «" default"": true}]» ,19, M, electronics_beauty_outdoors
El código siguiente es una vista previa del dataset de elementos:
ITEM_ID, ITEM_URL, ITEM_SK, ITEM_NAME, ITEM_CATEGORY, ITEM_STYLE, ITEM_DESCRIPTION, ITEM_PRICE, ITEM_IMAGE, ITEM_FEATURED, ITEM_GENDER_AFFINITY 36, http://dbq4nocqaarhp.cloudfront.net/#/product/36,,Exercise Auriculares, electrónica, auriculares, estos audífonos rojos con estilo se envuelven de forma segura alrededor de tus oídos haciéndolos perfectos cuando haces ejercicio o sobre la marcha. 49, http://dbq4nocqaarhp.cloudfront.net/#/product/49,,Light Marrón cuero cordones botas, calzado, botas, lo suficientemente resistente para el aire libre pero con estilo para llevar a cabo en la ciudad.,89.95,11.jpg,,
El código siguiente es una vista previa del dataset de interacciones:
ITEM_ID, USER_ID, EVENT_TIPO_EVENTO, MARCA DE TIEMPO 2,2539, Vista del producto,1589580300 29,5575, Vista del producto,1589580305 4,1964, Vista del producto,1589580309 46.5291, Vista del producto,1589580309
Esta publicación no pretende ser una guía paso a paso, sino describir el proceso de preparación de un conjunto de datos de entrenamiento y resaltar algunas de las transformaciones y capacidades de análisis de datos usando SageMaker Data Wrangler. Puede descargar los archivos.flow si desea descargar, cargar y volver a rastrear el ejemplo completo en su entorno de SageMaker Studio.
En un nivel alto, realizamos los siguientes pasos:
- Conéctese a Amazon Simple Storage Service (Amazon S3) e importe los datos.
- Transforme los datos, incluyendo conversión de tipos, soltando columnas innecesarias, imputando valores faltantes, codificación de etiquetas, una codificación en caliente y transformaciones personalizadas para extraer elementos de una columna con formato JSON.
- Cree resúmenes de tablas y gráficos para el análisis de datos. Utilizamos la opción de modelo rápido para tener una idea de qué características están agregando potencia predictiva a medida que avanzamos con nuestra preparación de datos. También utilizamos la capacidad de fuga de objetivos incorporada y obtenemos un informe sobre cualquier característica que corra el riesgo de fugas.
- Cree un flujo de datos, en el que combinamos y unimos las tres tablas para realizar más agregaciones y análisis de datos.
- Itere mediante la realización de ingeniería de entidades o análisis de datos adicionales en los datos recién agregados.
- Exporte nuestro flujo de trabajo a un trabajo de SageMaker Data Wrangler.
Requisitos previos
Asegúrese de que no tiene límites de cuota en la parte del tipo de instancia m5.4xlarge de la aplicación Studio antes de crear un nuevo flujo de datos. Para obtener más información acerca de los requisitos previos, consulte Introducción a Data Wrangler.
Importación de los datos
Importamos nuestros tres archivos CSV desde Amazon S3. SageMaker Data Wrangler admite archivos CSV y Parquet. También le permite muestrear los datos en caso de que los datos sean demasiado grandes para caber en su aplicación de estudio. La siguiente captura de pantalla muestra una vista previa del conjunto de datos de usuarios.
Después de importar nuestros archivos CSV, nuestros conjuntos de datos se parecen a la siguiente captura de pantalla en SageMaker Data Wrangler.
Ahora podemos añadir algunas transformaciones y realizar análisis de datos.
Transformación de los datos
Para cada tabla, verificamos los tipos de datos y nos aseguramos de que se infiera correctamente.
Tabla Elementos
Para realizar transformaciones en la tabla de elementos, siga los pasos siguientes:
- En la interfaz de usuario de SageMaker Data Wrangler, para la tabla de elementos, elija +.
- Elija Editar tipos de datos.
La mayoría de las columnas fueron inferidas correctamente, excepto una. A la columna ITEM_FEATURED
le faltan valores y realmente debe ser moldeada como booleana.
Para la tabla de items, realizamos las siguientes transformaciones:
- Rellena los valores faltantes con false para la columna
ITEM_FEATURED
- Elimina columnas innecesarias como
URL, SK, IMAGE, NAME, STYLE, ITEM_FEATURED y DESCRIPTION
- Cambiar el nombre
ITEM_FEATURED_IMPUTED a ITEM_FEATURED
- Función de la columna
ITEM_FEATURED
como booleana - Codifique la columna
ITEM_GENDER_AFFINITY
3. Para agregar una nueva transformación, elija + y elija Agregar transformación .
4. Rellene los valores que faltan utilizando la transformación integrada de gestión de valores faltantes .
5. Para borrar columnas, en Administrar columnas, Para columna Entrada, seleccione ITEM_URL.
a. Para Operador de columna Necesario, elija Coloque columna.
b. Repita este paso para SK, IMAGE, NAME, STYLE, ITEM_FEATURED
y DESCRIPTION
6. En Conversión de tipo, para Columna, seleccione ITEM_FEATURED
7. Para, elija Booleano
8. En Encore categórico, agregue una transformación de codificación activa de una sola a la columna ITEM_GENDER_AFFINITY
.
9. Cambie el nombre de nuestra columna de ITEM_FEATURED_IMPUTED
a ITEM_FEATURED
.
10. Ejecute un resumen de tabla.
El análisis de datos de resumen de tabla no proporciona información sobre todas las columnas.
11. Ejecute la función df.info () como una transformación personalizada.
12. Elija Vista previa para verificar que nuestra columna ITEM_FEATURED
viene como un tipo de datos booleano.
DataFrame.info () imprime información sobre el DataFrame, incluidos los tipos de datos, los valores no nulos y el uso de memoria.
13. Compruebe que la columna ITEM_FEATURED se haya proyectado correctamente y que no tenga ningún valor nulo.
Pasemos a la tabla de usuarios y preparemos nuestro conjunto de datos para la capacitación.
Tabla Usuarios
Para la tabla de usuarios, realizamos los siguientes pasos:
- Suelte columnas innecesarias, como nombre de usuario, correo electrónico, nombre y apellidos.
- Extraiga elementos de una columna JSON como código postal, estado y ciudad.
La columna de dirección que contiene una cadena JSON se parece al siguiente código:
[{«first_name»: «Nathan», «apellido»: «Smith», «dirección1": «049 Isaac Stravenue Apt. 770", «dirección2": «», «país»: «US», «ciudad»: «Johnsonmouth», «estado»: «NY», «código postal»: «12758", «default»: true }]
Para extraer elementos de ubicación relevantes para nuestro modelo, aplicamos varias transformaciones y las guardamos en sus respectivas columnas. La siguiente captura de pantalla muestra un ejemplo de extracción del código postal del usuario.
Aplicamos la misma transformación para extraer ciudad y estado, respectivamente.
3. En la siguiente transformación, dividimos y reorganizamos las diferentes personas (como electronics_beauty_outdoors) y lo guardamos como USER_SEGMENT
.
4. También realizamos one-hot encoding en la columna USER_GENDER
.
Tabla de interacciones
Finalmente, en la tabla de interacciones, completamos los siguientes pasos:
- Realice una transformación personalizada para extraer la fecha y hora del evento de una marca de hora.
Las transformaciones personalizadas son bastante potentes porque le permiten insertar un fragmento de código y ejecutar la transformación utilizando diferentes motores de tiempo de ejecución como PySpark, Python o SparkSQL. Todo lo que tiene que hacer es comenzar su transformación con df, lo que denota DataFrame.
El siguiente código es un ejemplo que usa una transformación PySpark personalizada para extraer la fecha y hora de la marca de hora:
from pyspark.sql.functions import from_unixtime, to_date, date_format df = df.withColumn('DATE_TIME', from_unixtime('TIMESTAMP')) df = df.withColumn( 'EVENT_DATE', to_date('DATE_TIME')).withColumn( 'EVENT_TIME', date_format('DATE_TIME', 'HH:mm:ss'))
2. Realizar one-hot encoding en EVENT_TYPE
3. Por último, elimine las columnas que no necesitemos.
Realización de análisis de datos
Además de los análisis de datos integrados comunes como gráficos de dispersión e histogramas, SageMaker Data Wrangler le ofrece la capacidad de crear visualizaciones personalizadas utilizando la biblioteca Altair.
En el siguiente gráfico de histograma, hemos agrupado al usuario por rangos de edad en el eje x y el porcentaje total de usuarios en el eje y.
También podemos usar la funcionalidad de modelo rápido para mostrar la importancia de la función. La puntuación F1 que indica la precisión predictiva del modelo también se muestra en la siguiente visualización. Esto le permite iterar agregando nuevos conjuntos de datos y realizando ingeniería de funciones adicionales para mejorar de forma incremental la precisión del modelo.
La siguiente visualización es una gráfica de caja por edad y estado. Esto es particularmente útil para entender el rango intercuartil y los posibles valores atípicos.
Creación de un flujo de datos
SageMaker Data Wrangler crea un flujo de datos y mantiene las dependencias de todas las transformaciones, análisis de datos y uniones de tablas. Esto le permite mantener un linaje de su análisis de datos exploratorios, pero también le permite reproducir experimentos pasados de forma consistente.
En esta sección, hacemos un join a nuestras tablas de interacciones e items.
- Join a nuestras tablas usando la clave
ITEM_ID
. - Utilice una transformación personalizada para agregar nuestro conjunto de datos por
USER_ID
y generar otras entidades pivotando losITEM_CATEGORY
yEVENT_TYPE
:
import pyspark.sql.functions as F df = df.groupBy(["USER_ID"]).pivot("ITEM_CATEGORY") .agg(F.sum("EVENT_TYPE_PRODUCTVIEWED").alias("EVENT_TYPE_PRODUCTVIEWED"),
F.sum("EVENT_TYPE_PRODUCTADDED").alias("EVENT_TYPE_PRODUCTADDED"), F.sum("EVENT_TYPE_CARTVIEWED").alias("EVENT_TYPE_CARTVIEWED"), F.sum("EVENT_TYPE_CHECKOUTSTARTED").alias("EVENT_TYPE_CHECKOUTSTARTED"), F.sum("EVENT_TYPE_ORDERCOMPLETED").alias("EVENT_TYPE_ORDERCOMPLETED"), F.sum(F.col("ITEM_PRICE") * F.col("EVENT_TYPE_ORDERCOMPLETED")).alias("TOTAL_REVENUE"), F.avg(F.col("ITEM_FEATURED").cast("integer")).alias("FEATURED_ITEM_FRAC"), F.avg("GENDER_AFFINITY_F").alias("FEM_AFFINITY_FRAC"), F.avg("GENDER_AFFINITY_M").alias("MASC_AFFINITY_FRAC")).fillna(0)
3. Join al conjunto de datos con las tablas de usuarios .
La siguiente captura de pantalla muestra cómo es nuestro DAG después de unir todas las tablas juntas.
4. Ahora que hemos combinado las tres tablas, ejecute el análisis de datos para la fuga del objetivo.
Target leakage o data leakage es uno de los problemas más comunes y difíciles a la hora de crear un modelo. Las Target leakage significan que se utilizaron funciones como parte del entrenamiento de su modelo que no están disponibles en el momento de la inferencia. Por ejemplo, si se intenta predecir un accidente automovilístico y una de las características es airbag_deployment
, no se sabe si el airbag se ha desplegado hasta que ocurrió el accidente.
La siguiente captura de pantalla muestra que no tenemos un candidato fuerte de Target leakage después de ejecutar el análisis de datos.
5. Finalmente, ejecutamos un modelo rápido en el conjunto de datos unido.
La siguiente captura de pantalla muestra que nuestra puntuación de F1 es de 0,89 después de unir datos adicionales y realizar más transformaciones de características.
Exportación del flujo de datos
SageMaker Data Wrangler le ofrece la posibilidad de exportar el flujo de datos a un Jupyter notebook con código rellenado previamente para las siguientes opciones:
- Trabajo de SageMaker Data Wrangler
- SageMaker Pipelines
- SageMaker Feature Stores
SageMaker Data Wrangler también puede generar un archivo Python.
El trabajo de SageMaker Data Wrangler se rellenó previamente en un cuaderno Jupyter listo para ser ejecutado.
Conclusión
SageMaker Data Wrangler facilita la ingesta de datos y la realización de tareas de preparación de datos, como análisis exploratorio de datos, selección de características, ingeniería de características y análisis de datos más avanzados, como importancia de las características, fugas de objetivos y explicabilidad del modelo mediante una interfaz de usuario fácil e intuitiva. SageMaker Data Wrangler hace que la transición de convertir el flujo de datos en un artefacto operativo como un trabajo de SageMaker Data Wrangler, una tienda de funciones de SageMaker o una canalización de SageMaker sea muy fácil con un solo clic de un botón.
Inicie sesión en su entorno de Studio, descargue el archivo.flow y pruebe SageMaker Data Wrangler hoy mismo.
Este artigo foi traduzido do Blog da AWS em Inglês.
Sobre os Autores
Phi Nguyen es Arquitecto de Soluciones de AWS que ayuda a los clientes en su viaje a la nube con un enfoque especial en el lago de datos, el análisis, las tecnologías semánticas y el aprendizaje automático. En su tiempo libre, puedes encontrarlo andando en bicicleta al trabajo, entrenando el equipo de fútbol de su hijo o disfrutando de pasear por la naturaleza con su familia.
Roberto Bruno Martins es un Arquitecto de Soluciones Especialista en Aprendizaje Automático, que ayuda a clientes de varias industrias a crear, implementar y ejecutar soluciones de aprendizaje automático. Ha estado trabajando con datos desde 1994, y no tiene planes de parar pronto. En su tiempo libre juega juegos, practica artes marciales y le gusta probar comida nueva.
Revisor
Sergio Beltrán es arquitecto de soluciones especialista en AI/ML en AWS. En su rol apoya a los clientes a encontrar la mejor solución y arquitectura para sus necesidades y aprovechar los servicios de AI/ML para generar innovación y mejorar la productividad. Antes de AWS, trabajó como data scientist y gerente de business development en la industria Telco.