Trasformazione dei dati grezzi in caratteristiche informative per i modelli ML attraverso tecniche di selezione, estrazione, costruzione e trasformazione
L'ingegneria delle funzionalità, detta anche pre-elaborazione dei dati, è il processo di conversione dei dati grezzi in funzionalità utilizzabili per sviluppare modelli di machine learning. Questo articolo descrive i concetti principali dell'ingegneria delle funzionalità e il ruolo che essa svolge nella gestione del ciclo di vita del ML.
Nel contesto del machine learning, le funzionalità sono i dati di input utilizzati per addestrare un modello, ovvero gli attributi di un'entità che il modello imparerà a conoscere. Generalmente, i dati grezzi devono essere elaborati prima di poter essere utilizzati come input per un modello di ML. Una buona ingegneria delle funzionalità rende più efficiente il processo di sviluppo e si traduce in modelli più semplici, flessibili e accurati.
L'ingegneria delle funzionalità è il processo di trasformazione e arricchimento dei dati volto a migliorare le prestazioni degli algoritmi di machine learning utilizzati per addestrare i modelli che fanno uso di tali dati.
L'ingegneria delle funzionalità comprende fasi quali il ridimensionamento o la normalizzazione dei dati, la codifica di dati non numerici (come testo o immagini), l'aggregazione in base al tempo o all'entità, l'unione di dati provenienti da fonti diverse o il trasferimento di conoscenze da altri modelli. L'obiettivo di queste trasformazioni è aumentare la capacità degli algoritmi di machine learning di apprendere dai set di dati, allo scopo di restituire previsioni più accurate.

L'ingegneria delle funzionalità ricopre diverse funzioni importanti. In primo luogo, come accennato in precedenza, i modelli di machine learning non sono sempre in grado di operare su dati grezzi, e quindi tali dati devono essere convertiti in una forma numerica che il modello possa comprendere. Ciò può comportare ad esempio la conversione di dati di testo o di immagini in forma numerica, o la creazione di funzionalità aggregate come i valori medi delle transazioni per un cliente.
A volte le funzionalità rilevanti per un problema di machine learning possono essere presenti in più sorgenti di dati: un'ingegneria delle funzionalità efficace prevederà l'unione di queste sorgenti di dati per creare un unico data set utilizzabile. In questo modo, sarà possibile utilizzare tutti i dati disponibili per addestrare il modello, migliorandone accuratezza e prestazioni.
Un altro scenario comune è il riutilizzo sotto forma di funzionalità dei risultati e dell'apprendimento di altri modelli per un nuovo problema, tramite un processo noto come apprendimento per trasferimento. Ciò consente di sfruttare le conoscenze acquisite dai modelli precedenti per migliorare le prestazioni di un nuovo modello. L'apprendimento per trasferimento può essere particolarmente utile nelle situazioni in cui si ha a che fare con set di dati grandi e complessi, in cui non è conveniente addestrare un modello da zero.
Un'ingegneria delle funzionalità efficace consente anche di ottenere funzionalità affidabili nel momento dell'inferenza, quando il modello viene utilizzato per fare previsioni su nuovi dati. Si tratta di un aspetto importante perché le funzionalità utilizzate al momento dell'inferenza devono essere le stesse impiegate per l'addestramento così da evitare il cosiddetto "online/offline skew", il problema che si determina quando le funzionalità utilizzate al momento della predizione sono calcolate in modo diverso rispetto a quelle utilizzate per l'addestramento.
L'obiettivo dell'ingegneria delle funzionalità è creare un set di dati che possa essere addestrato per costruire un modello di machine learning. Molti degli strumenti e delle tecniche utilizzati per le trasformazioni dei dati sono impiegati anche dall'ingegneria delle funzionalità.
Dal momento che l'ingegneria delle funzionalità si pone come obiettivo lo sviluppo di un modello, ha tipicamente alcuni requisiti specifici che non sono presenti in altri tipi di trasformazioni. Ad esempio, si potrebbe voler fare in modo che le funzionalità siano riutilizzabili in più modelli o in più team all'interno dell'organizzazione. Per rispondere a questa esigenza, serve un metodo robusto per individuare le funzionalità.
Inoltre, quando le funzionalità vengono riutilizzate, serve un sistema per tenere traccia di dove e come le funzionalità sono calcolate. Questo è reso possibile dalla "feature lineage" (derivazione delle funzionalità). La riproducibilità dei calcoli delle funzionalità è di particolare importanza per il machine learning perché la funzionalità non deve essere calcolata soltanto per l'addestramento del modello, ma anche ricalcolata esattamente nello stesso modo quando il modello viene utilizzato per l'inferenza.