GraphReduce Utilizando Grafos para Abstracciones de Ingeniería de Características

GraphReduce para abstracciones de ingeniería de características

Nota del editor: Wes Madrigal es un ponente en ODSC West del 30 de octubre al 2 de noviembre. Asegúrate de ver su charla, “Usando grafos para tuberías de ingeniería de características grandes”, para obtener más información sobre GraphReduce y más.

Para los lectores que trabajan en ML/AI, es bien sabido que los modelos de aprendizaje automático prefieren vectores de información numérica. Cuando tenemos un vector de datos, manipularlo para codificarlo, filtrar valores atípicos, normalizarlo, imputar valores, etc., es relativamente sencillo. Se ha hecho mucho trabajo en el área de la automatización de la ingeniería de características, pero gran parte de ello asume que la entrada es un vector de características plano. Sin embargo, la mayoría de los datos empresariales no se aprovechan desde una perspectiva de análisis y aprendizaje automático, y gran parte de la información más valiosa se encuentra en esquemas de bases de datos relacionales como OLAP. Acceder a estos esquemas y extraer vectores de características listos para el aprendizaje automático puede ser complicado, ya que se necesita saber dónde reside la entidad de datos de interés (por ejemplo, clientes), cuáles son sus relaciones y cómo están conectadas, y escribir SQL u otro lenguaje similar para seleccionar, filtrar, unir y agregar la información a una granularidad específica. Para complicar aún más las cosas, la fuga de datos causa problemas graves en los modelos de aprendizaje automático, por lo que el tiempo debe manejarse cuidadosamente entre entidades. En términos sencillos, “fuga de datos” significa permitir que los datos del período de etiquetado se filtren en los datos de entrenamiento del modelo. Por último, a medida que se idean, proponen y agregan características, la interfaz puede convertirse en un Frankenstein de tuberías de SQL o Python que es difícil de ampliar, mantener o reutilizar. En este documento, proponemos GraphReduce como una abstracción para estos problemas. Demostraremos un ejemplo de proceso de ingeniería de características en un esquema de comercio electrónico y cómo GraphReduce maneja la complejidad de la ingeniería de características en el esquema relacional.

Supongamos que estamos prediciendo si un cliente interactuará con una notificación para impulsar el alcance. Desafortunadamente, nuestros equipos de ingeniería de datos y aprendizaje automático no han construido un vector de características para nosotros, por lo que todos los datos relevantes se encuentran en el esquema relacional en tablas separadas. El esquema de ejemplo es el siguiente:

  • Clientes
  • Órdenes
  • Eventos de órdenes
  • Productos de órdenes
  • Notificaciones
  • Interacciones de notificaciones

Dado que estamos prediciendo algo sobre el cliente, estaremos modelando a nivel de detalle del cliente.

Comprendiendo las relaciones:

GraphReduce no ayuda con esta parte, por lo que deberás analizar los datos, hablar con un experto en datos o utilizar tecnología emergente. En este caso, el esquema es el siguiente:

  • Clientes -> órdenes
    • Clientes.id = órdenes.customer_id
  • Órdenes -> eventos de órdenes
    • Órdenes.id = eventos de órdenes.order_id
  • Órdenes -> productos de órdenes
    • Órdenes.id = productos de órdenes.order_id
  • Clientes -> notificaciones
    • Clientes.id = notificaciones.customer_id
  • Notificaciones -> interacciones de notificaciones
    • Notificaciones.id = interacciones de notificaciones.notification_id

Comprendiendo la cardinalidad:

Dado que estamos modelando a nivel de detalle del cliente, necesitamos tener una comprensión decente de cómo interactúan las relaciones desde el punto de vista de la cardinalidad. Modelar a nivel de detalle del cliente requiere que unamos todas las relaciones relevantes al cliente y reduzcamos cualquier relación a la granularidad del cliente. Por ejemplo, si el cliente tiene 10 filas y una relación secundaria órdenes tiene 100, debemos reducir la entidad órdenes a la granularidad del cliente emitiendo una agregación GROUP BY en la entidad órdenes y luego unir de nuevo al cliente para obtener un total de 10 filas con información combinada de cliente y órdenes agregadas/reducidas. Por lo general, entender la granularidad es bastante intuitivo, pero en este caso proporcionaremos los recuentos de filas para que quede claro desde el principio.

Las tablas tienen los siguientes recuentos de filas:

  • Clientes: 2 filas
  • Órdenes: 4 filas
  • Productos de órdenes: 16 filas
  • Eventos de órdenes: 26 filas
  • Notificaciones: 10 filas
  • Interacciones de notificaciones: 15 filas

Preparación y filtrado de datos:

La preparación de datos implica eliminar datos incorrectos o atípicos. Esto implicará cosas como filtros, descartar filas, transformar o descartar valores de columna con valores anómalos o incorrectos, e imputar valores faltantes. La preparación de datos ocurre primero a nivel de entidad para que los errores y anomalías no se introduzcan en el conjunto de datos agregado. Aquí hay un ejemplo de cómo podría verse esto en Pandas en nuestra entidad de pedidos:

Unión y cardinalidad:

Suponiendo que hemos cuidado la preparación de datos y la calidad, ahora estamos listos para unir nuestras entidades de datos y aplanarlas en un solo dataframe a nivel de cliente. La clave para hacer esto correctamente es asegurarse de que una tabla secundaria se reduzca a la granularidad del padre emitiendo un GROUP BY para no introducir duplicación de datos. Aquí hay un ejemplo de cómo podría verse esto en Pandas:

Manejo del tiempo:

Para evitar la filtración de datos, debemos asegurarnos de usar claves de fecha confiables y filtrar nuestros datos adecuadamente en torno al período de entrenamiento y el período de etiquetas. El período de entrenamiento contiene información hasta una fecha determinada y el período de etiqueta contiene información después de dicha fecha. Esto nos permite alimentar a nuestro modelo los datos de entrenamiento y decirle qué sucedió en el período futuro que está aprendiendo a predecir. Dado que no estamos tratando con un único vector de características planas, sino con un número arbitrario de tablas, debemos tener cuidado de que el manejo del tiempo sea el mismo en cada relación en el gráfico de cálculo.

Problemas con enfoques únicos:

Los pasos anteriores se encontrarán cada vez que se construyan modelos sobre datos relacionales que no están en un vector de características listo para el aprendizaje automático, que es la mayoría del tiempo. Es cierto que los almacenes de características surgieron como una abstracción hace unos años para resolver gran parte de esto, pero adoptan un enfoque arquitectónico diferente al de GraphReduce. Los detalles de las diferencias entre los almacenes de características como Feast, Tecton o Vertex AI Feature Store se dejan para otra publicación de blog.

Abstracciones:

GraphReduce trata a las entidades/tablas como nodos y las relaciones entre ellos como aristas en una estructura de datos de grafo. La biblioteca hereda de networkx para aprovechar las primitivas de grafo y extender la interfaz. GraphReduce proporciona una abstracción para almacenar parámetros de cálculo de gráficos de nivel superior:

  • El nodo/entidad principal para reducir los datos
  • Cantidad de datos a incluir en el conjunto de datos de entrenamiento histórico
  • Una fecha de corte para dividir entre períodos de entrenamiento y etiquetas
  • Parámetro de backend de cálculo enchufable para usar Spark, Pandas o Dask
  • Parámetro de formato de datos
  • Si el gráfico de cálculo está generando etiquetas o no

El objeto GraphReduce de nivel superior también centraliza el orden de las operaciones que se asignan, típicamente de manera recursiva, a los nodos en el gráfico. El objeto GraphReduce centraliza la orquestación de las operaciones de cálculo en todo el gráfico de nodos y las operaciones de unión entre nodos después de las operaciones reducidas. El diagrama a continuación describe el orden de las operaciones.

La abstracción de nodo en GraphReduce alberga las siguientes operaciones:

  • Obtener datos (cada nodo es responsable de cargar su propia información)
  • Filtrar datos
  • Anotar datos
  • Normalizar datos
  • Reducir datos
  • Preparar datos para características mediante el corte en la fecha de corte
  • Preparar datos para etiquetas mediante el corte en la fecha de corte

Reuniéndolo todo en este ejemplo:

Instanciar el objeto GraphReduce con las especificaciones para la operación de cálculo del gráfico:

Instanciar los nodos sobre los que estamos calculando y agregarlos a GraphReduce:

Ejecutar operaciones de cálculo

Utilizar un vector de características listo para el aprendizaje automático y entrenar un modelo:

Alternativamente, podrías utilizar SQL y hacer algo como esto, pero no lo recomiendo 🙂

Resumen:

Hemos demostrado un ejemplo de conjunto de datos de comercio electrónico, problemas comunes en la agregación de un vector de características listo para el aprendizaje automático a partir de datos relacionales, y abstracciones con GraphReduce. Hemos demostrado que GraphReduce proporciona una interfaz unificada para operaciones de cálculo en conjuntos de datos relacionales de cardinalidad arbitrariamente grande y dinámica. Hablaré con más detalle durante mi próxima charla en ODSC West.

Ejemplo de código completo: https://github.com/wesmadrigal/GraphReduce/blob/master/examples/cust_order_demo.ipynb

Acerca del autor:

Wes Madrigal es un experto en aprendizaje automático con más de una década de experiencia entregando valor empresarial con IA. La experiencia de Wes abarca múltiples industrias, pero siempre con un enfoque en MLOps. Sus áreas de enfoque e interés recientes son los grafos, la computación distribuida y los pipelines de ingeniería de características escalables.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Apple entra en la competencia de la IA generativa con el chatbot 'AppleGPT

El gigante tecnológico Apple sigue adelante con su esperado chatbot impulsado por IA, tentativamente llamado “A...

Inteligencia Artificial

Se analiza el sonido de la tos para identificar la gravedad de los pacientes de COVID-19

Un estudio identificó características tos que pueden ayudar a evaluar la gravedad de la COVID-19 y permitir el monito...

Inteligencia Artificial

Este boletín de inteligencia artificial es todo lo que necesitas #62

Esta semana hemos estado observando el desarrollo de modelos de codificación en META, así como las nuevas capacidades...

Inteligencia Artificial

Superando las Alucinaciones en IA Cómo Factually Augmented RLHF Optimiza la Coherencia de Visión y Lenguaje en Modelos Multimodales Grandes

Mediante un entrenamiento adicional utilizando combinaciones de imágenes y texto o ajustándolas mediante conjuntos de...

Aprendizaje Automático

GPT vs BERT ¿Cuál es mejor?

El aumento en la popularidad de la inteligencia artificial generativa también ha llevado a un aumento en el número de...