La pianificazione dei progetti ML è diversa dalla pianificazione dei progetti di software engineering. I progetti ML sono tipicamente non lineari e presentano vari gradi di incertezza. Richiedono un approccio iterativo e un approccio sperimentale.
Incertezza del progetto
La pianificazione iniziale può essere difficile perché l'approccio migliore generalmente non è chiaro all'inizio di un progetto. Questa incertezza intrinseca rende difficile fare previsioni sulle tempistiche.
Un recente concorso Kaggle illustra l'incertezza dei progetti ML. Nelle prime settimane di una competizione, hanno partecipato 350 team. Alcuni team sono riusciti ad aumentare la qualità delle previsioni Benchmark dal 35% al 65%. Nelle due settimane successive, il numero di team che lavorano al problema è aumentato da 350 a 1400. Tuttavia, il modello migliore ha raggiunto una previsione della qualità solo del 68%.
La Figura 3 illustra l'incertezza nello sviluppo ML, mostrando l'aumento significativo dello sforzo, ma solo i miglioramenti minimi della qualità del modello.
Figura 3. In un periodo di due settimane, il numero di team che lavorano al problema è aumentato di 4 volte, ma la qualità del modello è rimasta quasi invariata, evidenziando la difficoltà di stimare l'impegno di una soluzione ML.
In altre parole, oltre un migliaio di team, ciascuno che sperimenta con una varietà di trasformazioni dei dati, architetture e iperparametri, hanno ottenuto solo un modello con una qualità di previsione del 68%.
Un esempio del settore illustra la non linearità dei progetti ML, in cui l'output non è proporzionale agli input. Due team hanno impiegato diversi mesi per addestrare un modello con una qualità di previsione del 90%. Tuttavia, diversi team hanno impiegato più di cinque anni per preparare il modello per la produzione con una qualità delle previsioni del 99,9%.
Questi esempi evidenziano che il ML pronto per la produzione è un processo esplorativo, che richiede una mentalità scientifica e ingegneristica.
Approccio sperimentale
Nella maggior parte dei casi, lo sviluppo ML è più simile all'esecuzione di esperimenti che all'ingegneria del software tradizionale. Il machine learning richiede di testare diverse caratteristiche, provare diverse architetture e regolare correttamente gli iperparametri. Per definizione, non è garantito che gli esperimenti abbiano esito positivo. Per questo motivo, è preferibile pianificare l'uso di un framework sperimentale.
Diamo un'occhiata a un tipico piano di progettazione del software per vedere cosa si differenzia da un piano di progetto ML.
Pianificazione di progetti di software engineering
In un tipico piano di progettazione del software, devi definire i requisiti, delineare i componenti, stimare l'impegno e pianificare il lavoro. Esiste un percorso ben definito verso la soluzione. Ad esempio, gli ingegneri spesso conoscono con certezza le attività da completare per creare un'applicazione che soddisfi le specifiche di progettazione.
Quando prevedono il tempo necessario per completare un'attività, possono stimare il lavoro in base a progetti simili. Sebbene si verifichino invariabilmente difficoltà, come dipendenze sconosciute o mutamento dei requisiti, che a volte possono complicare la stima, in genere esiste un percorso chiaro verso la soluzione.
Al contrario, i progetti ML di solito non hanno un percorso chiaro verso il successo.
Pianificazione di progetti ML
Per la maggior parte dei progetti ML, troverai la soluzione migliore sperimentando diversi approcci in un processo di prova ed errore. In genere non conosci la soluzione ottimale al tuo problema prima di tentare di risolverlo. Ad esempio, l'architettura della soluzione ottimale potrebbe essere un semplice modello lineare, una rete neurale o un albero decisionale. Solo provando ogni approccio puoi trovare la soluzione migliore.
Questa ambiguità rende difficile pianificare. Come accennato in precedenza, non è facile prevedere l'impegno richiesto a un progetto ML. Solo cercando di risolvere il problema puoi capire meglio la quantità di tempo e risorse che una soluzione potrebbe richiedere.
Di seguito sono riportate le strategie consigliate per pianificare il lavoro ML:
Pianifica il lavoro. Imposta tempi chiari per completare le attività o provare a trovare una soluzione specifica. Ad esempio, potresti assegnare due settimane per stabilire se puoi accedere al tipo di dati giusto. Se riesci ad acquisire i dati, potresti designare altre due settimane per vedere se un modello semplice indica che una soluzione ML è fattibile. Se un modello semplice ha esito negativo, potresti designare altre due settimane per provare una rete neurale. Alla fine di ogni periodo di tempo, avrai a disposizione più informazioni per stabilire se vale la pena continuare ad applicare risorse al problema.
Definisci i requisiti del progetto. Se una soluzione ML sembra promettente, ma non è una funzionalità fondamentale per il tuo prodotto o servizio, restringi i suoi requisiti. Ad esempio, quando pianifichi il lavoro del prossimo trimestre, potresti provare a provare una soluzione molto semplice. Nei trimestri successivi, potresti pianificare di migliorare la soluzione in modo iterativo. L'implementazione di una soluzione ML mediante miglioramenti incrementali in un orizzonte più lungo è stato il modo in cui molti team hanno raggiunto soluzioni ML di grande impatto.
Progetto interno o Noogler. Guidare uno stagista o uno stagista o Noogler per tentare una soluzione ML può essere un buon modo per iniziare a esplorare un nuovo spazio con risultati sconosciuti. Al termine del progetto, avrai un'idea più chiara dell'impegno richiesto da una soluzione ML e degli approcci potenzialmente promettenti da portare avanti, o di se le risorse debbano essere collocate altrove.
Con qualsiasi strategia, è saggio fallire velocemente. Cerca di approcciarti prima con i costi più bassi, ma potenzialmente il vantaggio più alto. Se l'approccio funziona, hai trovato una buona soluzione. Se non è così, non hai sprecato molto tempo e risorse.
I team, che acquisiscono esperienza ed esposizione all'esecuzione di esperimenti, saranno in grado di stimare meglio l'impegno che un esperimento potrebbe richiedere, rendendo la pianificazione più prevedibile. Tuttavia, il risultato di un esperimento è quasi sempre sconosciuto, quindi non è possibile stimare in anticipo il numero di esperimenti necessari per trovare la soluzione migliore.
La pianificazione di approcci con una mentalità sperimentale aiuta a preparare il tuo team per il successo. Quando un approccio porta a un punto morto, piuttosto che essere scoraggiati, i membri del team capiscono che fa parte del processo di ricerca di una soluzione ML. Ancora più importante, discutendo con le parti interessate dell'incertezza intrinseca nello sviluppo del ML, si possono creare aspettative più realistiche.
Aspetti da considerare
Imparare a pianificare più approcci ML in modo probabile richiede tempo ed esperienza. Il tuo piano di progetto potrebbe richiedere aggiornamenti frequenti. Puoi considerarlo come un documento dinamico in costante evoluzione, mentre il tuo team sperimenta più approcci. Concentrando l'attenzione sulle seguenti idee chiave, aumenterai le probabilità di successo:
- Stima il costo e le probabilità di successo per ogni approccio.
- Prova a usare un portafoglio di approcci.
- Identificate le lezioni apprese e provate a migliorare il sistema una cosa alla volta.
- Pianificare gli errori.
Talvolta, un approccio iniziale porta a una svolta epocale. Qualcuno potrebbe scoprire un bug nella pipeline di generazione dei dati o nella suddivisione per la convalida dell'addestramento. Con una buona pianificazione e una documentazione approfondita, aumenti le probabilità di trovare un modello che risolva i problemi aziendali prima del previsto.