Il processo di essiccazione di un prodotto in un letto fluido utilizzando aria non condizionata è complesso e imprevedibile, in parte a causa della variabilità dei prodotti in ingresso. Di conseguenza, venivano utilizzate troppo spesso impostazioni non ottimali, con conseguenti rilavorazioni e una serie di problemi concomitanti, tra cui costi aggiuntivi, lavoro extra e maggiore pressione per rispettare i programmi di produzione. I tentativi di modellare il tempo di essiccazione in funzione delle condizioni dell'aria e della temperatura, con l'obiettivo di ottimizzare i parametri di essiccazione, hanno avuto solo un successo parziale.
Tuttavia, una svolta si è verificata quando Functional Data Explorer in JMP Pro è stato utilizzato per includere nel modello il profilo di essiccazione del singolo prodotto entro i primi 15 minuti del processo. Gli operatori potevano quindi utilizzare i risultati per prevedere il tempo minimo di essiccazione e regolare di conseguenza le impostazioni della macchina. L'utilizzo di FDE per generare informazioni su come diversi parametri influiscono sui risultati in-process si è rivelato estremamente prezioso. Questo intervento dovrebbe essere utile a chiunque misuri le informazioni di processo, dimostrando come fornire queste informazioni agli operatori in modo che possano regolare le impostazioni della macchina a metà processo per massimizzare i risultati.
Buongiorno e benvenuti a questa presentazione. Sono Jacob di Olympic e con me c'è il mio collega [incomprensibile]. Faremo una presentazione sull'ottimizzazione in-process di una procedura di essiccazione utilizzando Functional Data Explorer.
Per prima cosa, illustreremo il contesto del progetto. Poi, [inudibile] vi spiegherà in modo più approfondito e statistico ciò che abbiamo fatto. Speriamo che lo troviate interessante.
Innanzitutto, un po' di informazioni su Lundbeck. Lundbeck è un'azienda attiva dal 1915 e si dedica alla salute del cervello. Quindi, qualsiasi tipo di farmaco che ripristini la salute del cervello.
Circa 5.400 dipendenti in tutto il mondo, presenti in oltre 50 paesi. E una storia che risale a molto tempo fa. Lundbeck ha una supply chain completa che va dalla produzione di principi attivi farmaceutici (API) fino ai grossisti. E questo include anche i partner CMO, numerosi fornitori di tutti i materiali in entrata. I nostri prodotti sono presenti in oltre 100 mercati in tutto il mondo. Quindi una supply chain piuttosto complessa.
Oggi ci concentreremo su un progetto che abbiamo realizzato nella nostra produzione di massa, dove produciamo circa 2,5 miliardi di compresse all'anno. Il caso in questione è un processo di granulazione. Spiegherò di cosa si tratta tra un minuto. Cerchiamo di granulare utilizzando quello che viene chiamato letto fluido.
Con molta aria proveniente dall'esterno, l'aria viene solo filtrata. E sappiamo dalla nostra piccola stazione meteorologica locale che le condizioni meteorologiche e dell'aria cambiano molto nell'arco delle 24 ore.
I nostri operatori hanno avuto problemi e non sapevano per quanto tempo avrebbero dovuto provare il loro processo o il loro prodotto oggi per rientrare nelle nostre specifiche interne. Ci sono alcuni piccoli valori JMP qui nell'angolo. Ma in questo momento, abbiamo osservato che il 26% dei lotti era al di sotto dei nostri limiti interni.
È un po' esagerato. Abbiamo iniziato cercando di capire se potevamo attenuare il problema e aiutare i nostri bravissimi operatori a gestire il processo in modo più fluido.
Cos'è il processo di granulazione o essiccazione a letto fluido? Abbiamo della polvere umida in un letto, e poi facciamo entrare molta aria. Riscaldiamo l'aria a una temperatura specifica, e ne facciamo passare una certa quantità, asciugando l'acqua, per poi espellerla attraverso alcuni filtri, in modo da non perdere tutta la nostra potenza in un fluido. Ma si può anche ricorrere alla granulazione. Non è un caso specifico, ma potrebbe essere una soluzione.
Nelle versioni più recenti dei letti fluidi, è presente un'unità di condizionamento dell'aria in grado di regolare l'umidità dell'aria in ingresso a un valore di riferimento specifico. Ma nella configurazione attuale, ciò non è possibile e, a causa di vincoli fisici, non è nemmeno possibile acquistarla e aggiungerla.
Poiché la configurazione è un po' datata, abbiamo dovuto installare noi stessi i sensori per ottenere dati sufficienti dalle macchine. Altrimenti, stamperebbero tutti i risultati su carta, e questa non è la soluzione ottimale per il nostro scopo.
Inoltre, abbiamo raccolto tutti i dati necessari per fare tutto questo. Abbiamo i dati del letto fluido. Abbiamo i dati meteorologici qui a sinistra. Abbiamo anche i dati di controllo in-process. Il nostro obiettivo è che tutti questi dati confluiscano in un data lake.
Oltre a ciò, abbiamo creato una piccola applicazione in cui possiamo mostrare agli operatori qualsiasi cosa vogliamo che venga visualizzata. Questo è semplicemente il flusso di tutti quei dati.
Abbiamo iniziato con un modello semplice, in cui abbiamo semplicemente previsto per quanto tempo, basandoci sulle condizioni meteorologiche esterne, che non si è rivelato un buon modello. Ecco perché [inudibile] prenderà il sopravvento e spiegherà come ha utilizzato Functional Data Explorer per avvicinarci a qualcosa che ci sta aiutando.
Sì. Grazie, Jacob. Vogliamo avere uno schema, dare un'occhiata all'intero sistema. Come ha detto Jacob, avevamo questa stazione meteorologica che ogni giorno poteva fornirci informazioni sul meteo o sull'aria che fluiva verso questo letto fluido.
Sulla base di ciò, potremmo stimare, ad esempio, gli operatori. Quanto tempo impiegano per impostare la macchina per provare a granulare e raggiungere l'obiettivo? Ma ci sono molti problemi legati al cambiamento stagionale delle condizioni meteorologiche, e anche a causa di alcuni servizi che abbiamo, come il freddo che, ad esempio, in estate o in inverno, ci porta a spegnere o interrompere l'erogazione.
Abbiamo avuto una grande variazione nell'aria che arrivava a questo letto fluido. È stato piuttosto difficile prevedere i tempi di essiccazione basandoci solo sui dati o sulle informazioni che riceviamo da queste... direi stazioni meteorologiche qui sotto.
Inizialmente, come primo passo dell'indagine, abbiamo installato alcuni sensori IoT appena prima del letto fluido, proprio in corrispondenza dell'aria che vi entra. Inoltre, alcuni sensori hanno aggiunto un sensore alla temperatura del prodotto, mentre altri sensori si trovano in corrispondenza dell'aria di scarico.
In questo modo, potremmo misurare direttamente le proprietà dell'aria che entra nel serbatoio e che esce dal letto fluido. Ma questo significa che disponiamo di molti dati. Abbiamo una serie temporale di dati. Ognuno di questi sensori, in totale ne abbiamo otto, invia informazioni ogni secondo al nostro data lake.
Con questo, dovresti essere in grado innanzitutto di capire cosa succede durante l'essiccazione. Qual è la differenza tra un lotto e l'altro e poi raccogliere maggiori informazioni. L'obiettivo finale era come utilizzare questi dati per avere una migliore previsione dell'essiccazione durante questa configurazione.
L'idea era semplice. Avevamo molti dati storici raccolti nel nostro data lake e volevamo estrarli tutti, compresi tutti i dati IoT e anche i dati meteorologici.
Con questo, volevamo addestrare il nostro modello e poi utilizzarlo nella nostra... direi, piattaforma che chiamiamo Prod Intel. Quindi, il primo modello prevedeva la raccolta di tutte le informazioni appena prima di iniziare l'essiccazione, per poi inviarle al modello e poi l'operatore avrebbe iniziato in base alla stima che gli avevamo fornito.
Prima di procedere oltre, diamo un'occhiata ai dati, o dati IoT, che abbiamo. Come ho detto, abbiamo... questi sono dati storici che abbiamo raccolto nell'ultimo anno. Poi abbiamo informazioni IoT provenienti da tutti questi sensori, che si estendono ogni secondo.
Prendiamo come esempio un lotto. Durante l'essiccazione, soffiamo aria nel letto fluido e, in modo sincronizzato, questo flusso d'aria sale e scende, mantenendosi in media al valore target impostato.
Poi controlliamo anche la temperatura dell'aria di essiccazione. In altre parole, durante il processo si può osservare come la temperatura del prodotto aumenta durante il processo. Questo si basa sul tempo trascorso dall'inizio dell'essiccazione.
Poi si può vedere anche come la temperatura dell'aria di scarico aumenta durante l'essiccazione. Perfetto. Ma confrontiamo questo lotto con un altro lotto, ad esempio. Passo a un altro lotto.
Questo è un altro lotto, come potete vedere in rosso. È chiaro che, nonostante i nostri sforzi per controllare questo sistema, la procedura di essiccazione può variare da lotto a lotto.
Può dipendere molto dalla temperatura dell'aria dell'essiccatore. Può anche variare nel profilo di essiccazione e può essere osservato sia nella temperatura del prodotto che in quella dell'aria di scarico. Questo dimostra chiaramente che non è possibile, intendo dire, utilizzare i dati storici e anche i dati raccolti appena prima di iniziare l'essiccazione per stimare più o meno l'obiettivo o il tempo di essiccazione necessario.
Se c'è una variazione nel processo, non la vedi finché non lo avvii. Quindi, in base a ciò, dici: "Ok, la mia asciugatura sta seguendo un altro andamento, quindi ho bisogno di un altro profilo".
Ecco perché abbiamo appena elaborato la seconda idea su come possiamo utilizzare i dati durante l'essiccazione per poter stimare quali dovrebbero essere gli obiettivi per raggiungere le nostre specifiche per l'umidità relativa finale del prodotto.
L'idea era semplice. Volevamo avviare il processo e, durante l'asciugatura, raccogliere dati da tutti gli otto sensori. Aspettiamo circa 15 minuti di dati durante l'asciugatura. Poi analizziamo quei dati o li trasferiamo al modello su cui abbiamo costruito il modello. Dopo 15 minuti, possiamo fornire una previsione all'operatore. L'obiettivo è, ad esempio, la temperatura di questo oggetto, oppure si dovrebbe interrompere il processo dopo dieci minuti.
Questa previsione ora si basa direttamente sulle prestazioni dell'essiccazione e su quel lotto specifico, e non su una condizione presunta.
Come fare... Tornerei su questo. Il bello di JMP è che ha uno strumento molto potente per l'analisi dei dati delle serie temporali, e con il Functional Data Explorer.
Purtroppo, per quanto ne so, questa funzionalità è disponibile solo al momento, ma è uno strumento molto potente per analizzare i dati delle serie temporali.
Ad esempio, cerco di... vedere qual è la differenza tra un lotto e l'altro in questo profilo di essiccazione? Ho la funzione Data Explorer. Ad esempio, voglio esaminare il mio prodotto. Poi ho il tempo trascorso e, naturalmente, ho il mio lotto come funzione IT.
Con questa applicazione, si analizzano tutti questi batch in modo cronologico nel tempo e si cerca di individuare un trend generale nel profilo di ognuno di essi. Si può notare come sia possibile differenziare i batch e confrontare separatamente tutti i profili.
Ciò che voglio fare è riuscire a estrarre la tendenza o il profilo di ciascuno di questi segnali e poi utilizzarli come input per il mio modello per prevedere quale dovrebbe essere l'obiettivo.
Poiché, come ho detto, in questo caso specifico volevamo raccogliere 50 minuti di dati e poi, in base a quel trend o a quel profilo, essere in grado di prevedere quale sarebbe stato l'obiettivo, dovrei anche limitare l'intervallo di tempo in cui analizzo i dati.
Con questa funzionalità, hai un'ottima possibilità di ritagliare i dati con questo filtro. Ad esempio, in questo caso sto esaminando 15 minuti. Inoltre, vorrei restringere un po' il campo fin dall'inizio per assicurarmi che i miei dati non siano troppo puliti prima dell'analisi. Esaminerei solo i dati tra 180 e 900 secondi.
Ce l'ho qui. Poi quello che voglio fare è osservare qual è la tendenza generale in tutti questi batch. Passo a modellare e dirigere l'analisi funzionale delle componenti principali. Con questo, come puoi vedere. Quello che fa JMP è cercare di trovare una tendenza generale all'interno di tutti questi batch, mostrarla come funzione principale e quindi estrarne cinque diversi autovalori, che vengono chiamati funzione di forma per caratterizzare la differenza tra ciascuno di questi batch rispetto al livello medio di tutti questi prodotti.
Fornisce informazioni molto utili su ciascuno di questi... ogni batch mostra quanto differisce dall'aspetto medio. Puoi facilmente modificarlo... nel profiler qui sotto, puoi facilmente modificare tutti i componenti FPC estratti per vedere l'effetto di ciascuna di queste modifiche.
Ad esempio, questo è il tempo trascorso. Poi voglio vedere se ho una componente FPC 1 più alta. Quale effetto avrà sulla temperatura media del mio prodotto in termini di trend o profilo? E anche se mi spingessi verso numeri negativi, quale sarebbe l'effetto sulla temperatura del mio prodotto?
Semplicemente, se aumento il valore di FPC1, significa che durante questo periodo, più o meno il livello medio della temperatura del prodotto era più basso, mentre se era più negativo, il livello medio era più alto.
È possibile osservare facilmente l'effetto di ciascuno di questi fattori separatamente sul risultato complessivo della temperatura del prodotto, sul trend o sul profilo nel tempo. Ora, quando estraggo questi componenti, posso utilizzarli come input per il mio modello e poi utilizzare quel modello per prevedere il target.
Qui hai la possibilità di salvare il risultato come riepilogo, e ti fornirà un'informazione molto utile su tutti i componenti FPC che, ad esempio, ho qui. Poi, ovviamente, è semplicemente associato ai diversi numeri di lotto.
Come potete vedere qui, per ogni lotto ora ottengo un numero per ciascuno di questi componenti FPC. Questo sarebbe il mio input per costruire il mio modello, perché questa è direttamente l'informazione che estraggo dal profilo di ciascuno di questi segnali. Quindi, in base a ciò, so come funziona. Il mio nuovo lotto si discosta dall'aspetto medio e, in base a questo, procedo.
Torniamo indietro per vedere se intendo modellarlo. Poi come sarebbe? Ho appena raccolto tutte le componenti FPC di tutti i miei segnali, e da qui in poi è abbastanza facile. Vuoi solo, ad esempio, costruire il tuo modello di regressione generale o qualsiasi altro approccio per costruire il tuo modello.
Ad esempio, come esempio, avevo la possibilità di avere il mio segnale finale, ovvero quello che volevo prevedere per l'umidità relativa. Come X, avevo come input tutte le combinazioni dei diversi componenti FC.
A quel punto potrei elaborare la stima finale o il mio modello finale per poterlo inserire nel mio sistema. È piuttosto semplice. Ora, tutto questo modello o tutte queste previsioni si basano direttamente sul profilo di tutti questi segnali che raccogliamo dai sensori IoT, e poi definiamo l'obiettivo in base a quello.
A questo punto, tutto ciò che conta è estrarre il modello. Dopo averlo compilato, dobbiamo estrarre il modello e tornare alla prima estrazione del modello. Ma come posso estrarre questo componente LPC per un nuovo batch?
Perché il problema più grande è che non potrò più usare JMP in seguito. Nella mia configurazione, voglio che tutto sia a posto nel mio prodotto, che è in esecuzione su AWS, quindi devo essere in grado di estrarre sia il modello che il componente FPC.
L'estrazione del modello è piuttosto semplice, quindi posso farlo. Il problema è che l'estrazione esatta dei componenti FPC è piuttosto complessa. Purtroppo al momento non esiste un modo semplice per estrarre questi componenti da JMP, perché ora voglio creare un nuovo batch.
Ora, con questo nuovo batch, voglio essere in grado di stimare qual è il mio componente per utilizzare questo modello. Esiste un modo molto indiretto per estrarre questi componenti. Si tratta semplicemente di tornare ai principi fondamentali di come vengono calcolati questi componenti FPC.
Se guardi... se ritrovo questo, forse lo chiudo. Sì. È qui. Se torni alla tabella che hai estratto dai componenti FPC, vedi, c'è una colonna che fornisce il prodotto, come la previsione o come cerca semplicemente di prevedere il segnale usando questo componente FPC.
Questo è piuttosto semplice. Quello che cerca di fare è costruire una funzione media su tutti i dati, che nel nostro caso erano tutti i dati storici che abbiamo inserito. Quindi crea la funzione di forma e cerca di adattarla in base al batch per compensare la differenza tra ogni batch e l'aspetto medio.
Ciò che possiamo fare è disporre di dati storici e, sulla base di tali dati, estrarre il valore medio nel tempo e, sulla base di questi dati storici, estrarre anche la funzione di forma.
Una volta ottenuti questi due parametri, possiamo semplicemente estrarli e inserirli nella nostra piattaforma. Ogni volta che arriva un nuovo lotto, cerchiamo di adattarlo a questo modello e di calcolare i componenti FPC.
Come possiamo farlo. Tornerò su questo caso qui. Ogni volta che crei la tabella, estrai il riepilogo del tuo componente FPC. In realtà ottieni anche la funzione di forma. Sono semplicemente nascoste qui. Tutte queste... se guardi le funzioni di forma, ad esempio. Vedi anche un'equazione sul retro che cerca di calcolare la funzione di forma nel tempo.
Quello che voglio fare è estrarre direttamente questo. Inoltre, il mio valore medio ed estrarre il profilo nel tempo. Lasciatemi solo fare un po' di pulizia qui. Per semplificare le cose. Questa è l'ultima volta che lo mostro.
Di default... e anche questo è extra, forse posso semplicemente eliminarlo. Di default, la tabella che si estrae calcola tutta questa funzione di forma al centro dell'intervallo di tempo che si sta inserendo.
Quello che voglio fare è estrarre questa funzione di forma da 180 secondi a 900 secondi, dopodiché ho ridotto i miei dati. Posso facilmente aggiornare questa colonna. Dato che voglio partire da 900 secondi, aggiorno semplicemente il tempo trascorso e posso facilmente ottenere i numeri per la mia funzione di forma nel tempo.
Come puoi vedere, puoi ottenere esattamente lo stesso input, ad esempio, di quello che hai visto nella prima finestra che hai qui. Ora ho queste funzioni di forma. Come posso usarle? Cerco semplicemente di compilarle tutte insieme.
Ho una tabella dati preparata qui. Ho estratto queste funzioni di forma, ad esempio per la temperatura del prodotto in base ai dati storici, e ho il tempo trascorso. Ora è arrivato un nuovo lotto. L'ho appena aggiunto alla mia tabella. Naturalmente, nella nuova piattaforma sarebbe in AWS//. Fa tutti questi calcoli.
Ora ho il mio nuovo lotto. Le informazioni del segnale che ho ottenuto per temperature più elevate, comprese tra 100 e 900 °C, sono tornate all'equazione che ho spiegato prima. Ora voglio costruire questo modello e poi estrarre i componenti FPC.
Quello che faccio semplicemente è che, prima di tutto, trovo la differenza tra i segnali che ho nel nuovo batch in ogni momento e i numeri medi che ho. Si ottiene anche questa formula della funzione minima come risultato della tabella estratta da Episcopal. Il residuo è semplicemente la differenza tra il segnale e i valori medi calcolati in base alle date storiche. Fatto questo, non resta che costruire il resto del modello, questa parte del modello.
Facciamolo. Quello che ho costruito è che questi sono i miei residui. Per ciascuna delle mie funzioni, voglio estrarre le componenti FPC. Ovviamente, non voglio avere alcuna intercetta. Voglio disattivare il mio polinomio centrale per assicurarmi di ottenere esattamente la stessa estrazione dell'altro.
Quindi, quando eseguo questo e osservo l'espressione che vedi per ciascuna funzione di forma, ottieni un parametro che rappresenta i tuoi componenti FPC. Questo è il modo per estrarre ciascuno di questi componenti in base a ciascuna funzione di forma che hai estratto dai dati storici. Dopodiché, lo inserisci come input per il tuo modello.
Ogni volta che arriva un nuovo set di dati, arriva un nuovo batch, si cerca di adattarlo, si estrae la componente FPC e poi la si inserisce come input per il modello. In questo modo si dovrebbe essere in grado di ottenere la stima necessaria in base a ciascuno di essi.
Purtroppo, come ho detto, questo non è un modo semplice per estrarre i componenti FPC. Ma è un modo per farlo. È il nostro approccio all'utilizzo delle funzionalità dei componenti FPC per prevedere le prestazioni del sistema nella nostra configurazione.
L'ultima diapositiva è una conclusione generale. Penso che sia abbastanza chiaro, almeno nel nostro caso, che è molto difficile prevedere lo stato di un sistema basandosi su alcuni input predefiniti, considerando tutta la variazione a cui il sistema è esposto e tutto ciò che accade al suo interno.
Naturalmente, sarebbe molto meglio integrare la possibilità di avere un controllo online nel sistema, se possibile, ma non è un metodo semplice da usare. La seconda opzione è che la funzionalità di esplorazione in modo diverso sia un ottimo strumento per analizzare i dati delle serie temporali. Tuttavia, al momento è disponibile solo per la fornitura e non è facile estrarre alcuni degli elementi presenti da JMP.
La maggior parte dei sistemi industriali potrebbe non avere la possibilità di connettersi direttamente a JMP. Questo limita notevolmente la funzionalità di questa opzione disponibile in JMP.
Ma ci ha dato una visione approfondita del nostro processo dal punto di vista di un esploratore. Dove si trovava effettivamente il problema e cosa accadeva per ogni lotto. Prima guardavamo solo la media o qualcosa del genere. Ora invece vediamo davvero...
Maggiori dettagli.
Sì. E i dati delle serie temporali. Dal punto di vista del processo, è stato molto interessante vedere la parte di analisi.
Esatto. Sì. Con questo, grazie per l'ascolto e spero di vedervi tutti lì.