Ciao, ciao. Mi chiamo Byron Wingerd e sono uno degli ingegneri di sistema JMP. Di solito lavoro con aziende farmaceutiche sulla costa orientale. Oggi parlerò di come rilevare piccole variazioni. Si tratta di analizzare i dati di processo o di analisi e cercare di capire quando si verificano piccole variazioni e come rilevarle. Si analizzano i dati, anche retrospettivamente, cercando di capire quando potrebbero essersi verificate variazioni in passato. Stiamo parlando di trovare segnali nel rumore di fondo dei dati che vengono acquisiti continuamente.
Ho alcuni avvertimenti per te. Il tuo processo non ti ama. Il tuo sistema, qualunque sia il tuo processo, che si tratti di un sistema di misurazione o di un sistema di produzione, di purificazioni, qualunque sia il processo, è più sensibile alle variazioni in ingresso rispetto ai tuoi metodi di controllo qualità in ingresso. Cosa intendo con questo? Quel che stai cercando, come la purezza, è ottimo se riesci a rilevarlo, ma non sarai in grado di rilevare cose che non ti aspetti di trovare.
Oltre a ciò, i C of A dei fornitori, soprattutto quelli chimici, a volte vengono semplicemente copiati da un lotto all'altro. Non ci sono molti avvisi di piccole variazioni nelle materie prime in entrata, a meno che non si disponga di metodi estremamente sensibili per rilevarle. Per la stragrande maggioranza delle persone, questi semplicemente non esistono.
Ho un altro avvertimento per te. I tuoi programmi di tracciamento e analisi delle tendenze? Non ti amano. In parte è colpa nostra. Siamo diventati compiacenti. Tutti dicono che se hai troppi allarmi, la gente inizia a ignorarli. Ma l'altro lato della medaglia è che non ci sono allarmi. Tutto sembra a posto. Tutto è sotto controllo. Non dobbiamo preoccuparci di nulla. Smettiamo anche di analizzare attentamente i dati. Tra questo problema di non riuscire a individuare elementi che potrebbero influenzare il nostro processo, e il fatto che tutto sembra a posto, ma non sto guardando con la dovuta attenzione, potremmo finire nei guai.
Perché usiamo le carte di controllo? Perché facciamo SPC, CPV, o come vogliamo chiamarle? La cosa più importante è che vogliamo distinguere la variazione di causa comune da quella di causa speciale. È un meccanismo per rispondere ai cambiamenti nel processo che rileviamo. Con le statistiche, possiamo essere piuttosto sensibili a ciò che stiamo rilevando. Possiamo anche automatizzare gli avvisi in modo da poter trovare cose quando, non so, non stiamo prestando attenzione.
Ma tutto questo monitoraggio e questa analisi delle tendenze non sono del tutto facoltativi. Se operi nel settore farmaceutico, sono obbligatori per legge. Se ti occupi di qualsiasi altro tipo di produzione, anche la norma ISO 9000 ne parla. Non è facoltativo. Dovremmo tutti farlo e monitorare i nostri processi.
Un altro avvertimento: il tuo processo potrebbe avvisarti silenziosamente di cose che potrebbero accadere in futuro. Ecco cosa intendo. Ci sono questi esperimenti di produzione accidentali. Ci sono situazioni rischiose. Tipo, oh, ho quasi perso il controllo o quasi perso il controllo di quel lotto. Ci sono cose strane che non sono fuori controllo, ma vedi, puoi trovare piccole variazioni nei dati. Il problema è che non riesci a vedere ciò che non stai cercando.
L'altro lato della medaglia è che non si vuole essere ingannati dalla casualità, ma semplicemente inseguire segnali casuali. Questo è il punto delle carte di controllo. Vogliamo rispondere solo alla variazione di causa speciale, ma non a quella di causa comune. Siamo in quel margine, come se guardassimo i dati intermedi.
Ciò di cui voglio parlare è l'applicazione di alcuni strumenti che abbiamo a disposizione per rilevare piccoli cambiamenti. Abbiamo i grafici CUSUM. Sono fantastici. Idealmente, dovrebbero essere usati in modo prospettico, alla ricerca di cambiamenti avvenuti. Si tratta di osservare la somma cumulativa dei movimenti verso l'alto o verso il basso in un processo. Abbiamo diversi metodi per interpretarli. Un altro ottimo strumento è l'EWMA, ovvero i grafici a media mobile ponderata esponenzialmente. Sono davvero validi.
Poi possiamo addentrarci nell'idea di rilevamento dei punti di cambiamento. È qui che parleremo di alcune cose nell'analisi multivariata, c'è qualcosa chiamato Fused Lasso di cui parleremo, e poi forse anche di usare alcuni metodi ad albero come partizione, screening dei predittori, foresta bootstrap, per cercare piccoli cambiamenti, spostamenti e derive che si verificano. JMP offre ottimi strumenti per analizzare questi aspetti, e vorrei parlarne di alcuni di quelli chiave.
CUSUM è un ottimo strumento per rilevare piccoli spostamenti in un processo, in particolare derive che si verificano lentamente e poi iniziano ad accelerare. Possiamo individuarli osservando i pattern nei grafici che emergono in modo molto evidente. In passato, c'era tutta questa storia della V-Mask e si guardava la V-Mask e dove i dati andavano nella V-Mask, e sembrava un po' un gesto della mano. Funziona. È assolutamente solido. Ma in JMP, abbiamo ricostruito quella piattaforma un paio di anni fa in modo che assomigli di più a una normale carta di controllo. È molto pratico da usare.
Quella carta di controllo, la CUSUM, utilizza alcuni parametri. C'è il Sigma, che indica quanto grande è la differenza che si desidera rilevare. C'è l'anticipo, come la risposta iniziale rapida. Ci sono un valore H e un valore K che valutano quanto grande è la variazione che possiamo rilevare e cosa definisce il Sigma che stiamo utilizzando, l'intervallo K-Sigma. Alcuni parametri devono essere regolati per ottenere un risultato ottimale.
Ora, un'altra carta di controllo che abbiamo menzionato è l'EWMA. Si tratta di una carta di controllo con memoria limitata in cui CUSUM considera la somma cumulativa. L'EWMA ha memoria, e il punto è: quanto si lascia che le osservazioni precedenti la influenzino? Si può ponderare quella memoria in modo esponenziale. Di nuovo, ha alcuni parametri. Ha il target, il Sigma, e soprattutto il Lambda. Il Lambda è quel livellamento, ovvero quanto indietro nella memoria si ricorda tutto o niente o qualcosa nel mezzo in quell'attesa.
Per entrambi questi metodi, molto comuni per individuare spostamenti e derive, è necessario un minimo di esperienza e di preparazione. Bisogna saperli impostare correttamente per individuare esattamente ciò che si sta cercando, perché si potrebbero rilevare elementi inesistenti o trascurare elementi presenti, e non fare stime precise se si regolano eccessivamente i parametri in un modo o nell'altro.
Non sarebbe bello se ci fosse un modo per avere uno strumento, non so, simile al machine learning, che prenda queste decisioni per noi, un po' meno influenzato dal nostro background e da ciò che sappiamo? Beh, sarebbe fantastico. C'è un metodo che può aiutarci in questo, e si chiama Fused Lasso. Fa parte della cassetta degli attrezzi, i metodi di regressione moderna avanzata. È uno strumento a cui possiamo accedere utilizzando la regressione generalizzata. La regressione generalizzata è una funzionalità di JMP Pro. È un metodo di regressione penalizzata.
In passato, si è parlato di questo metodo per trovare punti di cambiamento. Si tratta di calcoli matematici complessi e di idee piuttosto complesse su come individuare la posizione di tali punti di cambiamento nei dati. Devo solo riconoscere che, 10 anni fa, Clay Barker presentò questa idea in uno dei suoi interventi su Genreg, rilevamento dei punti di cambiamento e fusione del lazo.
Penso che sia una di quelle cose che finisce per essere una nota a piè di pagina, ed è davvero importante. Lo uso da un paio d'anni, ma ho visto che non molti lo sanno. Voglio dire, io ascolto ogni parola di Clay Barker, è il mio eroe. Ma forse non tutti gli altri.
A questo punto, potresti dire: "Ehi, Byron, ho bisogno che tu ti dia una mossa. Metodi di regressione moderna avanzati? Genreg? Mi sento un po' disperato perché stai parlando di JMP Pro e di calcoli matematici davvero complicati che non voglio seguire". A quanto pare, è solo un po' complicato. È relativamente facile da configurare e puoi impostare un modo per rilevare i segnali in un modo che potrebbe avere qualche vantaggio rispetto ai metodi più semplici.
Solo un po' di contesto. Un'applicazione che le persone usano da molto tempo è simile alla piattaforma di partizione in JMP. Se si imposta il tempo come X e Y, come qualsiasi risposta si stia esaminando, è possibile utilizzarla per trovare i punti in cui la media è cambiata nel tempo, soprattutto se si utilizza una pianificazione regolarizzata, come il numero di riga o qualcosa del genere. Funziona piuttosto bene per individuare dove i dati del processo potrebbero essersi spostati, ad esempio la variazione della media. Può trovare alcuni di quei punti di interruzione. È piuttosto efficace in questo.
Ci sono un paio di piccoli problemi. Se i breakpoint sono troppo vicini, non riesce a trovarli. Se il rumore è troppo grande, non riesce a trovarli. Se ce ne sono molti, potrebbe trovare solo il primo e non i successivi. Ma è un'idea davvero interessante perché quello che si fa, proprio come fa il lazo fuso, è cercare i vicini dei gruppi che hanno medie simili e poi trovare le differenze nelle medie. Questo è esattamente ciò che accade con la partizione.
Tornando a queste tecniche di regressione avanzate, ciò che dobbiamo fare è impostare una struttura dati speciale con una semplice istruzione JSL, e per semplice intendo breve, non proprio semplice, che costruisca una matrice per me. L'aspetto di questa matrice è questo nella diapositiva. Immaginate una matrice diagonale in cui la prima colonna ha tutti valori uno, e la colonna successiva è zero, e poi tutti valori uno. La colonna successiva è zero, zero e tutti valori uno. Abbiamo una colonna per ogni riga che vogliamo provare a esaminare nella nostra tabella dati.
Se abbiamo cento righe di dati, otteniamo cento colonne. Se abbiamo mille righe di dati, otteniamo mille colonne in questa matrice diagonale. Per semplicità, più avanti la chiamerò matrice di scoperta, ma è solo un termine inventato e totalmente sbagliato. Per me, però, funziona.
In passato, impostando questo metodo, potevamo usare questa matrice di scoperta e la piattaforma di partizione, e potevamo fare la stessa cosa. Questo lo rendeva molto più sensibile nel rilevare le interruzioni, perché trovavamo questa colonna, che corrispondeva a una variazione nella media. Quella colonna è la riga nel set di dati. Funzionava davvero bene ed era piuttosto semplice da impostare.
I JMP hanno subito grandi cambiamenti negli ultimi due anni. Una delle mie funzioni preferite di JMP è il cosiddetto predictor screening. Lo predictor screening costruisce molti alberi e poi ne calcola la media.
Bene, ecco il punto chiave. Nello screening dei predittori, creerà, diciamo, 100 alberi, e prenderà un campione casuale delle colonne da quella matrice di scoperta e un campione casuale delle righe dai miei dati, esaminando solo un campione casuale della Y che sto cercando di spiegare. Costruirà un albero. Lo farà ancora e ancora e ancora e ancora.
Ciò che accade è che quella parte in cui uno spostamento potrebbe essere vicino a un altro spostamento, non finisce in tutti gli alberi. Possiamo trovare quegli altri spostamenti che sono vicini tra loro. Possiamo trovare molti spostamenti in quel set di dati. Questo risolve alcuni dei problemi che la partizione aveva, ovvero non riuscire a trovare elementi vicini tra loro e non riuscire a trovare più di un paio di spostamenti se si verificano. Questo ci permette di trovare molto di più.
Ho creato una sandbox per testare quanto funziona effettivamente. Quanto è piccolo il concetto di piccolo, e che aspetto ha la mia sandbox? Beh, voglio trovare cose che rappresentino uno spostamento di 1-2 Sigma. Voglio trovare cambiamenti sistematici. È la stessa cosa che sto facendo con gli esperimenti di produzione accidentali o i cambiamenti nelle materie prime che si sono verificati. Non ci hanno portato fuori controllo, ma potrebbero aver spostato un po' la situazione verso l'alto. Quando quella grande quantità di materiale si esaurisce, si sposta di nuovo verso il basso. Questi sono piccoli spostamenti che si verificano durante l'esecuzione del nostro processo, e questo mi permette di tornare indietro in modo forense e diagnosticarne alcuni. Voglio vedere cose davvero piccole che accadono.
Potete immaginare qualcosa del genere, dove nella mia sandbox ho circa 200 righe. Nelle prime cento righe, ho uno spostamento a 33 più uno, e poi ho uno spostamento verso il basso di -1 a 66. Diciamo che ho una media di 3, e sto spostando verso l'alto a 4, e poi di nuovo a 3 che è la mia media. Ho del rumore associato a questo. Questa è l'immagine davvero pulita e bella. La guardi e pensi: "Beh, Byron, se inizi a guardare dati come questi, posso trovarli sempre". Ok, ma ti svelerò il trucco alla fine.
Nell'intervallo blu non ho alcuno spostamento. Nelle prime 100 righe ho uno spostamento definito. Nel secondo spostamento, non c'è nulla. È qui che si trova il rumore. Non dovrei mai trovare nulla in questa sezione, e dovrei sempre trovare uno spostamento a 33 e 66.
È piuttosto audace affermare di avere un metodo che può farlo quando il segnale è facile da trovare. Ma supponiamo che i miei dati assomiglino a questo. Supponiamo di avere diverse migliaia di set di dati. Sono tutti sovrapposti. C'è una certa foschia, e voglio sempre trovare quello spostamento in 33 e 66. In media, puoi ancora guardare questi dati qui e dire: "Sì, Byron, vedo benissimo che c'è". Ma alcuni di questi si sposteranno in modo molto netto, altri no, e altri ancora presenteranno solo rumore o oscillazioni casuali in quella sezione blu laggiù. Quanto sono efficace nel rilevare un cambiamento rispetto al non rilevarlo?
Ecco un esempio per chiarire un po' di più. A circa 33, quel primo spostamento, mi sembra di capire, guardandolo, che qualcosa è salito. Ma quel secondo spostamento, è come un trend al ribasso. Non è molto chiaro. Nella mia analisi senza deriva o spostamento verso la fine, sta salendo? O c'è un andamento a dente di sega? Non ne sono sicuro. Questi spostamenti potrebbero non essere facili da vedere o rilevare.
Ok, ora mi innervosirò un po', poi vi mostrerò come appare nella realtà, e poi torneremo a valutare alcuni dei risultati. Bene. Ecco la mia cassetta degli attrezzi. Ho un campione casuale di dati, e questo qui ha quello spostamento verso l'alto, ed è etichettato con una linea rossa, e uno spostamento verso il basso, etichettato con una linea rossa. Questo è solo un grafico di controllo dei dati. Solo guardandolo, avrei difficoltà a dire: sì, c'è davvero qualcosa lì.
Scendo qui e guardo una carta di controllo CUSUM, e le linee viola indicano dove potrebbero verificarsi degli spostamenti. Qui possiamo vedere chiaramente allineate con le linee rosse, che CUSUM sta rilevando quello spostamento. Se modifico i valori di K, H e Sigma qui, posso renderlo più sensibile. Facciamolo a 0,15. Ora, modificando il K che sto osservando, posso renderlo un po' più piccolo. Rendiamolo ancora più piccolo. Non trovo 66, ma sta trovando qualcosa qui, e questo è qui nell'intervallo 80-90. Indica che qualcosa sta accadendo. Ma questo è un buon test.
Posso scendere qui e vedere il mio grafico EWMA. Lasciate che lo ingrandisca un po'. Ho il mio cursore Lambda e posso modificarlo. Se vado qui, non c'è memoria. Se vado qui, c'è tutta la memoria. È praticamente identico a un grafico CUSUM. L'ho detto, e so che ci sono persone che si occupano molto di carte di controllo e che lo ascolteranno. Per favore, non buttatemi fuori per averlo detto, ma è così. Qui, diminuendo o aumentando Lambda, posso ottenere punti di variazione identificati proprio intorno a 33, ma non riesco a trovare nulla qui intorno a 66.
Diamo un'occhiata al terzo metodo. Qui sto usando lo screening dei predittori e ho appena creato un piccolo diagramma di Pareto. Nello screening dei predittori, ho impostato la mia matrice di scoperta. Possiamo dare un'occhiata al set di dati molto velocemente. No, non guarderò il set di dati. Fidatevi, è lì. Quello che vedo qui è la prima ipotesi. Dice che potrebbe esserci uno spostamento alla riga 33, e l'ipotesi numero 2, numero di rango 2, è 65. Vediamo qualcosa qui a 142, poi 35, poi 40, e 80, 70. Le nostre prime due ipotesi stanno colpendo nel segno.
Quello che ho fatto è stato disegnare su questo grafico una linea blu per ciascuna di queste righe indicate nella schermata del predittore. La proporzione che spiegano è lo spessore della linea blu qui. Dice: "Penso che vediamo qualcosa intorno a 33, e penso che vediamo qualcosa intorno a 65". Questo fa un ottimo lavoro nel trovare quello spostamento nella media man mano che procede, perché potete vedere qui, c'è questo punto proprio qui, e se lo ignoraste completamente, sembrerebbe che ci sia stato uno spostamento di questo materiale rispetto a quest'altro materiale. Ma i nostri occhi lo catturano, e anche gli altri metodi lo catturano, e cercano di includerlo. Ma non era incluso in tutti gli alberi, quindi ci ha permesso di trovare quello spostamento, il che è piuttosto interessante.
Con quale frequenza funzionerà correttamente? Vorrei saperlo. Torno qui a PowerPoint. Riprendiamo il tutto. Quello che ho fatto è stato simulare migliaia di questi dati individuali di un set. Ognuno era ugualmente rumoroso, e alcuni erano facili da rilevare, altri difficili da rilevare, ma erano migliaia. Ho eseguito il profiler di previsione su ciascuno di quei set di dati, ho catturato i primi 10 ranghi e ho verificato se avessi scelto la riga giusta o no.
Ecco cosa ho scoperto. La maggior parte delle volte, selezioniamo punti molto vicini o proprio sui punti di cambio che abbiamo definito. Molto raramente, selezioniamo punti che si trovano in quel rumore oltre i 100, dove so per certo che non sta succedendo nulla. Sembra che funzioni piuttosto bene.
Diamo un'occhiata ad alcune statistiche. Questo con 8.000 sandbox diverse. Quando arriveremo alla fase di discovery, questo sarà probabilmente un numero maggiore. Valutato con lo screening predittivo, usiamo solo 100 alberi e abbiamo esaminato i primi 10 ranghi, e avevamo una finestra di più o meno 3. 33 più o meno 3 e 66 più o meno 3. Ha scelto in quell'intervallo? Per entrambi contemporaneamente, essendo tra i primi 10, il 95% delle volte, sì. Ha trovato 33, lo spostamento a 33, il 90% delle volte, e 66, il 92% delle volte. Sta facendo un ottimo lavoro nel trovarli, il che è fantastico.
In questo grafico, e sto cercando di esprimere questo concetto di sensibilità e specificità, si tratta di uno screening predittivo: otteniamo i primi 10 ranghi, i primi 10 elementi. Mi chiedo: in quale percentuale di casi si tratta di una finestra di più o meno 3 o di più o meno 12? La prima scelta veniva quasi sempre selezionata. Nel rumore, la prima scelta, o soprattutto le prime cinque, si presentava molto raramente. È un metodo piuttosto valido e piuttosto sensibile da usare.
Conclusioni. Innanzitutto, il rilevamento di piccoli spostamenti è realmente accessibile con diversi metodi in JMP, ma l'idea di utilizzare l'approccio "fused lazo" è fantastica. Un piccolo Easter egg sarà presente in JMP 19 Graph Builder, una delle personalità di linea. Non ne sono sicuro, ma date un'occhiata quando uscirà la versione 19. Questi metodi avanzati sono piuttosto semplici perché basta usare uno script per generare la matrice di individuazione. Senza alcuna messa a punto, questo approccio "fused lazo" funziona davvero bene. Basta un po' di abilità e tante opportunità.
Ci sarà uno script che posso usare per farlo da solo? Condividerai quello strumento Sandbox? Sì. Quando arriverà Discovery, ci sarà un componente aggiuntivo davvero utile. Potrai selezionare i tuoi dati, usare lo strumento Sandbox, lo strumento Explorer per più metodi di rilevamento dei turni. Inoltre, ripubblicherò lo script che Clay ha usato per creare quella matrice di Discovery. Spero che sia utile, o almeno divertente. Spero di vedervi a Discovery. Se mi vedete in corridoio, salutatemi. Dovrei essere lì.
Ci sentiamo più tardi. Restate tesi.