La qualità dei biofarmaci è influenzata da molti fattori. Comprendere questi fattori è un prerequisito fondamentale per fornire ai pazienti prodotti di altissima qualità e per rispettare i requisiti normativi. JMP è semplice da usare per l'esplorazione dei dati. Tuttavia, le correlazioni all'interno o tra set di dati più ampi sono spesso complesse e richiedono strumenti non disponibili nell'ambiente standard di JMP.
D'altro canto, le funzionalità di machine learning di Python offrono soluzioni per quasi ogni quesito di data science. Sfortunatamente, l'utilizzo del codice di programmazione Python risulta spesso difficoltoso per molti esperti del settore. Per ovviare a questo problema, mostriamo come integrare Python per le problematiche di machine learning, in alternativa alle funzionalità avanzate di JMP Pro.
Utilizziamo le pubblicazioni JMP per guidare l'utente attraverso un flusso di lavoro di apprendimento automatico. Le fasi di visualizzazione dei dati, come l'interpolazione e altre operazioni di pulizia dei dati, vengono eseguite con JMP. L'applicazione degli algoritmi di apprendimento automatico e la validazione vengono effettuate con Python utilizzando le pipeline di Scikit-learn. Infine, la visualizzazione dei risultati viene nuovamente realizzata con JMP per consentire all'utente una semplice personalizzazione dei grafici.
Mostriamo come questo strumento può essere utilizzato per identificare i fattori che hanno il maggiore impatto su un determinato parametro di output.
Vorrei cogliere l'occasione oggi per parlarvi dell'integrazione tra Python e JMP, in modo da sfruttare le funzionalità di esplorazione dati di JMP e quelle di apprendimento automatico di Python. Prima di farlo, però, vi spiegherò perché vogliamo farlo.
Lavoro per Rentschler Biopharma e produciamo biofarmaci tramite CDMO. Naturalmente, il nostro obiettivo è comprendere e migliorare i processi produttivi. Ma per farlo, dobbiamo prima comprendere il processo, e solo allora saremo in grado di offrire la migliore qualità possibile.
Pensando a un tipico processo produttivo o a una fase di processo, come si può vedere qui a sinistra, c'è una colonna cromatografica. Questa è una fase tipica che eseguiamo per purificare qualsiasi proteina. Sappiamo che diversi fattori influenzano questa fase del processo, come ad esempio la densità del carico, la velocità di flusso, il pH o la temperatura.
Inoltre, ovviamente, ogni processo produttivo è costituito da molti di questi passaggi. Ad esempio, un bioreattore, una filtrazione, diverse fasi cromatografiche o una diafiltrazione. Ogni singola fase del processo è influenzata da numerosi fattori.
Durante la caratterizzazione dei processi, ovvero all'inizio di qualsiasi progetto di sviluppo, utilizziamo solitamente un approccio basato sulla progettazione degli esperimenti. Ad esempio, variamo la velocità di flusso, il pH e la densità di carico per osservare come interagiscono e come, singolarmente o insieme, influenzano la qualità del prodotto. Questo rappresenta un ottimo punto di partenza per avviare una campagna di PPQ (Pre-Product Quality) o per iniziare un processo commerciale.
Tuttavia, dopo un po' di tempo, avrete generato una grande quantità di dati da una produzione commerciale. Si tratta, ovviamente, di dati casuali, ma illustrano in parte cosa accadrebbe se generaste solo 100 lotti, ottenendo così una varietà di dati sulla qualità del prodotto. Il vostro obiettivo sarebbe quello di capire come la qualità del prodotto viene influenzata da un fattore o magari da qualcosa che vi è sfuggito nella caratterizzazione del processo. Per questo, l'apprendimento automatico è uno strumento ideale.
Tuttavia, la maggior parte delle PMI, ovvero gli esperti che comprendono il processo, non ha familiarità con l'apprendimento automatico e non si sente a proprio agio nella scrittura di codice. D'altra parte, gli informatici spesso non hanno familiarità con i processi biologici, e anche in questo caso si possono ottenere previsioni piuttosto bizzarre.
L'idea è di utilizzare JMP, che è facile da usare anche per le PMI, per sfruttare al massimo i dati e applicare l'apprendimento automatico senza che nessuno si accorga del codice sottostante.
Per questo utilizzo un journal JMP, che è facile da usare e che vi mostrerò tra qualche minuto. Per quanto riguarda il flusso di lavoro, utilizziamo JMP per alcune fasi del processo, e poi in background per altri processi, Python, ma l'utente non vedrà mai nulla di Python.
Per JMP, ad esempio, si esplorano i dati, li si pulisce, li si scala o si creano le caratteristiche, tutti passaggi tipici che fanno perdere la maggior parte del tempo a qualsiasi scienziato del machine learning.
Successivamente, questi dati vengono trasferiti direttamente a Python, dove vengono eseguite alcune tipiche operazioni di machine learning, come la selezione del modello o la messa a punto degli iperparametri. Dopodiché, i dati vengono restituiti a JMP per la visualizzazione. Infine, se si desidera generare un report, questo può essere fatto facilmente tramite Python, senza che l'utente debba scriverlo manualmente.
Un'idea potrebbe essere, ad esempio, che quando si pensa alla scalatura dei parametri, un algoritmo di apprendimento automatico preferirebbe che tutto fosse sulla stessa scala, altrimenti un fattore potrebbe dominare il modello. Naturalmente, questo dipende dall'algoritmo utilizzato. Ma l'idea generale è che la scalatura sia utile, che tutto sia comparabile e che nessun fattore ottenga un vantaggio sul modello.
Per questo utilizziamo il journal di JMP, che vorrei mostrarvi ora. Il journal si presenta in questo modo. Partiamo dai dati iniziali, che possono essere, ovviamente, dati sulla qualità del prodotto, oppure possiamo semplicemente utilizzare una tabella di esempio con dati casuali.
Spesso si nota che non tutti i tipi di dati sono corretti. Ad esempio, qui si vedono le prime tre colonne con dati categorici. Potrebbe essere necessario convertirli in dati numerici per il proprio algoritmo. D'altra parte, si potrebbero avere dei fattori che attualmente sono continui, ma che si vorrebbe trasformare in categorici. Anche questo è molto semplice da fare.
Poi c'è un altro problema che si verifica spesso: potrebbero mancare alcuni dati. Come potete vedere nella colonna del pH, mancano alcuni dati. A questo punto vi chiederete: come si può risolvere? È possibile colmare facilmente questi valori mancanti. Si possono utilizzare delle previsioni, ma supponiamo di utilizzare, in modo molto semplice, la media o la mediana dei nostri valori. Prendiamo la media. Il valore viene inserito automaticamente.
Infine, arriviamo a un approccio di scalatura. Vediamo, vorremmo scalare questo sullo stesso asse. È la standardizzazione. Abbiamo questi fattori qui. Vorremmo eseguire la codifica one-hot. Basta cliccare. Poi potremmo avere altri fattori che sono logaritmici. Stessa idea. Basta eseguire una trasformazione lognormale e magari anche alcune concentrazioni che vorremmo scalare.
Alla fine, ovviamente, si ottiene ancora la colonna dei risultati e molte colonne trasformate che si possono utilizzare per qualsiasi modello. Poi si può passare a Python. Basterà individuare ciò che si desidera prevedere. Si potrebbe vedere se Elastic Net è valido, quale regressione è la migliore. Proviamo a usarle entrambe perché potremmo voler vedere se c'è una differenza. Quindi si può utilizzare l'ottimizzazione degli iperparametri in background e poi vedere come si comportano. Questo, ovviamente, richiede un po' più di lavoro da parte del computer.
Quindi, con questi due modelli, potete vedere che entrambi hanno identificato tre fattori che giocano un ruolo nella previsione della colonna finale, come il pH A, il tempo o un altro tempo, entrambi fanno essenzialmente la stessa cosa, il che è molto positivo. Quindi questi potrebbero essere i tre fattori che vi interessano e che vorreste approfondire. Detto questo, vorrei anche ringraziarvi per la vostra attenzione.