Può esserci un divario di conoscenze quando si passa da progetti esplorativi di Machine Learning, tipici della ricerca e dello studio, a progetti a livello di settore. Ciò è dovuto al fatto che i progetti di settore hanno generalmente tre obiettivi aggiuntivi: collaborativo, riproducibile e riutilizzabile, che hanno lo scopo di migliorare la continuità aziendale, aumentare l’efficienza e ridurre i costi. Anche se non sono affatto vicino a trovare una soluzione perfetta, vorrei documentare alcuni suggerimenti per trasformare un codice ML esplorativo basato su notebook in un progetto pronto per il settore progettato con maggiore scalabilità e sostenibilità.
Ho classificato questi suggerimenti in tre strategie chiave:
- Miglioramento 1: modularizzazione: suddivisione del codice in parti più piccole
- Miglioramento 2: Controllo delle versioni: controllo delle versioni di dati, codice e modello
- Miglioramento 3: Coerenza: struttura coerente e convenzione di denominazione
Dichiarazione problema
Una difficoltà che ho dovuto affrontare è stata quella di avere un solo notebook per l’intero progetto di scienza dei dati, cosa comune durante l’apprendimento della scienza dei dati. Come potresti riscontrare, esistono componenti di codice ripetibili in un ciclo di vita di data science, ad esempio, gli stessi passaggi di preelaborazione dei dati vengono applicati per trasformare sia i dati di training che i dati di inferenza. Se non gestite correttamente, il risultato è che versioni diverse della stessa funzione vengono copiate e riutilizzate in più posizioni. Non solo diminuisce la coerenza del codice, ma rende anche più impegnativa la risoluzione dei problemi dell’intero notebook.
Cattivo esempio
train_data = train_data.drop(('Evaporation', 'Sunshine', 'Cloud3pm', 'Cloud9am'), axis=1)
numeric_cols = ('MinTemp', 'MaxTemp', 'Rainfall', 'WindGustSpeed', 'WindSpeed9am')
train_data(numeric_cols) = train_data(numeric_cols).fillna(train_data(numeric_cols).mean())
train_data('Month') = pd.to_datetime(train_data('Date')).dt.month.apply(str)inference_data = inference_data.drop(('Evaporation', 'Sunshine'…
Fonte: towardsdatascience.com