Desde el procesamiento de datos hasta obtener información rápida, los robustos pipelines son imprescindibles para cualquier sistema de aprendizaje automático (ML, por sus siglas en inglés). A menudo, el equipo de datos, que incluye a los ingenieros de datos y de ML, necesita construir esta infraestructura, y esta experiencia puede ser dolorosa. Sin embargo, el uso eficiente de los pipelines ETL en ML puede ayudar a que su vida sea mucho más fácil.
Este artículo explora la importancia de los pipelines ETL en el aprendizaje automático, un ejemplo práctico de construcción de pipelines ETL con una herramienta popular, y sugiere las mejores formas para que los ingenieros de datos mejoren y mantengan sus pipelines. También discutimos los diferentes tipos de pipelines ETL para casos de uso de ML y proporcionamos ejemplos del mundo real de su uso para ayudar a los ingenieros de datos a elegir el adecuado. Antes de adentrarnos en los detalles técnicos, repasemos algunos conceptos fundamentales.
¿Qué es un pipeline de datos ETL en ML?
Un pipeline de datos ETL es una colección de herramientas y actividades para realizar la extracción (E), transformación (T) y carga (L) de los datos necesarios.
Pipeline ETL | Fuente: Autor
Estas actividades implican la extracción de datos de un sistema, su transformación y luego su procesamiento en otro sistema de destino donde se pueden almacenar y gestionar.
El ML depende en gran medida de los pipelines ETL, ya que la precisión y efectividad de un modelo se ven directamente afectadas por la calidad de los datos de entrenamiento. Estos pipelines ayudan a los científicos de datos a ahorrar tiempo y esfuerzo al asegurarse de que los datos estén limpios, correctamente formateados y listos para su uso en tareas de aprendizaje automático.
Además, los pipelines ETL desempeñan un papel crucial en descomponer los silos de datos y establecer una única fuente de verdad. Veamos en detalle la importancia de los pipelines ETL.
¿Por qué necesitamos un pipeline ETL en el aprendizaje automático?
La importancia de los pipelines ETL radica en el hecho de que permiten a las organizaciones obtener información valiosa de conjuntos de datos grandes y complejos. Aquí hay algunas razones específicas por las que son importantes:
Integración de datos: Las organizaciones pueden integrar datos de diversas fuentes utilizando pipelines ETL. Esto proporciona a los científicos de datos una visión unificada de los datos y les ayuda a decidir cómo se debe entrenar el modelo, los valores para los hiperparámetros, etc.
Control de calidad de datos: A medida que los datos fluyen a través del paso de integración, los pipelines ETL pueden ayudar a mejorar la calidad de los datos estandarizándolos, limpiándolos y validándolos. Esto garantiza que los datos que se utilizarán para ML sean precisos, confiables y consistentes.
Ahorro de tiempo: Como los pipelines ETL automatizan el proceso de 3 pasos principales: Extracción, Transformación y Carga, esto ayuda a ahorrar mucho tiempo y también reduce la probabilidad de errores humanos. Esto permite a los científicos de datos centrarse en la creación de modelos o en su mejora continua.
Escala: Los pipelines ETL modernos son escalables, es decir, se pueden escalar hacia arriba o hacia abajo según la cantidad de datos que necesiten procesar. Básicamente, tienen la flexibilidad y agilidad para realizar cambios en función de las necesidades comerciales.
¿Cuál es la diferencia entre un pipeline ETL y un pipeline de datos?
Un pipeline de datos es un término general para la categoría de mover datos entre diferentes sistemas, y un pipeline de datos ETL es un tipo de pipeline de datos.
— Xoriant
Es común utilizar los términos pipeline de datos ETL y pipeline de datos de forma intercambiable. Aunque ambos términos se refieren a funcionalidades y procesos de transferencia de datos desde diversas fuentes a un único repositorio, no son lo mismo. Veamos por qué no deberíamos utilizarlos como sinónimos.
Comparaciones
Pipeline ETL
Pipeline de datos
Terminología
Como sugiere la abreviatura, ETL implica una serie de procesos: extracción de los datos, transformación y, al final, carga en la fuente de destino.
Un pipeline de datos también implica mover datos de una fuente a otra, pero no necesariamente tiene que pasar por una transformación de datos.
Área de enfoque
ETL ayuda a transformar los datos sin procesar en un formato estructurado que los científicos de datos puedan utilizar fácilmente para crear modelos e interpretar cualquier decisión basada en datos.
Un pipeline de datos se crea con el objetivo de transferir datos de diversas fuentes a un almacén de datos. Luego, se pueden utilizar fácilmente otros procesos o flujos de trabajo para crear soluciones de inteligencia empresarial y análisis.
Operación
El pipeline ETL se ejecuta según un cronograma, por ejemplo, diario, semanal o mensual. Los pipelines ETL básicos son orientados por lotes, donde los datos se mueven en bloques según un cronograma especificado.
Los pipelines de datos a menudo se ejecutan en tiempo real. Los datos se actualizan continuamente y admiten informes y análisis en tiempo real.
En resumen, los ETL pipelines son un tipo de pipeline de datos diseñado específicamente para extraer datos de múltiples fuentes, transformarlos en un formato común y cargarlos en un almacén de datos u otro sistema de almacenamiento. Si bien un pipeline de datos puede incluir varios tipos de pipelines, el pipeline ETL es un subconjunto específico de un pipeline de datos.
Revisamos la arquitectura básica de un pipeline ETL y vimos cómo se puede realizar cada paso para diferentes propósitos, y podemos elegir entre varias herramientas para completar cada paso. La arquitectura ELT y su tipo difieren de una organización a otra, ya que tienen diferentes conjuntos de tecnologías, fuentes de datos y requisitos comerciales.
¿Cuáles son los diferentes tipos de pipelines ETL en ML?
Los pipelines ETL se pueden categorizar según el tipo de datos que se procesan y cómo se procesan. Aquí hay algunos tipos:
Pipeline ETL por lotes: Este es un enfoque ETL tradicional que implica el procesamiento de grandes cantidades de datos de una vez en lotes. Los datos se extraen de una o más fuentes, se transforman en el formato deseado y se cargan en un sistema de destino, como un almacén de datos. El pipeline ETL por lotes es especialmente útil para entrenar modelos con datos históricos o ejecutar trabajos periódicos de procesamiento por lotes.
Pipeline ETL en tiempo real: Esto procesa los datos a medida que llegan en tiempo casi real o en tiempo real; procesar datos continuamente significa que se requiere una menor capacidad de procesamiento en cualquier momento y se pueden evitar los picos de uso. El pipeline ETL en tiempo real es especialmente útil para aplicaciones como la detección de fraudes, donde el procesamiento en tiempo real es fundamental. Los pipelines ETL en tiempo real requieren herramientas y tecnologías como motores de procesamiento en tiempo real y sistemas de mensajería.
Pipeline ETL incremental: Estos pipelines solo extraen y procesan datos que han cambiado desde la última ejecución en lugar de procesar todo el conjunto de datos. Son útiles para situaciones en las que los datos de origen cambian con frecuencia, pero el sistema de destino solo necesita los datos más recientes, por ejemplo, aplicaciones como los sistemas de recomendación, donde los datos cambian con frecuencia pero no en tiempo real.
Pipeline ETL en la nube: El pipeline ETL en la nube para ML implica el uso de servicios basados en la nube para extraer, transformar y cargar datos en un sistema de ML para entrenamiento e implementación. Proveedores de nube como AWS, Microsoft Azure y GCP ofrecen una variedad de herramientas y servicios que se pueden utilizar para construir estos pipelines. Por ejemplo, AWS proporciona servicios como AWS Glue para ETL, Amazon S3 para almacenamiento de datos y Amazon SageMaker para entrenamiento e implementación de ML.
Pipeline ETL híbrido: Estos pipelines combinan el procesamiento por lotes y en tiempo real, aprovechando las fortalezas de ambos enfoques. Los pipelines ETL híbridos pueden procesar grandes lotes de datos en intervalos predeterminados y también capturar actualizaciones en tiempo real de los datos a medida que llegan. El pipeline ETL híbrido es especialmente útil para aplicaciones como el mantenimiento predictivo, donde se necesita una combinación de datos en tiempo real e históricos para entrenar modelos.
Herramientas para pipelines ETL
Para crear un pipeline ETL, como se discutió en la última sección, se requieren herramientas, herramientas que pueden proporcionarnos la funcionalidad de los siguientes pasos básicos de la arquitectura ETL. Hay varias herramientas disponibles en el mercado, aquí hay algunas de las más populares, junto con las características que ofrecen.
Herramienta
Basado en la nube
Conectores preconstruidos
Sin servidor
Opciones de transformación preconstruidas
Soporte de API
Totalmente administrado
Hevo Data
AWS Glue
GCP Cloud Data Fusion
Apache Spark
Talend
Apache Airflow
Cómo construir un pipeline de ETL para Machine Learning?
En la sección anterior, exploramos brevemente algunos conceptos y herramientas básicas de ETL. En esta sección, discutiremos cómo podemos aprovecharlos para construir un pipeline de ETL. Primero, hablemos sobre su arquitectura.
Arquitectura de ETL
La característica distintiva de la arquitectura de ETL es que los datos pasan por todos los procedimientos de preparación requeridos antes de llegar al almacén. Como resultado, el repositorio final contiene datos limpios, completos y confiables que se pueden utilizar posteriormente sin modificaciones.
— Coupler
La arquitectura de ETL a menudo incluye un diagrama como el anterior que describe el flujo de información en el pipeline de ETL desde las fuentes de datos hasta el destino final. Comprende tres áreas principales: Área de aterrizaje, Área de preparación y Área de almacén de datos.
El Área de aterrizaje es el primer destino de los datos después de ser extraídos de la ubicación de origen. Puede almacenar múltiples lotes de datos antes de moverlos a través del pipeline de ETL.
El Área de preparación es una ubicación intermedia para realizar transformaciones de ETL.
El Área de almacén de datos es el destino final de los datos en un pipeline de ETL. Se utiliza para analizar los datos y obtener información valiosa para tomar mejores decisiones comerciales.
La arquitectura del pipeline de datos de ETL es en capas. Cada subsistema es esencial y secuencialmente, cada sub-sistema alimenta al siguiente hasta que los datos llegan a su destino.
Arquitectura del pipeline de datos de ETL | Fuente: Autor
Descubrimiento de datos: Los datos pueden provenir de varios tipos de sistemas, como bases de datos, sistemas de archivos, APIs o fuentes de streaming. También necesitamos el perfilado de datos, es decir, el descubrimiento de datos, para comprender si los datos son adecuados para ETL. Esto implica analizar la estructura, las relaciones y el contenido de los datos.
Ingesta: Se pueden extraer los datos de varias fuentes de datos a un área de preparación o un lago de datos. La extracción se puede realizar utilizando diversas técnicas como APIs, conexiones directas a bases de datos o transferencias de archivos. Los datos se pueden extraer de una sola vez (extracción de una base de datos) o incrementalmente (extracción utilizando APIs), o cuando hay un cambio (extracción de datos de almacenamiento en la nube como S3 cuando se produce un evento).
Transformaciones: Esta etapa implica limpiar, enriquecer y dar forma a los datos para que se ajusten a los requisitos del sistema de destino. Los datos se pueden manipular utilizando diversas técnicas como filtrado, agregación, unión o aplicación de reglas de negocio complejas. Antes de manipular los datos, también debemos limpiarlos, lo que implica eliminar cualquier entrada duplicada, eliminar datos irrelevantes e identificar datos erróneos. Esto ayuda a mejorar la precisión y confiabilidad de los algoritmos de ML.
Almacenamiento de datos: Almacena los datos transformados en un formato adecuado que pueda ser utilizado por los modelos de ML. El sistema de almacenamiento puede ser una base de datos, un almacén de datos o un almacén de objetos basado en la nube. Los datos se pueden almacenar en formato estructurado o no estructurado, según los requisitos del sistema.
Ingeniería de características: La ingeniería de características implica seleccionar, transformar y combinar datos en bruto para crear características significativas que se puedan utilizar en modelos de ML. Esto afecta directamente la precisión y la interpretabilidad del modelo. La ingeniería de características efectiva requiere conocimiento del dominio, creatividad y experimentación iterativa para determinar el conjunto óptimo de características para un problema en particular.
¡Ahora construyamos nuestro propio pipeline de ETL utilizando una de las herramientas discutidas!
Construyendo un pipeline de ETL utilizando AirFlow
Imaginemos que queremos crear un modelo de clasificación de aprendizaje automático que pueda clasificar flores en 3 categorías diferentes: Setosa, Versicolour, Virginica. Vamos a utilizar un conjunto de datos que se actualiza, digamos, cada semana. Esto parece ser un trabajo para un pipeline de datos de ETL por lotes.
Para configurar un pipeline de datos de ETL por lotes, vamos a utilizar Apache Airflow, que es un sistema de gestión de flujos de trabajo de código abierto y ofrece una forma fácil de escribir, programar y monitorear flujos de trabajo de ETL. Sigue los pasos mencionados a continuación para configurar tu propio pipeline de ETL por lotes.
Aquí están los pasos genéricos que podemos seguir para crear un flujo de trabajo de ETL en Airflow:
Configurar un entorno de Airflow: Instala y configura Airflow en tu sistema. Puedes consultar los pasos de instalación aquí.
Definir el DAG y configurar el flujo de trabajo: Define un Grafo Acíclico Dirigido (DAG) en Airflow para orquestar el pipeline de ETL para nuestro clasificador de ML. El DAG tendrá una colección de tareas con dependencias entre ellas. Para este ejercicio, estamos utilizando un operador de Python para definir las tareas y vamos a mantener la programación del DAG como ‘None’ ya que ejecutaremos el pipeline manualmente.
Crea un archivo DAG – airflow_classification_ml_pipeline.py con el código siguiente:
from datetime import timedelta
# El objeto DAG; lo necesitaremos para instanciar un DAG
from airflow import DAG
from airflow.operators.python import PythonOperator
from airflow.operators.empty import EmptyOperator
from airflow.operators.bash import BashOperator
from airflow.utils.dates import days_ago
from python_functions import download_dataset
from python_functions import data_preprocessing
from python_functions import ml_training_classification
with DAG(
dag_id='airflow_classification_ml_pipeline', ## Nombre del DAG
default_args=args,
description='Pipeline de clasificación de ML',
schedule = None,
) as dag:
# Tarea 1 - Descargar el conjunto de datos
task_download_dataset = PythonOperator(
task_id='download_dataset',
python_callable=download_dataset
)
# Tarea 2 - Transformar los datos
task_data_preprocessing = PythonOperator(
task_id='data_preprocessing',
python_callable=data_preprocessing
)
# Tarea 3 - Entrenar un modelo de ML
task_ml_training_classification = PythonOperator(
task_id='ml_training_classification',
python_callable=ml_training_classification
)
# Define el proceso del flujo de trabajo
task_download_dataset >> task_data_preprocessing >> task_ml_training_classification
Implementa las tareas de ETL: Implementa cada tarea definida en el DAG. Estas tareas incluirán cargar el conjunto de datos iris desde el paquete de datos de scikit-learn, transformar los datos y utilizar el dataframe refinado para crear un modelo de aprendizaje automático.
Crea un archivo de función de Python que contenga todas las tareas de ETL – etl_functions.py.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
import pandas as pd
import numpy as np
def download_dataset():
iris = load_iris()
iris_df = pd.DataFrame(
data = np.c_[iris['data'], iris['target']],
columns = iris['feature_names'] + ['target'])
pd.DataFrame(iris_df).to_csv("iris_dataset.csv")
def data_preprocessing():
iris_transform_df = pd.read_csv("iris_dataset.csv",index_col=0)
cols = ["sepal length (cm)","sepal width (cm)","petal length (cm)","petal width (cm)"]
iris_transform_df[cols] = iris_transform_df[cols].fillna(
iris_transform_df[cols].mean())
iris_transform_df.to_csv("clean_iris_dataset.csv")
Monitorea y gestiona el pipeline: Ahora que el DAG y el código del flujo de trabajo están listos, podemos monitorear todo nuestro ETL para ML en el servidor de Airflow.
1. Obtén el DAG listado en el servidor de Airflow.
DAG listado en el servidor de Airflow | Fuente: Autor
2. Verifica el gráfico del flujo de trabajo y ejecuta el pipeline (activa el DAG):
El gráfico del flujo de trabajo | Fuente: Autor
3. Monitorea y verifica los registros: Después de activar el DAG, puedes monitorear el progreso del DAG en la interfaz de usuario. Las siguientes imágenes muestran que los 3 pasos fueron exitosos.
Monitoreando el progreso del DAG en la interfaz de usuario | Fuente: Autor
Hay una forma de verificar cuánto tiempo ha tomado cada tarea utilizando un gráfico de Gantt en la interfaz de usuario:
Verificando cuánto tiempo ha tomado cada tarea utilizando un gráfico de Gantt | Fuente: Autor
En este ejercicio, creamos un flujo de trabajo ETL utilizando DAG y no establecimos ninguna programación, pero puedes intentar establecer la programación que desees y monitorear el pipeline. También puedes probar utilizando un conjunto de datos que se actualice con frecuencia y, en función de eso, decidir establecer la programación.
También puedes escalar la orquestación de airflow probando diferentes operadores y ejecutores. Si estás interesado en explorar el pipeline de datos ETL en tiempo real, sigue este tutorial.
Mejores prácticas para construir pipelines ETL en ML
Para organizaciones impulsadas por datos, es esencial tener un pipeline ETL robusto. Esto implica:
1
Administrar las fuentes de datos de manera efectiva
2
Garantizar la calidad y precisión de los datos
3
Optimizar el flujo de datos para un procesamiento eficiente
Integrar modelos de aprendizaje automático con análisis de datos proporciona a las organizaciones capacidades avanzadas para predecir la demanda con mayor precisión.
Existen varias mejores prácticas para construir un pipeline ETL (Extract, Transform, Load) para aplicaciones de aprendizaje automático (ML). Aquí se presentan algunas de las más importantes:
Comienza con una comprensión clara de los requisitos. Identifica las fuentes de datos que necesitarás para respaldar un modelo de aprendizaje automático. Asegúrate de utilizar tipos de datos adecuados. Esto ayuda a confirmar que los datos estén correctamente formateados, lo cual es importante para que los algoritmos de ML procesen los datos de manera eficiente. Comienza con un subconjunto de datos y aumenta gradualmente, esto ayuda a controlar las tareas/procesos posteriores.
Corrige o elimina inexactitudes e inconsistencias de los datos. Esto es importante porque los algoritmos de ML pueden ser sensibles a la inconsistencia y los valores atípicos en los datos.
Protege tus datos, implementa control de acceso para garantizar el acceso basado en roles a los datos.
Utiliza sistemas de archivos distribuidos, paralelismo, tablas de preparación o técnicas de almacenamiento en caché, cuando sea posible. Esto puede acelerar el procesamiento de datos y ayudar a optimizar tu pipeline. Esto finalmente ayuda a mejorar el rendimiento del modelo de ML.
Programa o automatiza los flujos de trabajo basados en datos para mover y transformar los datos entre diversas fuentes.
Monitorea y registra tus datos ETL que serán utilizados por tus modelos de aprendizaje automático. Por ejemplo, quieres realizar un seguimiento de cualquier cambio en los datos que pueda afectar el rendimiento de tu modelo de ML.
Mantén un control de versiones de tu base de código ETL. Esto ayuda a rastrear cualquier cambio, colaborar con otros desarrolladores y asegurarte de que el pipeline se esté ejecutando de la forma esperada y no afecte el rendimiento de tu modelo.
Si estás utilizando servicios basados en la nube, utiliza sus plantillas ETL para ahorrar tiempo creando todo desde cero.
Conclusion
A lo largo de este artículo, hemos recorrido diferentes aspectos del pipeline de datos ETL en ML.
1
El pipeline ETL es importante para crear un buen modelo de aprendizaje automático.
2
Dependiendo de los datos y los requisitos, podemos configurar la arquitectura ETL y utilizar diferentes tipos de pipelines de datos ETL.
3
Construyendo un pipeline ETL por lotes utilizando Airflow, donde podemos automatizar los procesos ETL. También podemos registrar y monitorear los flujos de trabajo para mantener un control de todo lo que sucede.
4
Cómo crear pipelines de datos ETL escalables y eficientes.
Espero que este artículo te haya sido útil. Al consultar este artículo y realizar el ejercicio práctico de crear el pipeline por lotes, deberías poder crear uno por tu cuenta. Puedes elegir cualquier herramienta mencionada en el artículo y comenzar tu camino.