Nell'ambito della ricerca di Novonesis per comprendere le prestazioni dei prodotti a base di lievito industriale in condizioni specifiche dei clienti, i nostri gruppi di ricerca e sviluppo applicativo eccellono nella generazione di set di dati significativi per la selezione dei migliori lieviti candidati su scala commerciale. I nostri scienziati utilizzano regolarmente la statistica per affrontare questioni complesse relative a scenari sia generali che specifici dei clienti.
L'introduzione dei metodi bayesiani nelle librerie Python ha migliorato significativamente la nostra capacità di elaborare modelli e facilitare decisioni basate sui dati e sulle probabilità, anche in assenza di risultati statisticamente significativi tradizionali. Inoltre, le nuove funzionalità di JMP 18 consentono una perfetta integrazione con Python, permettendo ai nostri ricercatori di generare grandi set di dati e rispondere a richieste specifiche dei clienti senza dover uscire da JMP. Sfruttando i dati della ricerca applicativa, i dati delle prove dei clienti e le informazioni pregresse, stiamo intraprendendo un percorso per caratterizzare le nostre decisioni sulla base di dati concreti e della statistica bayesiana, anziché affidarci a tendenze statisticamente non significative. Questo approccio mira a fornire una comprensione e una quantificazione più complete delle prestazioni, portando in definitiva a un processo decisionale più informato.
Ciao, mi chiamo Matt Watts. Sono uno scienziato senior qui a Novonesis e mi occupo di bioenergia e ricerca e sviluppo. La bioenergia, in questo contesto, consiste essenzialmente nella trasformazione del mais in etanolo. Nel mio ruolo, sono responsabile dei lieviti e degli enzimi di scarificazione che rendono questo processo efficiente e massimizzano la resa per i nostri clienti.
Oggi ho il privilegio di parlarvi di come abbiamo utilizzato l'analisi bayesiana, o statistica, per aiutarci a prendere decisioni basate sui dati. Inizieremo con una breve introduzione alla statistica bayesiana. È un argomento relativamente nuovo per me, che ho approfondito nell'ultimo anno. Non sono certo un esperto del settore, ma è un percorso che continuo a intraprendere. Con JMP18 arriva anche una maggiore integrazione con Python. Esamineremo alcuni spunti e aspetti che ho scoperto grazie a questa integrazione, evidenziando i miglioramenti apportati e le difficoltà iniziali.
Un'introduzione alla statistica bayesiana. In sostanza, si tratta di ottenere affermazioni probabilistiche per prendere decisioni più accurate basate sui dati. È anche molto utile perché permette di effettuare stime utilizzando conoscenze pregresse. Si possono vincolare diverse variabili in base a informazioni precedenti, ad esempio affermando che la concentrazione di etanolo non può mai scendere al di sotto dello zero. Questo è particolarmente importante quando si creano modelli e la statistica bayesiana si rivela molto efficace in questo ambito.
Ho fatto riferimento a un corso di Richard McElreath, intitolato "Statistical Rethinking". Si trova in basso a destra nella diapositiva. Non è possibile cliccare sul link, ma spero che riusciate a vederlo. È piuttosto breve. Mi è stato di grande aiuto per comprendere la statistica bayesiana e prenderemo un esempio da quel corso per illustrare il flusso di lavoro bayesiano, che vi aiuterà a comprendere meglio cosa succede quando si applica la metodologia bayesiana.
Qui esploreremo un esempio di come calcolare la proporzione di superficie terrestre coperta d'acqua. Seguiremo un flusso di lavoro bayesiano, che troverete sulla destra. Potete immaginarlo come un artista. Un artista non passa da un foglio bianco a un gufo completamente disegnato. Segue diversi passaggi per aggiungere dettagli e particolari. Inizia con le forme, poi passa alle linee, alla struttura degli occhi, alle piume e così via.
Questo è davvero importante quando si pensa al flusso di lavoro bayesiano. Il primo passo è definire un modello generativo o causale per la selezione di terra o acqua. Possiamo semplicemente prendere un globo e selezionare più campioni, che rappresenteranno la terra o l'acqua. Il secondo passo del flusso di lavoro è definire una stima. In questo caso, la stima è: qual è la proporzione del globo coperta d'acqua? Il terzo passo è ottenere maggiori dettagli. Svilupperemo un modello statistico per produrre una stima della proporzione applicando più campioni di terra o acqua.
È qui che la questione si complica davvero per l'approccio bayesiano, perché potrebbe essere necessario un modello statistico diverso per ogni stima richiesta. Bisogna avere una solida conoscenza dei modelli statistici, di cosa ci dicono e di come possono contribuire insieme per fornirci le informazioni necessarie. Ho trovato molte fonti diverse che mi hanno aiutato lungo il percorso, e ne parlerò più avanti.
Nel terzo passaggio, testeremo fondamentalmente... Anzi, nel quarto passaggio. Nel quarto passaggio, ora aggiungeremo ancora più dettagli. Testeremo il modello statistico utilizzando il nostro modello generativo. Questo è fondamentalmente ciò che abbiamo fatto all'inizio, scegliendo semplicemente il globo. Inseriremo questi campioni nel modello statistico e vedremo se otteniamo la stessa proporzione del globo coperta d'acqua. Se funziona, e se ha senso, allora possiamo campionare il modello statistico molte volte.
Solitamente, ripetiamo questo processo 10.000 volte su più catene, ottenendo così una distribuzione a posteriori. Questa distribuzione a posteriori ci aiuta a trovare la probabilità della percentuale di superficie terrestre coperta d'acqua. Osservando questo grafico, possiamo notare che la probabilità più alta ci porta a credere che la superficie terrestre sia coperta per il 75% d'acqua, il che è davvero notevole, in quanto fornisce una rappresentazione visiva del modello. Con questi passaggi del flusso di lavoro, è fondamentale comprendere la fase di test. È necessario documentare il proprio lavoro, il che non solo ridurrà gli errori, ma consentirà anche la ripetibilità dei risultati e permetterà ad altri di comprenderli.
Abbiamo discusso brevemente il concetto di distribuzioni a posteriori, ma di cosa si tratta? Una distribuzione a posteriori è la distribuzione delle probabilità a posteriori. Ed è qui che torno al bayesiano e a tutto ciò che riguarda le probabilità. Queste vengono calcolate moltiplicando la verosimiglianza per le probabilità a priori, quindi dividendo le informazioni a priori per le prove o le metriche effettive misurate nell'esperimento.
Come si può vedere in rosso, la distribuzione ci aiuta a capire che la Terra ha un'alta probabilità di essere coperta per il 75% d'acqua. Queste sono le affermazioni di probabilità che ho menzionato all'inizio e che ci aiutano a prendere decisioni basate sui dati. Questo è un breve cenno al metodo bayesiano. Ma qui volevo evidenziare una curva di apprendimento che ho riscontrato nell'integrazione tra JMP e Python. Ci sono stati momenti di grande successo e momenti di difficoltà, punti critici, qualche problema, ma alla fine ho trovato molti vantaggi nell'utilizzare Python in JMP, soprattutto quando si uniscono script JSL e Python.
Non ho tempo di analizzare tutta questa diapositiva, ma volevo solo segnalare PyMC. Questa libreria Python non solo è stata fondamentale per il codice dell'analisi bayesiana, ma il sito web offre anche ottimi esempi di modelli statistici utilizzabili per svariati test e scopi. Inoltre, rimanda a un altro software di visualizzazione, di cui parleremo più avanti, che permette di testare il modello prima ancora di iniziare a sviluppare un algoritmo o qualsiasi altra operazione per ottenere il risultato finale.
PyMC è stato creato appositamente per Jupyter Notebook. In tutto e per tutto. E quindi la gente mi chiede: "Perché usate l'interprete Python di JMP per fare questo?". La risposta è stata: per semplificare il processo decisionale per i miei colleghi. È una funzionalità che la nostra azienda utilizza. La nostra azienda usa JMP in ogni sua parte. Se riusciamo a creare un'interfaccia con un solo clic all'interno di JMP, dove il back-end è Python, allora i miei colleghi possono utilizzare un nuovo strumento che li aiuterà a prendere decisioni in futuro. Questo è fondamentalmente il motivo per cui abbiamo intrapreso questo percorso.
Programmazione con Python in JMP. La visualizzazione dei dati è una delle cose che più apprezzo di JMP. Permette di visualizzare e esplorare i dati. Devo dire che questo è anche uno degli aspetti che ho trovato più macchinoso, perché Python dispone di librerie native che facilitano la visualizzazione e altre funzionalità, ma queste non funzionano in JMP. In pratica, bisogna limitarsi a generare un'immagine. Abbiamo scritto del codice per generare tabelle di dati a partire dalle informazioni fornite da queste librerie, il che permette di esplorare i dati in modo più approfondito, ma ho riscontrato qualche difficoltà in questo senso.
D'altro canto, JMP è davvero utile per l'input dell'utente, ad esempio per elenchi di colonne o per determinare se l'utente desidera continuare con lo script. Si tratta semplicemente di finestre pop-up con cui l'utente può interagire, a differenza di altri strumenti che richiedono di capire dove inserire il codice, come assegnare i nomi alle colonne e cose del genere.
Infine, un aspetto che ho trovato davvero utile è stato, ancora una volta, l'integrazione di JSL nello script Python. Ora possiamo avere riquadri che mostrano l'immagine, e poi aggiungere descrizioni sotto l'immagine per aiutare l'utente a capire cosa sta guardando. Questi sono stati dei passi avanti davvero notevoli, almeno per quanto mi riguarda.
Ora entriamo nel vivo della presentazione di oggi: la sceneggiatura. Iniziamo selezionando alcuni fattori che influenzeranno il risultato osservato. Il risultato osservato in questo caso è la produzione di etanolo. Stiamo utilizzando un set di dati di esempio relativo a un processo di fermentazione tratto da JMP, quindi chiunque può scaricarlo una volta ottenuta la sceneggiatura.
Innanzitutto, con il flusso di lavoro bayesiano, ancora una volta, si torna a testare, testare e testare. Analizzeremo i dati simulati confrontandoli con i nostri dati osservati per verificare se il modello statistico che abbiamo scelto funziona. Possiamo constatare che funziona. Si sovrappone bene ai nostri dati osservati senza allargarsi eccessivamente sugli assi.
A questo punto possiamo testare il modello. Possiamo esaminare i parametri univariati all'interno del modello per vedere come si distribuiscono le distribuzioni di probabilità. Se si sovrappongono, è un ottimo segno che il modello funziona correttamente. Possiamo utilizzare i grafici di traccia, implementati tramite un'altra libreria Python chiamata rvs, per facilitare questo processo.
Quindi l'ultimo test che abbiamo fatto è stato un diagramma di grafico energetico, osservando questo campionatore senza inversione a U, quindi questo è l'algoritmo principale che fornisce la risposta. Di nuovo, stiamo osservando quelle curve, quelle distribuzioni che si sovrappongono, e così è stato.
Passiamo ora all'ultimo elemento. Si tratta del set di dati finale. Questo è davvero importante perché volevo mostrare cosa fa JMP con il modello di adattamento, i minimi quadrati standard: otteniamo che sia il livello del serbatoio che l'aria sono molto significativi per la produzione di etanolo. Se consideriamo la metodologia bayesiana, otteniamo lo stesso risultato. Serbatoio, livello e aria sono significativi. Sono i valori più lontani da zero che possiamo ottenere.
Ma la cosa interessante dell'approccio bayesiano, che ci fornisce un'idea più precisa, è che ci permette di osservare effetti positivi o negativi. In questo caso, poiché il livello del serbatoio è grande e negativo, significa che maggiore è il livello di riempimento, minore è la quantità di etanolo. Poiché l'aria è grande e positiva, significa che maggiore è il livello dell'aria, maggiore è la quantità di etanolo.
In qualità di scienziato specializzato in fermentazione, non so se concordo con la conclusione finale. Si tratta ovviamente di un set di dati di esempio, ma è davvero interessante che abbiamo ottenuto lo stesso risultato da entrambi i metodi, e che l'analisi bayesiana ci fornisca informazioni aggiuntive utili per prendere decisioni future. Come indicato nel titolo, qui a Novozymes, o Novonesis, prendiamo decisioni relative al lievito.
Abbiamo scelto un personaggio di fantasia come nome del prodotto, quindi abbiamo chiamato Clint Yeastwood. Utilizzando l'analisi bayesiana, siamo stati in grado di formulare affermazioni probabilistiche che ci hanno aiutato a prendere decisioni. In questa analisi bayesiana, Clint Yeastwood raggiunge una concentrazione di etanolo superiore dell'1,1% rispetto a BadFerm nel 78% dei casi. Si tratta di un'informazione davvero cruciale che possiamo utilizzare per migliorare i nostri prodotti.
In sintesi, oggi abbiamo parlato dell'integrazione di Python in JMP e dell'esplorazione dei metodi bayesiani. Speriamo di aver sbloccato alcune potenzialità per tutti voi, incoraggiandovi a esplorare nuovi modi di pensare, ma ricordando sempre di tornare al test, al test, al test. Con i metodi bayesiani, è necessario testare e documentare per comprendere appieno, ma anche per far sì che i vostri colleghi e chiunque altro con cui interagite capiscano ciò che state facendo.
Infine, si tratta di prendere decisioni. Spero che, grazie a questo, possiate prendere decisioni basate sui dati e che vi abbiamo aperto la mente a nuove possibilità. Voglio ringraziarvi di cuore per avermi ascoltato oggi. Spero che questo intervento vi sia stato utile. Vi invito a visitare il sito web, dove troverete tutto il materiale e le informazioni necessarie. In caso contrario, non esitate a contattarmi. Grazie.