Machine Learning e riproducibilità

Code_data

La stessa sequenza di azioni in condizioni variabili devono portare a risultati concordanti. Questa è la chiave del concetto di riproducibilità, un caposaldo per la valutazione dei risultati scientifici. Quando si parla di ricerca e machine learning qualsiasi risultato dichiarato deve risultare riproducibile.

Riproducibilità vs Replicabilità. Prima di correlare questo concetto al machine learning bisogna chiarire che la riproducibilità non coincide con la replicabilità. In questo caso i risultati devono essere coerenti nel caso in cui la computazione viene ripetuta in condizioni simili e nel breve periodo, la riproducibilità invece è cosa molto più articolata.

Cosa Comporta. Per essere riproducibile un risultato ottenuto da una  computazione deve corrispondere a quello elaborato da un’altra macchine con hardware differente dallo stesso algoritmo e con lo stesso training set. Sembra ovvio e semplice ma lo è solo a patto di seguire una serie di linee guida che evitano di perdere tempo alla ricerca dei problemi.

Come ottenerla. Seguendo una serie di linee guida in fase di sviluppo ottenere dei risultati riproducibili è semplica.

  • Il preprocessing dei dati dev’essere in ogni caso un processo automatizzato.
  • Registra anche i risultati intermedi dell’elaborazione. I log sono in grado di svelare molti misteri.
  • Per ogni test conserva non solo i risultati ma anche dati in input e training set.
  • Se qualcuno ha già scritto qualcosa che funziona bene non reinventare la ruota. Esistono centinaia di librerie Open Source già mature e ampiamente testate che oltre a farti risparmiare tempo renderanno più stabili i tuoi test
  • Comunque c’è anche il risvolto della medaglia per il punto precedente. E’ importante tenere d’occhio aggiornamenti e versioni delle librerie in uso, le novità nel codice possono comportare cambiamenti nei risultati.
  • Documenta accuratamente test e risultati con una procedura batch, avrai a disposizione uno storico completo di tutte le fasi dello sviluppo e della ricerca.
  • Un server per l’integrazione continua semplifica le cose perchè i developers si dovranno occupare solo di trasformare le idee in codice, il resto delle operazioni saranno automatizzate.

Per approfondire la questione riproducibilità/replicabilità consiglio questo breve ma “intenso” paper che può risultare illuminante. Inoltre qualche altro spunto interessante sull’argomento puoi trovarlo in questa presentazione.