Il Machine learning e le tecnologie che vi gravitano intorno stanno vivendo un momento di enorme interesse e di utilizzo destinato a continuare e a evolversi nei prossimi anni. Le promesse che scaturiscono da sistemi basati sul ML sono molto allettanti e interessanti in quanto si ipotizzano scenari di processi ottimizzati al massimo delle prestazioni, miglioramenti nella diagnostica in medicina e nelle cure, sistemi intelligenti che ci suggeriscono le azioni migliori da intraprendere sulla terra e nello spazio, prestazioni sportive analizzate e migliorate con l’aiuto di algoritmi e molto altro ancora. Con queste premesse ci si deve aspettare che il machine learning sarà una parte irrinunciabile di ogni progetto innovativo ma ci si scontra anche con la realtà delle sfide da affrontare per completare con successo tali progetti. Percorriamo i passi principali della realizzazione di un progetto di machine learning ed evidenziamo i punti di attenzione e le potenziali cause della difficoltà di completamento. Ogni passo è propedeutico e fondamentale per la riuscita del successivo.
Progettare il machine learning: le domande
Ogni progetto di machine learning presuppone la disponibilità di dati quindi uno dei passi da compiere è la raccolta dati ma non è la prima cosa da fare. Questa operazione semplice a parole è accompagnata da una serie di domande iniziali che si possono sintetizzare così:
- che tipo di problema vogliamo risolvere: bisogna avere un obiettivo finale sfidante ma realizzabile e concentrarsi sul raggiungimento di questo; la perdita del focus su cosa vogliamo fare porta a false partenze e chiusure premature dei progetti.
- Di quali dati abbiamo bisogno: non è facile rispondere a questo quesito, la risposta viene a ritroso dall’analisi dello scopo finale che si vuole raggiungere.
- Ci sono già dei dati a disposizione: le attività odierne producono dati, per cui è abbastanza plausibile che si abbiano già a disposizione dei database o qualcosa di simile; l’onere è quello di organizzare al meglio quanto è disponibile. In aggiunta o in alternativa deve essere costruito un sistema per collezionare i dati di interesse e in questo caso l’impegno è quello di accumulare il dato in una modalità già pronta per i passi successivi.
- Ci sono problemi di privacy o dati sensibili: se il dataset costruito contiene informazioni considerate sensibili o soggette alle regole della privacy sicuramente dovranno essere effettuate delle attività di anonimizzazione.
- Si usano dati pubblici o privati: anche questa è una domanda da porsi, di chi è la proprietà delle sorgenti di dati che utilizziamo, se è proprietaria è tutto maggiormente sotto controllo, se è pubblica ricordiamoci che sarà soggetta ad aggiornamenti in formati e contenuti con la conseguente necessità di rivedere il nostro sistema di acquisizione.
- Come raccogliere i dati e dove memorizzarli: i dati possono provenire da attività lavorative giornaliere in un’azienda ma anche da un insieme di dispositivi connessi come sistemi GPS, dispositivi Wi-fi, sensori per rilevazione di grandezze fisiche o informazioni diagnostiche, o anche da social network. Il flusso di dati in input al sistema può essere gestito in modalità batch e a volte necessariamente in real-time e a flusso continuo, ovvero in streaming; queste diverse modalità hanno un grosso impatto sull’architettura del sistema di acquisizione. In parallelo alla tecnologia usata per l’acquisizione deve essere valutata la quantità di spazio necessaria alla memorizzazione ed elaborazione delle informazioni. Si sta diffondendo velocemente una modalità di acquisizione dati detta “data virtualization” in cui non vengono spostati i dati e non vengono effettuate copie o spostamenti, si possiede un accesso in tempo reale alle sorgenti; questa modalità riduce gli errori e il lavoro di movimentazione dei dati, inoltre non richiede l’imposizione di uno schema fisso e permette l’utilizzo di dati eterogenei.
- Dati strutturati o non strutturati: in base alla provenienza dei dati, questi saranno strutturati come per esempio quelli in un database relazionale o non strutturati e molto eterogenei come per esempio quelli multimediali, composti da audio, video, testi, immagini. La presenza di dati non strutturati richiede l’utilizzo di appropriate tecnologie per la gestione; questo non significa maggiore complessità ma è importante la consapevolezza per la scelta di strumenti adatti.
La raccolta dei dati
Dalle risposte alle domande precedenti si determina come effettuare la raccolta dati, che tipo di dati collezionare e quali strumenti utilizzare.
Quando si hanno a disposizione i dati, questi devono diventare informazione, devono essere preparati per alimentare gli algoritmi da cui scaturiranno dei risultati interpretabili e utilizzabili per gli scopi previsti.
La preparazione dei dati inizia con una analisi esplorativa che permette di capire la qualità e la varietà del dataset a disposizione. In questa fase si effettua una pulizia dei dati, in gergo tecnico si parla di “data cleansing” e “data wrangling”; questi due termini racchiudono le operazioni di preparazione. Si verifica che i dati abbiano il formato corretto, si rinominano le variabili di input coerentemente al contesto, si verifica la presenza di “outliers” ovvero di valori anomali che si discostano in modo particolare dal resto delle osservazioni o in altre parole che non rientrano nell’intervallo di probabilità per il dataset. Si controlla l’occorrenza di “missing values” che non sono ammessi negli algoritmi di ML e si decide come continuare, se eliminando i record contenenti valori mancanti o sostituendo il “vuoto” con dei valori appropriati secondo diverse politiche. Le etichette di testo devono essere codificate in numeri perché gli algoritmi lavorano solo con input numerici.
Nel caso ci sia un grande numero di variabili nel dataset si valuta una riduzione delle dimensioni mediante opportuni algoritmi ricombinando le variabili presenti in un numero inferiore oppure anche solo eliminando le variabili per cui si può stabilire che il relativo contenuto informativo che apportano è trascurabile; con questa operazione si completa l’identificazione delle variabili di input e delle variabili di output. Una ulteriore verifica sul dataset costruito è quanto sia bilanciato o no, ovvero se i record appartenenti a una classe di valori sono in quantità molto superiore a quelli di altre classi; avere un dataset sbilanciato verso una o più classi richiede eventuali operazioni di campionamento e l’utilizzo della corretta metrica di validazione nella fase successiva.
Non è possibile trascurare questa fase del progetto in quanto si effettua la selezione degli input importanti e significativi per il modello che si intende costruire, si applicano le trasformazioni e le operazioni di scaling e normalizzazione necessarie prima di passare tutto agli algoritmi di ML. Saltare una di queste operazioni o di queste verifiche può portare a risultati inaspettati, poco attendibili e pertanto invalidare tutto il lavoro fatto.
Costruire il modello di Machine learning
A questo punto è giunto il momento di costruire il modello utilizzando uno o più algoritmi di ML. Se si utilizzano algoritmi con supervisione il dataset sarà separato in tre parti, una di addestramento, una di validazione e una di test.
In questa fase si possono valutare diversi algoritmi per scegliere quello che dà le prestazioni migliori; la valutazione del modello viene eseguita con le opportune metriche in base al tipo di algoritmo utilizzato e ovviamente al tipo di apprendimento, con supervisione, senza supervisione, per rinforzo. Un’azione importante da eseguire durante la validazione è l’ottimizzazione degli iperparametri, ovvero i parametri che configurano e caratterizzano l’algoritmo. Durante la validazione e il test dei modelli si possono rilevare situazioni di overfitting o underfitting che devono essere risolte con metodi di regolarizzazione. In questo momento è possibile dover tornare alla raccolta e preparazione dati per dei ritocchi o per avere un dataset più corposo, ma questo non deve spaventare e non deve far desistere, fa parte del processo e la sua eventualità deve essere tenuta presente.
Tutti i passi dalla preparazione del dataset alla validazione possono essere automatizzati e raggruppati in una pipeline come se fossero in un flusso di singoli processi. Dopo la prima implementazione di tutte le trasformazioni necessarie sul dataset, la pipeline integra tutti i passi e ne permette l’esecuzione completa garantendo che niente sia tralasciato e contribuendo così alla ingegnerizzazione del sistema. La creazione di una pipeline è fondamentale per il rilascio in produzione del progetto e per la sua manutenzione.
Il passaggio alla produzione
Quando il modello raggiunge le prestazioni desiderate è il momento di passare in produzione, ovvero di utilizzare il modello costruito per assolvere ai compiti identificati nel progetto; si concretizza un’architettura che è in grado di supportare la quantità e la tipologia dei dati che vengono collezionati e che garantisce le risorse computazionali per l’elaborazione e la presentazione dei risultati tramite report, dashboard, API. Tutto quello che è stato fatto nei passi precedenti contribuisce a determinare se il rilascio del progetto e del modello realizzato debba avvenire su infrastruttura cloud o possa essere una infrastruttura privata in azienda oppure un contesto ibrido; questa decisione non può essere presa in modo definitivo all’inizio del progetto ma si sviluppa e cresce con il progetto stesso.
L’aggiornamento del modello
Se siamo arrivati a questo punto il progetto ha avuto il successo prospettato all’inizio e produce i risultati sperati. Non è finita qui. Le aziende evolvono, cambiano, le persone e i dispositivi producono dati nuovi in continuazione; probabilmente in un breve periodo, di pochi mesi, i nostri dataset saranno cambiati e avranno accumulato nuovi dati. Deve essere prevista una revisione e una ricostruzione del modello che si traduce nella esecuzione di tutti i passi fino all’addestramento e alla validazione e infine al rilascio in produzione. Con l’entusiasmo per il successo di un modello di ML ci si potrebbe abbandonare alla tentazione di applicare lo stesso ad altri scenari; questa pratica è da scoraggiare in quanto un progetto di machine learning in genere viene realizzato per un obiettivo specifico, a volte partendo da modelli generici come fossero template, ma comunque costruito su un dataset preparato allo scopo. Così come a un cambio del dataset si deve rivedere il modello, a un cambio di scenario si deve rivedere l’obiettivo finale e rivedere il modello.
Conclusioni
Abbiamo visto che un progetto di machine learning ha molte fasi e l’uso degli algoritmi di ML occupa solo una parte di tutto il progetto; sono importanti e non trascurabili i passi di costruzione del dataset e quella che viene chiamata “data cleansing” pulizia e preparazione. Ci sono decisioni che non possono essere prese subito ma che si determinano durante lo sviluppo del progetto; le prese di posizione a tempi precoci possono produrre delle false partenze, troppo veloci e destinate a finire prima del tempo. Infine, è importante accettare che un modello di ML che se con prestazioni eccezionali, non è eterno e periodicamente deve essere aggiornato insieme all’aggiornamento del dataset; inoltre, un modello che da buone previsioni in un contesto applicativo non è detto che sia ugualmente efficace in altri contesti; ad aggiornamento del sistema, sia hardware sia software sia nei dati, deve corrispondere sempre la valutazione di un aggiornamento del modello di ML e quindi del progetto.
Se tutto il processo può sembrare molto oneroso e dispendioso in termini di risorse e investimento, comunque ne vale la pena perché un buon progetto produrrà dei buoni risultati e favorirà lo sviluppo e l’ottimizzazione del business; la strada da percorrere può sembrare lunga e onerosa, ma le tappe non devono essere saltate, pena il non completamento del progetto di machine learning.