Come costruire un flusso di dati ETL nel Machine Learning

'Costruzione di un flusso di dati ETL per il Machine Learning'

Dalla elaborazione dei dati alle rapide intuizioni, le robuste pipeline sono fondamentali per qualsiasi sistema di apprendimento automatico. Spesso il Team dei Dati, composto da Data e ML Engineer, deve costruire questa infrastruttura e questa esperienza può essere dolorosa. Tuttavia, l’uso efficiente delle pipeline ETL nell’apprendimento automatico può aiutare a rendere la loro vita molto più facile.

Questo articolo esplora l’importanza delle pipeline ETL nell’apprendimento automatico, un esempio pratico di costruzione di pipeline ETL con un tool popolare e suggerisce i migliori modi per migliorare e sostenere le pipeline dei data engineer. Discutiamo anche i diversi tipi di pipeline ETL per casi d’uso di ML e forniamo esempi concreti del loro utilizzo per aiutare i data engineer a scegliere quella giusta. Prima di addentrarci nei dettagli tecnici, facciamo una revisione di alcuni concetti fondamentali.

Cosa è una pipeline di dati ETL nell’apprendimento automatico?

Una pipeline di dati ETL è una collezione di strumenti e attività utilizzati per eseguire Extract (E), Transform (T) e Load (L) dei dati necessari.

Pipeline ETL | Fonte: Autore

Queste attività implicano l’estrazione dei dati da un sistema, la loro trasformazione e successiva elaborazione in un altro sistema di destinazione in cui possono essere archiviati e gestiti.

L’apprendimento automatico si basa molto sulle pipeline ETL, poiché l’accuratezza ed efficacia di un modello sono direttamente influenzate dalla qualità dei dati di addestramento. Queste pipeline aiutano gli scienziati dei dati a risparmiare tempo ed efforti garantendo che i dati siano puliti, correttamente formattati e pronti per l’utilizzo nelle attività di apprendimento automatico.

Inoltre, le pipeline ETL svolgono un ruolo cruciale nel superare i silos di dati e stabilire una singola fonte di verità. Esaminiamo l’importanza delle pipeline ETL in dettaglio.

Perché abbiamo bisogno di una pipeline ETL nell’apprendimento automatico?

La significatività delle pipeline ETL risiede nel fatto che consentono alle organizzazioni di ottenere informazioni preziose da grandi e complessi set di dati. Ecco alcune ragioni specifiche per cui sono importanti:

  • Integrazione dei dati: Le organizzazioni possono integrare dati da diverse fonti utilizzando le pipeline ETL. Questo fornisce agli scienziati dei dati una visione unificata dei dati e li aiuta a decidere come addestrare il modello, i valori per gli iperparametri, ecc.
  • Controllo della qualità dei dati: Man mano che i dati fluiscono attraverso la fase di integrazione, le pipeline ETL possono aiutare a migliorare la qualità dei dati standardizzandoli, pulendoli e convalidandoli. Ciò assicura che i dati utilizzati per l’apprendimento automatico siano accurati, affidabili e consistenti.
  • Risparmio di tempo: Le pipeline ETL automatizzano il processo dei 3 passaggi principali – Extract, Transform e Load, il che aiuta a risparmiare molto tempo e riduce anche la probabilità di errori umani. Ciò consente agli scienziati dei dati di concentrarsi sulla creazione di modelli o sul loro miglioramento continuo.
  • Scalabilità: Le moderne pipeline ETL sono scalabili, cioè possono essere dimensionate verso l’alto o verso il basso a seconda della quantità di dati che devono elaborare. Fondamentalmente, offrono la flessibilità e l’agilità per apportare eventuali modifiche in base alle esigenze aziendali.

Qual è la differenza tra una pipeline ETL e una pipeline di dati?

La pipeline di dati è un termine generale per la categoria di spostamento dei dati tra diversi sistemi e la pipeline di dati ETL è un tipo di pipeline di dati.

— Xoriant

È comune utilizzare in modo intercambiabile i termini pipeline di dati ETL e pipeline di dati. Anche se entrambi questi termini si riferiscono alle funzionalità e ai processi di trasferimento dei dati da varie fonti a un unico repository, non sono la stessa cosa. Esploriamo perché non dovremmo usarli in modo sinonimo.

Confronto

Pipeline ETL

Pipeline di dati

Terminologia

Come suggerisce l’abbreviazione, ETL coinvolge una serie di processi, l’estrazione dei dati, la loro trasformazione e infine il caricamento nella fonte di destinazione.

Una pipeline di dati coinvolge anche lo spostamento dei dati da una fonte all’altra ma non necessariamente deve passare attraverso la trasformazione dei dati.

Area di focus

ETL aiuta a trasformare i dati grezzi in un formato strutturato che può essere facilmente utilizzato dagli scienziati dei dati per creare modelli e interpretare per qualsiasi decisione basata sui dati.

Una pipeline di dati viene creata con l’obiettivo di trasferire dati da una varietà di fonti in un data warehouse. Successivamente, processi o flussi di lavoro possono utilizzare facilmente questi dati per creare soluzioni di business intelligence e analisi.

Operazione

La pipeline ETL viene eseguita su un programma, ad esempio giornaliero, settimanale o mensile. Le pipeline ETL di base sono orientate per batch, in cui i dati vengono spostati a blocchi secondo un programma specificato.

Le pipeline di dati spesso vengono eseguite in tempo reale. I dati vengono continuamente aggiornati e supportano la generazione di report e l’analisi in tempo reale.

In sintesi, i pipeline ETL sono un tipo di pipeline dati progettata specificamente per estrarre dati da diverse fonti, trasformarli in un formato comune e caricarli in un data warehouse o in un altro sistema di archiviazione. Mentre una pipeline dati può includere vari tipi di pipeline, la pipeline ETL è solo un sottoinsieme specifico di una pipeline dati.

Abbiamo esaminato l’architettura di base di una pipeline ETL e abbiamo visto come ogni passaggio possa essere eseguito per scopi diversi, e possiamo scegliere tra vari strumenti per completare ogni passaggio. L’architettura ELT e il suo tipo differiscono da organizzazione a organizzazione in quanto hanno diversi insiemi di tecnologie, fonti di dati e requisiti aziendali.

Quali sono i diversi tipi di pipeline ETL in ML?

Le pipeline ETL possono essere categorizzate in base al tipo di dati in elaborazione e al modo in cui vengono elaborati. Ecco alcuni dei tipi:

  • Pipeline ETL a batch: Questo è un approccio ETL tradizionale che prevede l’elaborazione di grandi quantità di dati in batch. I dati vengono estratti da una o più fonti, trasformati nel formato desiderato e caricati in un sistema di destinazione, come un data warehouse. La pipeline ETL a batch è particolarmente utile per addestrare modelli su dati storici o eseguire lavori periodici di elaborazione in batch.
  • Pipeline ETL in tempo reale: Questo processo i dati man mano che arrivano in tempo quasi reale o in tempo reale; l’elaborazione continua dei dati significa che è richiesta una capacità di elaborazione inferiore in un determinato momento e si possono evitare picchi di utilizzo. La pipeline ETL in tempo reale è particolarmente utile per applicazioni come la rilevazione delle frodi, dove l’elaborazione in tempo reale è fondamentale. Le pipeline ETL in tempo reale richiedono strumenti e tecnologie come i motori di elaborazione in streaming e i sistemi di messaggistica.
  • Pipeline ETL incrementale: Queste pipeline estraggono e elaborano solo i dati che sono cambiati dall’ultima esecuzione anziché elaborare l’intero set di dati. Sono utili in situazioni in cui i dati di origine cambiano frequentemente, ma il sistema di destinazione ha solo bisogno degli ultimi dati, ad esempio nelle applicazioni come i sistemi di raccomandazione, dove i dati cambiano frequentemente ma non in tempo reale.
  • Pipeline ETL cloud: La pipeline ETL cloud per ML prevede l’utilizzo di servizi basati su cloud per estrarre, trasformare e caricare i dati in un sistema ML per l’addestramento e la distribuzione. I fornitori di cloud come AWS, Microsoft Azure e GCP offrono una serie di strumenti e servizi che possono essere utilizzati per costruire queste pipeline. Ad esempio, AWS fornisce servizi come AWS Glue per ETL, Amazon S3 per l’archiviazione dei dati e Amazon SageMaker per l’addestramento e la distribuzione di ML.
  • Pipeline ETL ibrida: Queste pipeline combinano l’elaborazione a batch e in tempo reale, sfruttando i punti di forza di entrambi gli approcci. Le pipeline ETL ibride possono elaborare grandi batch di dati a intervalli prestabiliti e catturare anche gli aggiornamenti in tempo reale dei dati man mano che arrivano. La pipeline ETL ibrida è particolarmente utile per applicazioni come la manutenzione predittiva, dove è necessaria una combinazione di dati storici e in tempo reale per addestrare i modelli.

Strumenti per le pipeline ETL

Per creare una pipeline ETL, come discusso nella sezione precedente, sono necessari strumenti, strumenti che possono fornirci la funzionalità dei seguenti passaggi di base dell’architettura ETL. Ci sono diversi strumenti disponibili sul mercato, ecco alcuni dei più popolari, insieme alle funzionalità che offrono.

Strumento

Basato su cloud

Connettori predefiniti

Serverless

Opzioni di trasformazione predefinite

Supporto API

Completamente gestito

Hevo Data

AWS Glue

GCP Cloud Data Fusion

Apache Spark

Talend

Apache Airflow

Come costruire una pipeline ETL per l’apprendimento automatico?

Nella sezione precedente, abbiamo esplorato brevemente alcuni concetti e strumenti di base per l’ETL, in questa sezione parleremo di come sfruttarli per costruire una pipeline ETL. Prima di tutto, parliamo della sua architettura.

Architettura ETL

La caratteristica distintiva dell’architettura ETL è che i dati passano attraverso tutte le procedure di preparazione necessarie prima di raggiungere il data warehouse. Di conseguenza, il repository finale contiene dati puliti, completi e affidabili da utilizzare successivamente senza modifiche.
— Coupler

L’architettura ETL spesso include un diagramma come quello sopra che illustra il flusso delle informazioni nella pipeline ETL, dalle fonti di dati alla destinazione finale. Comprende tre aree principali: area di arrivo, area di staging e area del data warehouse.

  • L’area di arrivo è la prima destinazione per i dati dopo essere stati estratti dalla posizione di origine. Può memorizzare più batch di dati prima di spostarli attraverso la pipeline ETL.
  • L’area di staging è una posizione intermedia per eseguire le trasformazioni ETL.
  • L’area del data warehouse è la destinazione finale per i dati in una pipeline ETL. Viene utilizzata per analizzare i dati al fine di ottenere preziose informazioni e prendere decisioni aziendali migliori.

L’architettura della pipeline ETL è a strati. Ogni sottosistema è essenziale e, sequenzialmente, ogni sottosistema alimenta il successivo fino a quando i dati raggiungono la loro destinazione.

Architettura della pipeline di dati ETL | Fonte: Autore
  1. Scoperta dei dati: I dati possono essere acquisiti da diversi tipi di sistemi, come database, sistemi di file, API o fonti di streaming. Abbiamo anche bisogno di un’analisi dei dati, cioè di una scoperta dei dati, per capire se i dati sono adatti per l’ETL. Questo comporta l’analisi della struttura dei dati, delle relazioni e dei contenuti.
  1. Ingestione: È possibile acquisire i dati dalle diverse fonti di dati in un’area di staging o data lake. L’estrazione può essere effettuata utilizzando diverse tecniche come API, connessioni dirette al database o trasferimenti di file. I dati possono essere estratti tutti in una volta sola (estrazione da un database) o in modo incrementale (estrazione utilizzando API), o quando si verifica una modifica (estrazione dei dati da un archivio cloud come S3 su un trigger).
  1. Trasformazioni: Questa fase comporta la pulizia, l’arricchimento e la modellazione dei dati per adattarli ai requisiti del sistema di destinazione. I dati possono essere manipolati utilizzando diverse tecniche come filtraggio, aggregazione, join o l’applicazione di regole di business complesse. Prima di manipolare i dati, è anche necessario pulire i dati, eliminando eventuali voci duplicate, eliminando dati non pertinenti e identificando dati errati. Ciò contribuisce a migliorare l’accuratezza e l’affidabilità dei dati per gli algoritmi di apprendimento automatico.
  1. Archiviazione dei dati: Memorizza i dati trasformati in un formato adatto che può essere utilizzato dai modelli di apprendimento automatico. Il sistema di archiviazione potrebbe essere un database, un data warehouse o un’archiviazione di oggetti basata su cloud. I dati possono essere archiviati in formato strutturato o non strutturato, a seconda dei requisiti del sistema.
  2. Feature Engineering: L’ingegneria delle caratteristiche comporta la selezione, la trasformazione e la combinazione dei dati grezzi per creare caratteristiche significative che possono essere utilizzate per i modelli di apprendimento automatico. Influisce direttamente sull’accuratezza e sull’interpretabilità del modello. L’ingegneria delle caratteristiche efficace richiede conoscenze di dominio, creatività e sperimentazione iterativa per determinare l’insieme ottimale di caratteristiche per un problema specifico.

Costruiamo ora la nostra pipeline ETL utilizzando uno degli strumenti discussi!

Costruzione di una pipeline ETL utilizzando AirFlow

Immaginiamo di voler creare un modello di classificazione per l’apprendimento automatico in grado di classificare i fiori in 3 diverse categorie: Setosa, Versicolour, Virginica. Utilizzeremo un dataset che viene aggiornato, ad esempio, ogni settimana. Questo sembra un compito adatto per una pipeline ETL di tipo batch.

Per configurare una pipeline ETL di tipo batch, utilizzeremo Apache Airflow, che è un sistema di gestione del flusso di lavoro open source e offre un modo semplice per scrivere, pianificare e monitorare i flussi di lavoro ETL. Segui i passaggi descritti di seguito per configurare la tua pipeline ETL di tipo batch.

Ecco i passaggi generici che possiamo seguire per creare un flusso di lavoro ETL in AirFlow:

  1. Configurare un ambiente Airflow: Installa e configura Airflow sul tuo sistema. Puoi fare riferimento ai passaggi di installazione qui.
  2. Definire il DAG e configurare il flusso di lavoro: Definisci un grafo aciclico diretto (DAG) in Airflow per orchestrare la pipeline ETL per il nostro classificatore di apprendimento automatico. Il DAG avrà una collezione di attività con dipendenze tra di loro. Per questo esercizio, utilizzeremo un operatore Python per definire le attività e manterremo la pianificazione del DAG come ‘None’ poiché eseguiremo la pipeline manualmente.

Crea un file DAG – airflow_classification_ml_pipeline.py con il codice seguente:

from datetime import timedelta
# L'oggetto DAG; ne avremo bisogno per istanziare 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', ## Nome del DAG
    default_args=args,
    description='Pipeline di classificazione ML',
    schedule = None,  
 ) as dag:

# Task 1 - Scarica il dataset
 task_download_dataset = PythonOperator(
 task_id='download_dataset',
 python_callable=download_dataset
 )

 # Task 2 - Trasforma i dati
 task_data_preprocessing = PythonOperator(
 task_id='data_preprocessing',
 python_callable=data_preprocessing
 )

 # Task 3 - Addestra un modello ML 
 task_ml_training_classification = PythonOperator(
 task_id='ml_training_classification',
 python_callable=ml_training_classification
 )

# Definisci il processo del workflow
task_download_dataset >> task_data_preprocessing >> task_ml_training_classification

  1. Implementa le attività ETL: Implementa ogni attività definita nel DAG. Queste attività includeranno il caricamento del dataset iris dal pacchetto di dataset scikit-learn, la trasformazione dei dati e l’utilizzo del dataframe raffinato per creare un modello di machine learning. 

Crea un file di funzioni python che consiste in tutte le attività 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")

  1. Monitora e gestisci la pipeline: Ora che il codice DAG e di workflow è pronto, possiamo monitorare l’intero ETL per ML sul server Airflow.

1. Ottieni il DAG elencato nel server Airflow.

DAG elencato nel server Airflow | Fonte: Autore

2. Verifica il grafico del workflow ed esegui la pipeline (Attiva il DAG):

Il grafico del workflow | Fonte: Autore

3. Monitora e verifica i log: Dopo aver attivato il DAG, puoi monitorare il progresso del DAG nell’interfaccia utente. Le immagini seguenti mostrano che tutte e 3 le fasi sono state completate con successo.

Monitoraggio del progresso del DAG nell’interfaccia utente | Fonte: Autore

C’è un modo per verificare quanto tempo impiega ogni attività utilizzando il diagramma di Gantt nell’interfaccia utente:

Verifica quanto tempo impiega ogni attività utilizzando un diagramma di Gantt | Fonte: Autore

In questo esercizio, abbiamo creato un flusso di lavoro ETL utilizzando DAG e non abbiamo impostato alcun programma, ma puoi provare a impostare il programma come preferisci e monitorare il flusso di lavoro. Puoi anche provare a utilizzare un dataset che viene aggiornato frequentemente e decidere in base a ciò di impostare il programma.

Puoi anche scalare l’orchestrazione di Airflow provando diversi operatori ed esecutori. Se sei interessato a esplorare il flusso di dati ETL in tempo reale, segui questo tutorial.

Best practice per la creazione di pipeline ETL in ML

Per le organizzazioni orientate ai dati, una robusta pipeline ETL è essenziale. Questo comporta:

  • 1
    Gestire efficacemente le fonti di dati
  • 2
    Garantire la qualità e l’accuratezza dei dati
  • 3
    Ottimizzare il flusso dei dati per un elaborazione efficiente

L’integrazione dei modelli di apprendimento automatico con l’analisi dei dati fornisce alle organizzazioni capacità avanzate per prevedere la domanda con maggiore precisione.

Esistono diverse best practice per la creazione di una pipeline ETL (Estrazione, Trasformazione, Caricamento) per le applicazioni di Machine Learning (ML). Ecco alcune delle più importanti:

  • Inizia con una chiara comprensione dei requisiti. Identifica le fonti di dati di cui avrai bisogno per supportare un modello di apprendimento automatico. Assicurati di utilizzare tipi di dati appropriati. Questo aiuta a confermare che i dati siano correttamente formattati, il che è importante per i modelli di ML per elaborare i dati in modo efficiente. Inizia con un subset di dati e scala gradualmente, questo aiuta a tenere sotto controllo ulteriori compiti/processi.
  • Correggere o rimuovere imprecisioni e incongruenze dai dati. Questo è importante perché gli algoritmi di ML possono essere sensibili a incongruenze e valori anomali nei dati.
  • Proteggi i tuoi dati, implementa il controllo degli accessi per garantire l’accesso basato sui ruoli ai dati.
  • Fai uso di sistemi di file distribuiti, parallelismo, tabelle di staging o tecniche di caching, quando possibile. Questo può velocizzare l’elaborazione dei dati e aiutare ad ottimizzare la tua pipeline. Ciò contribuisce in definitiva a migliorare le prestazioni del modello di ML.
  • Pianifica o automatizza i flussi di lavoro basati sui dati per spostare e trasformare i dati attraverso varie fonti.
  • Monitora e registra i tuoi dati ETL che saranno utilizzati dai tuoi modelli di apprendimento automatico. Ad esempio, desideri tenere traccia di eventuali deviazioni dei dati che potrebbero influire sulle prestazioni del tuo modello di ML.
  • Mantieni il controllo delle versioni della tua base di codice ETL. Questo aiuta a tenere traccia delle modifiche, collaborare con altri sviluppatori e assicurarsi che la pipeline funzioni come previsto e non influisca sulle prestazioni del modello.
  • Se stai utilizzando servizi basati su cloud, utilizza i loro modelli ETL per risparmiare tempo nella creazione di tutto da zero.

Conclusioni

In tutto questo articolo, abbiamo esaminato diversi aspetti della pipeline di dati ETL in ML.

  • 1
    La pipeline ETL è importante per creare un buon modello di apprendimento automatico.
  • 2
    A seconda dei dati e dei requisiti, possiamo configurare un’architettura ETL e utilizzare diversi tipi di pipeline di dati ETL.
  • 3
    Creazione di una pipeline ETL batch utilizzando Airflow, dove possiamo automatizzare i processi ETL. Possiamo anche registrare e monitorare i flussi di lavoro per tenere sotto controllo tutto ciò che accade.
  • 4
    Come creare pipeline di dati ETL scalabili ed efficienti.

Spero che questo articolo ti sia stato utile. Consultando questo articolo e svolgendo l’esercizio pratico sulla creazione della pipeline batch, dovresti essere in grado di crearne uno autonomamente. Puoi scegliere uno qualsiasi degli strumenti menzionati nell’articolo e iniziare il tuo percorso.

Buon apprendimento!

Riferimenti

  • https://neptune.ai/blog/deployment-of-data-and-ml-pipelines-crypto-industry
  • https://towardsdatascience.com/building-etl-pipelines-for-beginners-17c3492d29d2
  • https://www.analyticsvidhya.com/blog/2022/06/a-complete-guide-on-building-an-etl-pipeline-for-beginners/
  • https://www.projectpro.io/article/how-to-build-etl-pipeline-example/526
  • https://hevodata.com/learn/steps-to-build-etl-pipeline/