Alcuni dei problemi più comuni che i data scientist incontrano includono l'overfitting, che si verifica quando il modello memorizza troppo i dati del training set, e la scarsa qualità del dataset, che può influenzare drasticamente le performance del modello.
In questo articolo ti presenterò il mio framework mentale per approcciare i problemi di machine learning.
Il modello mentale è sostanzialmente formato da una serie di domande che io definisco "scudo" - farsi queste domande ci protegge da problemi che possono sorgere lungo il progetto e aiuta a capire bene che problema stiamo cercando di risolvere realmente.
Le domande sono cinque, ognuna volta a rimuovere attrito e potenziali problematiche durante la definizione di un progetto di machine learning e della sua soluzione. Ti consiglio sempre di porti queste (e altre) domande prima di iniziare qualsiasi progetto di machine learning.
Ci saranno anche lezioni che ho imparato durante la mia carriera, sia sul campo che lavorando con altri professionisti più bravi di me.
Iniziamo.
1. Che problema stai cercando di risolvere?
Ti sembrerà strano, ma ho visto parecchie persone iniziare un progetto di data science o machine learning senza aver capito bene quale sia il problema reale da risolvere.
I clienti (soprattutto quelli che non sono tecnici), ti comunicheranno il problema che loro pensano di avere. Molto probabilmente insieme a questa ricostruzione aggiungeranno anche la soluzione che loro pensano sia più corretta.
Cerca quanto più possibile di evitare di far parte di questo circolo.
Ascolta il cliente, astrai dalla sua storia e trai le tue conclusioni. Utilizza le informazioni che ti vengono date come contesto del tuo ragionamento, ma non farti influenzare dai bias e preconcetti di chi ti da il lavoro.
È imperativo che tu comprenda e risolva il problema reale. Non farlo crea complicazioni a cascata, che possono rivelarsi solo a fine implementazione.
Non risolvere il problema reale ci mette in una brutta posizione:
- Perdiamo tempo per risolvere un problema magari secondario o addirittura irrilevante
- nel farlo, perdiamo soldi
- dai punti precedenti perdiamo anche la fiducia di chi ci ha affidato il lavoro
- e sostanzialmente facciamo la figura di quelli che non ascoltano il cliente e che non riflettono sul lavoro
Oltre che a proteggerci da eventuali sbagli dal punto di vista della definizione del problema, porci questa domanda ci aiuta anche ad identificare quali problemi non risolveremo. Questo è importante in fase di comunicazione con gli stakeholder e favorisce la trasparenza e le aspettative verso il lavoro.
Non risolvere il problema sbagliato.
2. Perché risolvere questo problema è importante?
A volte il problema su cui stai lavorando potrebbe non essere così importante da richiedere una soluzione basata sul machine learning.
Capire perché risolvere il problema posto davanti a te sia importante ti permette di fare diverse cose
- ti permette di prendere decisioni sensate durante lo sviluppo del progetto - problemi importanti da risolvere richiedono decisioni diverse da problemi minori
- ti permette di fornire contesto e giustificare (o meno) investimenti di fronte agli stakeholder
- ti permette di stabilire priorità rispetto a task correlati, anche di altri individui.
Spesso e volentieri, problemi reali di machine learning richiedono molto tempo di sviluppo e budget elevati. È quindi consigliabile comunicare attentamente con il datore di lavoro per accettare o adattare i termini temporali ed economici associati al progetto.
A volte il tuo cliente non sa nemmeno quanto rilevante sia il problema. Prova ad iterare velocemente, offrendo soluzioni veloci e già esistenti (leggi punto sotto) per presentare un prototipo. Alla vista della tua soluzione grezza ma potenzialmente efficace, il cliente potrebbe reagire positivamente, sbloccando interesse e/o risorse che precedentemente non erano disponibili.
3. Esistono soluzioni già esistenti?
I neofiti spesso non si pongono questa domanda, poiché sono emozionati e carichi per affrontare la sfida posta davanti a loro. La realtà dei fatti è che a nessuno interessa che TU risolva il loro problema. Interessa solo che il problema venga risolto in maniera economica, riducendo al minimo la perdita di qualità.
Vuoi quindi sempre considerare soluzioni già esistenti per il problema, prioritizzando semplicità d'uso, funzionalità e documentazione.
Idee semplici > idee intelligenti.
Il machine learning è una soluzione complessa - prova prima a risolvere il problema attraverso semplici euristiche
- se una REGEX funziona... non usare un LLM
- se una regressione lineare funziona... non usare una rete neurale
- se puoi intercettare la maggior parte dei casi con un condizionale... non ricorrere ad un modello predittivo
e via dicendo.
Non cadere nella trappola che la tua soluzione è migliore di una già esistente. Parlane con il tuo interlocutore e proponi soluzioni efficaci al problema, anche se non la sviluppi tu. La decisione di implementare una soluzione esistente ricade comunque su di te, e quindi se aiuti il tuo cliente a venire a capo economicamente al suo problema anche gli onori saranno tuoi.
Oltre a quanto detto, documentare soluzioni già esistenti ti permette di mappare le best practice e le strategie utilizzate per risolvere il problema, che potevi non sapere a inizio progetto. Questa nuova conoscenza ti apre alla possibilità di espandere la soluzione esistente, offrendoti l'opportunità di fare un lavoro ancora migliore.
4. Come sono i dati a disposizione?
Questa è la prima domanda che i data scientist pongono al cliente durante una conversazione. È molto importante, certo, ma non è abilitante allo sviluppo del progetto.
Se ci sono dati a disposizione, fatti condividere queste informazioni
- infrastruttura e processi logici esterni che possono essere coinvolti nel tuo progetto
- schema del database
- pipeline di ETL (extract, transform, load) applicate ai dati
- condizioni particolari che interessano i dati (ci sono umani coinvolti nel processo di raccolta dati? Se si, in che fase? Alcuni dati sono reperiti da un fornitore esterno? E così via)
Tutto questo ti permetterà di avere una idea molto chiara degli ingredienti con i quali dovrai lavorare.
Potrai anche rifiutare di lavorare con i dati a disposizione, a patto che tu abbia anche in mente una strategia per collezionarne di altri. Se collezioni tu i dati, colleziona anche i metadati che spiegano e contestualizzano i dati che hai preso. Aiuteranno a valutare le tue soluzioni di machine learning.
Ricorda: non esistono dati di buona qualità nel mondo reale. Non farti illudere da Kaggle o le competizioni online dove i dataset sono preprocessati o sintetizzati ai fini della classifica. Nel mondo reale non è praticamente mai così.
Questo mi porta a darti un consiglio importante: il labeling sbagliato è il peggior nemico che tu possa avere. Se occorre, fai tu stesso il labeling dei dati. Solo mettendo le mani in pasta potrai capire bene i requisiti del tuo progetto e soddisfare le esigenze del datore di lavoro.
5. Come misuri il successo del progetto?
Probabilmente la domanda più importante di questa lista. Assicurati di saper misurare il successo del tuo progetto di machine learning attraverso la misurazione di metriche di performance adatte.
La metrica di successo dev'essere una e una soltanto, così ridurre al minimo la confusione nel tracciare le performance del sistema.
Avere una metrica per misurare le performance successo del progetto ti permette di
- capire sempre a che punto ci troviamo ad ogni esperimento (se miglioriamo oppure se peggioriamo)
- misurare le performance di un esperimento contro un benchmark iniziale (magari fatto seguendo regole o euristiche come menzionato sopra)
- poter associare una metrica tangibile alla consegna finale del tuo modello / software
Inoltre, avere un modo per misurare il tuo successo è fondamentale proprio per instaurare un rapporto di fiducia basato sugli output concreti del tuo lavoro nei confronti del tuo datore di lavoro. Anche se non sono tecnici e non capiscono il codice, parlare di metriche di performance come l'errore assoluto medio o la precisione permette anche a chi non è tecnico di comprendere la qualità del tuo lavoro.
Flusso tipico di un progetto di machine learning
Un flusso di lavoro tipico in un progetto di machine learning potrebbe includere i seguenti passaggi:
- Identificazione del problema: Definisci chiaramente cosa vuoi predire o classificare.
- Raccolta e preparazione dei dati: Utilizza tecniche di pulizia e trasformazione dei dati per garantire che siano adatti per l'analisi.
- Selezione del modello: Scegli tra i vari tipi di modelli disponibili in base alle caratteristiche dei dati e agli obiettivi.
- Addestramento del modello: Usa il dataset per addestrare il modello, ottimizzandolo con tecniche come la cross-validation.
- Ottimizzazione degli iperparametri: Utilizzando tecniche come la ricerca a griglia per fare fine-tuning del modello
- Deployment: Pubblicazione del modello per il suo utilizzo in produzione
Puoi leggere di più nell'articolo dedicato al ciclo di vita del machine learning, dove si va nel dettaglio su ogni step
Conclusioni
Affrontare problemi di machine learning richiede un approccio ben strutturato che parta dalla comprensione del problema, prosegua con la preparazione e l'analisi dei dati, e si concluda con la scelta e l'ottimizzazione del modello più adatto.
È fondamentale considerare le peculiarità del dataset, prevenire errori come l'overfitting e valutare il modello con metriche adeguate. Seguire questi passaggi non solo aiuta a ottenere risultati più accurati, ma consente anche di affrontare i problemi con maggiore consapevolezza e fiducia, migliorando gradualmente le proprie competenze nel campo del machine learning.
Commenti dalla community