Lucio Patone
frontiera

Rilevare guasti senza averne mai visto uno: un world model per la manutenzione predittiva

Chi gestisce un impianto conosce il problema della manutenzione predittiva: per addestrare un modello a riconoscere i guasti servono esempi di guasti — e i guasti, per fortuna, sono rari. In questa nota chiudiamo il cerchio della serie sui world model (la teoria, la verifica del modello altrui): abbiamo allenato il nostro world model su un impianto simulato, usando solo filmati di funzionamento normale, e usato la sua «sorpresa» come rilevatore di guasti. Senza un solo esempio di guasto nel training.

L'impianto giocattolo

Il banco è una mini-centrale termica che abbiamo costruito apposta: un serbatoio d'acqua (il livello si vede, la temperatura si legge dal colore), una resistenza che scalda, una pompa in ingresso, una valvola in uscita. Un semplice regolatore tiene la temperatura a 60 °C e il livello a metà: niente apprendimento, niente ricompense — la controparte simulata di come funziona un impianto vero in conduzione normale.

Quattro guasti iniettabili, scelti per coprire firme diverse: la pompa che degrada lentamente (dieci blocchi per passare da sana a un terzo della portata), la resistenza che si guasta di colpo, una perdita nel serbatoio, la valvola che si blocca. Ognuno ha una conseguenza fisica diversa: termica, idraulica, lenta, improvvisa.

Sedici fotogrammi della centrale termica simulata: il serbatoio con diversi livelli e temperature, la resistenza accesa o spenta, la pompa, la valvola e una perdita visibile
L'impianto come lo vede il modello: livello, temperatura (colore), resistenza, pompa, valvola; in due riquadri una perdita attiva (gocce e pozza sotto il serbatoio).

Il training: solo il funzionamento normale

Abbiamo registrato 800 episodi di conduzione normale (fotogrammi più le azioni del regolatore, nessuna etichetta, nessun guasto) e addestrato LeWorldModel da zero, con la ricetta immutata del paper: tre ore su una GPU a noleggio, costo circa un dollaro. Il modello impara a rispondere a una domanda sola: «cosa succede al prossimo istante, data la situazione e ciò che il regolatore sta facendo?». Di guasti non ha mai visto l'ombra.

training da zero · 800 episodi di solo funzionamento normale · 15M parametri · ~3 ore su una GPU · ~1 $

La demo: il modello rileva il guasto prima dell'allarme

Il video mostra un episodio vero di valutazione: a metà, la resistenza si guasta. La curva rossa è l'errore di predizione del modello — la sua sorpresa. Si impenna al blocco 31, un passo dopo il guasto; l'allarme di processo (temperatura fuori tolleranza) scatta solo al blocco 42, quando l'acqua è ormai fredda. L'anticipo è di 11 blocchi.

Episodio di valutazione (guasto: resistenza). La curva di sorpresa si impenna al blocco 31; l'allarme di processo arriva al 42, quando la temperatura esce dalla banda e l'acqua vira al verde.

I numeri, tutti

La valutazione completa: 200 episodi, 40 per classe (normale più i quattro guasti), guasto iniettato a metà episodio. La separazione tra episodi guastati e normali, misurata con l'AUC (1 = perfetta, 0,5 = tirare a caso): 0,98 per la pompa in degradazione, 0,99 per la perdita, 0,88 per la resistenza, 0,71 per la valvola bloccata — il guasto più debole, atteso: una valvola che si congela vicino alla sua posizione normale cambia poco la dinamica.

Curve di sorpresa nel tempo per cinque classi: il controllo resta piatto, i quattro guasti mostrano firme diverse dopo l'iniezione
Ogni guasto ha la sua firma: la resistenza guasta (arancio) impenna e resta alta, la pompa in degradazione (rosso) salta e si assesta a un nuovo livello, la perdita (verde) fa un dosso, la valvola bloccata (viola) appena si vede.

Poi la scoperta che non avevamo previsto. Per pompa e perdita la sorpresa rileva il guasto in tutti i 40 episodi — e l'allarme di processo non scatta mai: il regolatore compensa il guasto e temperatura e livello restano in banda. Il sistema di controllo maschera il problema finché riesce; il world model lo vede lo stesso, perché non guarda le variabili controllate: guarda la dinamica, e quella è cambiata. Per la manutenzione predittiva questo è il caso più prezioso — in un impianto vero un guasto così si scopre quando si rompe tutto, settimane dopo.

Grafico a barre dell'anticipo di rilevazione rispetto all'allarme di processo: undici blocchi per la resistenza guasta; pompa, perdita e valvola rilevati ma mai in allarme
Anticipo della rilevazione rispetto all'allarme di processo. Resistenza: 11 blocchi di preavviso su 40/40 episodi. Pompa e perdita: rilevati sempre, allarmati mai — mascherati dal regolatore.

Regge a una seconda prova?

Un solo training può essere fortunato. Quindi abbiamo rifatto tutto da zero: altro seed, altro dataset rigenerato, altro modello (questa volta fermato dopo poche epoche, quando la loss si è assestata). I numeri chiave tornano: stesse AUC a una cifra decimale di distanza, anticipo sulla resistenza 10,5 blocchi contro 11,3 del primo training, stessi guasti mascherati rilevati. La pipeline — simulazione, training, rilevazione — si ricostruisce in un pomeriggio.

E non solo rilevare: diagnosticare

Resta una domanda: la sorpresa dice che qualcosa è cambiato — ma dice anche cosa è cambiato? Le firme nella curva d'errore sono visivamente distinte, quindi abbiamo messo un classificatore sopra: regressione logistica multinomiale (lo strumento più semplice possibile, in linea con la filosofia del resto del lavoro) sui 15 blocchi di curva successivi al guasto, mille episodi, train e test su semi diversi. Come confronto, lo stesso classificatore sulle traiettorie di temperatura e livello — quello che un monitoraggio di processo classico vedrebbe.

Risultato: la sorpresa diagnostica correttamente nell'81% dei casi, la telemetria nel 68%. Il divario sta dove ce lo aspettavamo. Sui guasti mascherati dal regolatore la telemetria fatica: pompa in degradazione 0,96 contro 0,80, perdita 0,99 contro 0,72. E sugli episodi normali la telemetria grida al lupo: scambia il funzionamento sano per guasto nel 69% dei casi (confondendolo soprattutto con la valvola bloccata), mentre la sorpresa resta a 0,89. Punto debole condiviso, la valvola bloccata: quasi invisibile per entrambi, perché cambia troppo poco la dinamica — onestà vuole che si dica anche questo.

Due matrici di confusione a confronto: la diagnosi dalla sorpresa è quasi diagonale, quella dalla telemetria molto più rumorosa
Diagnosi del guasto (5 classi: normale + 4 guasti). A sinistra la firma della sorpresa, a destra la telemetria di processo: la diagonale è la diagnosi corretta.

Detto in una frase: con un modello allenato solo sul funzionamento normale si ottiene rilevazione, preavviso, e una diagnosi di prima approssimazione — tutte cose che a un impianto vero mancano proprio dove i guasti non hanno esempi.

Cosa si porta a casa chi ha un impianto vero

I limiti prima di tutto: il nostro mondo è una simulazione bidimensionale con due variabili, e il salto a sensori e macchine vere è tutto da dimostrare; la sorpresa dice che qualcosa è cambiato, non quale guasto sia (la diagnosi è il passo successivo); e un guasto che cambia poco la dinamica, come la valvola bloccata, resta quasi invisibile.

Ciò detto, i punti trasferibili sono concreti. Il modello si allena sui soli dati di funzionamento normale — quelli che ogni azienda già raccoglie. Non servono ricompense né etichette: servono osservazioni e azioni. Il costo di calcolo è irrilevante (un dollaro, qui). E il segnale che ne esce è del tipo che manca agli allarmi di processo: rileva il cambiamento di dinamica anche quando il controllo lo sta mascherando. La strada verso un impianto vero passa da lì: qualche telecamera o qualche serie temporale renderizzata, e la stessa ricetta.

Note e riferimenti

Questa è la terza parte di una serie: la teoria e la verifica del modello altrui nelle parti precedenti. Il modello è LeWorldModel (Maes et al., 2026), fondato su LeJEPA (Balestriero & LeCun, 2025); training con il codice pubblico le-wm su stable-worldmodel.

Note di metodo: simulazione propria (Eulero, termostato con isteresi a 60 °C, controllo proporzionale di livello a 0,5); 800 episodi di training di 300 step, frameskip 5 come nell'originale; azioni di blocco da 15 dimensioni standardizzate sul training set; sorpresa = errore quadratico tra il latente predetto (storia di 3 blocchi + azioni) e il latente del fotogramma reale successivo; soglia di rilevazione = media + 3σ degli errori su episodi normali; banda di allarme di processo: temperatura fuori da 50-70 °C o livello fuori da 0,35-0,65. Entrambi i training sono stati fermati a loss piatta (pred_loss ~0,03), la prima dopo 10 epoche, la replica dopo 3.