---
# System prepended metadata

title: Sviluppo progetto

---

---
title: Sviluppo progetto
---

# Introduzione
Il progetto da noi sviluppato si pone nell'ottica di risolvere la *PHME20 Data Challenge* proposta della *The PHM Society*: la challenge è focalizzata su un sistema di filtraggio e l'obiettivo è di generare un modello prognostico in grado di stimare la *Remaining Useful Life (RUL)* del sistema.

Il sistema interessato alla challenge è questo mostrato in figura:
![](https://i.imgur.com/uh4WCPb.png)
I componenti principali di questo impianto sperimentale costruito per il progetto sono il serbatoio di liquido, la pompa, il filtro e i sensori di pressione e di portata. In particolare i sensori di pressione sono posti uno a monte e uno a valle del filtro, in modo da misurare la *Upstream_Pressure* e la *Downstream_Pressure*, ovvero la pressione prima e dopo il filtraggio, acquisiti a 10 Hz. Il sistema fallisce quando la caduta di pressione, ovvero *Upstream_Pressure* - *Downstream_Pressure*, è superiore a 20 psi.
L'obiettivo è, quindi, generare un modello per la stima del tempo di vita utile rimanente del sistema di filtraggio, a partire dai dati raccolti riguardanti il flow rate, l'upstream pressure e la downstream pressure. Bisogna anche tenere in considerazione il fatto che i dati a disposizione sono stati acquisiti lungo tutto il ciclo di vita del sistema, ovvero i dati utilizzabili per generare il modello sono 'Run-to-Failure'. 
Il liquido utilizzato nel sistema di filtraggio è una soluzione di acqua e altre particelle di grandezza diversa. I dati sono stati acquisiti in modo controllato, variando, per ogni esperimento, la grandezza del particolato e la concentrazione delle particelle nell'acqua. In particolare, il dataset su cui abbiamo lavorato contiene i dati riguardanti due tipi di particolato, denominati 'Small' e 'Large', acquisiti con concetrazioni diverse: per ognuna delle due tipologie di particolato, sono stati effettuati esperimenti con *solid ratio* pari al $0.40\%$, al $0.425\%$ e al $0.45\%$.


# Caricamento

Il dataset a disposizione era salvato in formato csv, ed era già diviso in training set e test set. Le 32 misurazioni fornite erano separate anche in base alla dimensione del particolato che si trovava nel sistema nel momento della misurazione; nel nostro caso avevamo solo due taglie: Large e Small.

| Time(s) | Flow_Rate(ml/m) |	Upstream_Pressure(psi) | Downstream_Pressure(psi) |
| ------- | --------------- | ------------------------ | ------------------------ |
| 0.0	  | 3.518703	    | 0.900000                 | -0.006250                |
| 0.1	  | 6.874955	    | 0.974999                 | 0.562499                 |
| 0.2	  | 7.960809	    | 0.825000                 | 0.618750                 |
| 0.3	  | 4.900689	    | 0.618750                 | 0.368750                 |
| 0.4	  | 5.295542	    | 0.031249                 | 0.168750                 |
| 0.5	  | 9.737641    	| -0.781250                | -1.087500                |
| 0.6	  | 1.248297	    | 0.212500                 | -0.750000                |
| 0.7	  | 0.75473 	    | 0.53125                  | -0.262500                |
| 0.8	  | 5.196829	    | 1.293749                 | 0.381250                 |
| 0.9	  | 6.874955	    | 0.737500                 | 0.53125                  |
| 1.0	  | 4.407123	    | 0.181249                 | 0.143749                 |
*Tabella 1*

# Preprocessamento

I dati caricati sono stati processati in due fasi: 
1. abbiamo aggiunto un campo calcolato come la differenza di pressione, essendo questo campo particolarmente rilevante per l'individuazione del guasto:
    $$PressureDiff = Upstream Pressure - Downstream Pressure$$
2. abbiamo tagliato ogni misurazione al momento in cui: $$PressureDiff > 20$$ cioè al momento in cui il sistema è da ritenere guasto. I dati contenuti nel dataset originario, infatti, si estendevano oltre il momento iniziale di rottura del sistema, rendendolo inadeguato al fine dell'addestramento del modello.

![](https://i.imgur.com/E8IE4Ta.png)
*Figura 2*
Il risultato è visibile in Figura 2: abbiamo 4 set di misurazioni (come scritto precedentemente) ogniuna delle quali ha 5 colonne: le 4 della Tabella 1 e la nuova $PressureDiff$.

# Analisi dei segnali

I 4 segnali a disposizione sono stati rappresentati in seguito:

### Flowrate
![](https://i.imgur.com/kCNNcfE.png)
Questo primo grafico mostra l'andamento della *flowrate* nel tempo. Si può notare come, inizialmente, il segnale oscilli intensamente, e questo corrisponde al periodo di transitorio del segnale. Quando il segnale va a regime, invece, esso rimane perlopiù costante, con qualche picco negativo dovuto al rumore. In generale, però, il rumore che affligge questo segnale è basso e, per questo, non è necessario effettuare alcun filtraggio. Si può invece notare che nell'ultimo quarto del dominio temporale la curva scende gradualmente fino al valore di 400, valore al quale segue la rottura del filtro.

### Downstream Pressure
![](https://i.imgur.com/TXdVgeT.png)
Questo grafico rappresenta l'andamento della *Downstream Pressure* nel tempo di vita del sistema. Si può notare come il segnale oscilli per tutto il tempo tra i valori di $1$ e $-1$. Il segnale non è caratterizzato da alcun trend: la media nel tempo è, infatti, fissa a zero. Per questo il segnale non sembra portare informazioni rilevanti ai fini della prognosi.


### Upstream Pressure
![](https://i.imgur.com/uR8hfBi.png)
L'andamento della *Upstream pressure*, riportato in questo grafico, è quello più interessante ai fini della nostra analisi. Il segnale è affetto da poco rumore, per cui non è stato effuttuato alcun filtraggio. Si può invece notare che ha un leggero trend positivo per tutto l'arco temporale finchè, nell'ultimo quarto, si verifica una crescita rapida: la pressione aumenta considerevolmente finchè il filtro non si rompe. A quel punto il segnale termina, in quanto abbiamo scartato in fase di preprocessing tutti i dati acquisiti dopo la rottura del filtro.

### Pressure Diff
![](https://i.imgur.com/X2Vlw9v.png)
In quest'ultimo grafico è riportato l'andamento della *Pressure Difference*. L'andamento del segnale ricorda molto l'andamento della *Upstream Pressure* riportata nel grafico appena visto. Questo è dovuto al fatto che la differenza di pressione è stata calcolato come la differenza tra la *Upstream Pressure* e la *Downstream Pressure*: essendo la pressione a valle quasi costante e di media pari a 0, la differenza tra le due pressioni genera un andamento perlopiù simile a quello della pressione a monte del filtro.

# Estrazione delle features

Per l'estrazione delle features abbiamo adottato diversi approcci:
1. Inizialmente abbiamo estratto delle feature calcolate sull'intero segnale, tuttavia, per il nostro scopo, ci sono sembrate poco utili, in quanto restituiscono un unico indicatore per l'intero segnale, non rappresentando in maniera adeguata il degradamento del sistema.
2. Abbiamo quindi estratto delle feature dopo una suddivisione dei segnali in frame, con frame size e frame rate iniziali di 10s, sia nel dominio del tempo che nel dominio delle frequenze. I risultati sono mostrati in tabella:
**Tabella qui**
Si può notare come le feature più rilevanti siano quelle relative alla differenza di pressione e all'upstream pressure, in cui le feature prominenti sono la Mean, l'RMS e la Peak Value: i valori alti di Monotonicity, Trendability e Prognosability individuati sono alti probabilmente a causa dell'andamento di queste due curve, che presentano un andamento pseudo-esponenziale nei momenti vicini al punto di rottura. Altre feature rilevanti da considerare sono stati indivuati per quanto riguarda il Flow Rate: anche in questo caso le feature con rank maggiore sono la Mean, la RMS e la Peak Value. Pur avendo una trendability minore, l'andamento di queste feature presenta effettivamente un cambiamento al degradamento del sistema, con un andamento decrescente fino al punto di rottura. 
Le feature relative al downstream pressure, invece, risultano essere poco rilevanti ed assumono un andamento casuale, così come le feature spettrali relative a tutte le misure considerate. 
Si è quindi deciso di considerare circa 6-7 feature relative alla differenza di pressione (l'upstream pressure presenta un andamento pressochè identico alla differenza di pressione, con una rumorosità maggiore, per cui è stato scartato al fine della generazione delle feature) e alla flow rate, essendo le feature relative a queste misure quelle più promettenti.
3. Per recuperare maggiore informazione dai segnali a disponizione, abbiamo deciso di estrarre le feature più promettenti del passo 2 con frame size di 1s e frame rate di 1s, per ottenere delle informazioni più fini sul degradamento del sistema. Tra le feaure ottenute si sono selezionate, quindi, 7 feature: la Mean, l'RMS, la Peak Value e la Shape Factor per quanto riguarda la differenza di pressione, e la Mean, l'RMS e la Crest Factor per quanto riguarda la Flow Rate.

Le feature considerate, assieme ai relativi valori di rank, sono riportati in tabella:

| Type | Feature | Monotonicity | Trendability | Prognosability |
| -------- | -------- | -------- | -------- | -------- |
| Pressure difference  | Mean   | 0.7123 | 0.9980 | 0.9801 |
| Pressure difference  | RMS | 0.7105 | 0.9979 | 0.9801 |
| Pressure difference  | Peak Value | 0.7336 | 0.9981 | 0.9881 |
| Pressure difference  | Shape Factor | 0.4196 | 0.7393 | 0.9989 |
| Flow Rate | Mean | 0.1768 | 0.6293 | 0.9782 |
| Flow Rate  | RMS | 0.1873 | 0.6398 | 0.9794 |
| Flow Rate  | Crest Factor | 0.0329 | 0.5211 | 0.9846 |

# Generazione dei modelli

Con le feature della tabella precedente, mantenedo i dati separati in base alla dimensione del particolato, abbiamo allenato i seguenti modelli con i relativi risultati:

## Small

### exp2

Il modelli mostrano un errore costante nel primo 85% del periodo analizzato, successivamente, in corrispondenza dell'incremento di *Pressure Diff*, i modelli che dipendono da una feature associata a questa misura migliorano la loro stima della RUL riducendo di conseguenza l'errore. 


MAE sulla feature pressure diff Mean: 46.4266
MAE sulla feature pressure diff RMS: 47.0511
MAE sulla feature pressure diff PeakValue: 47.0836
MAE sulla feature pressure diff ShapeFactor: 49.5746
MAE sulla feature flow rate Mean: 49.5747
MAE sulla feature flow rate RMS: 49.5747
MAE sulla feature flow rate CrestFactor: 49.5703
MAE sulla feature all features: 49.5747

![](https://i.imgur.com/sdISlYV.png)
![](https://i.imgur.com/3h53Fe3.png)

### poly3

Il modelli che sfruttano il flowrate mostrano anche in questo caso un'errore costante su tutto il periodo a cui corrisponde una previsione della RUL lineare. Al contrario anche con questo caso i modelli che si basano su feature ricavate da *Pressure Diff* nell'ultimo 15% del periodo riescono a migliorare la stima. A differenza del caso precedente, quest'ultimi nel primo periodo mostrano un andamento variabile: in particolare inizialmente riescono a mantenere l'errore più basso, dopo circa il 10% del perido, tuttavia si stabilizzano con un errore assoluto di circa 50s.

MAE sulla feature pressure diff Mean: 44.9012
MAE sulla feature pressure diff RMS: 45.6862
MAE sulla feature pressure diff PeakValue: 46.1736
MAE sulla feature pressure diff ShapeFactor: 49.5747
MAE sulla feature flow rate Mean: 49.5747
MAE sulla feature flow rate RMS: 49.5747
MAE sulla feature flow rate CrestFactor: 49.5692
MAE sulla feature all features: 49.5747

![](https://i.imgur.com/4gaePbg.png)
![](https://i.imgur.com/96rZD1j.png)

### arima3

I modelli ottenuti con l'algoritomo ARIMA3 mostrano un andamento analogo: tutti i modelli soffrono di underfitting, cioè restituiscono una previsione perfettamente lineare con errore pari a circa 50. Una parziale eccezione è rappresentata dal modello ARIMA3 che utilizza tutte le feature, il quale riesce in alcuni momenti a ridurre l'errore, tuttavia anche in questo caso abbiamo un MAE del tutto simile a quello degli altri.

MAE sulla feature pressure diff Mean: 49.5745
MAE sulla feature pressure diff RMS: 49.5745
MAE sulla feature pressure diff PeakValue: 49.5741
MAE sulla feature pressure diff ShapeFactor: 49.5747
MAE sulla feature flow rate Mean: 49.5865
MAE sulla feature flow rate RMS: 50.3635
MAE sulla feature flow rate CrestFactor: 49.5742
MAE sulla feature all features: 49.5824

![](https://i.imgur.com/5ZVEbdr.png)
![](https://i.imgur.com/lox0SyI.png)

### arma3

I modelli generati utilizzando l'algoritmo ARMA3 mostrano tutti un andamento lineare senza eccezioni con un MAE perfettamente sovrapponibile con quello ottenuto dai modelli ARIMA3.

MAE sulla feature pressure diff Mean: 49.5744
MAE sulla feature pressure diff RMS: 49.5747
MAE sulla feature pressure diff PeakValue: 49.5749
MAE sulla feature pressure diff ShapeFactor: 49.5747
MAE sulla feature flow rate Mean: 49.5797
MAE sulla feature flow rate RMS: 49.5764
MAE sulla feature flow rate CrestFactor: 49.5702
MAE sulla feature all features: 49.5747

![](https://i.imgur.com/OoDsWC7.png)
![](https://i.imgur.com/uLERkSm.png)

### linear

I modelli lineari che utilizzano le feature ricavate dalla *Pressure Diff* mostrano un andamento che si distingue da quelli visti in precedenza. In particolare l'errore subisce un'abbassamento dopo i primi secondi e si ferma a circa 32s per il primo 40% del periodo. Successivamente l'errore subusce un'aumento che continua fino all'ultimo decimo del perido, durante il quale, come accaduto per poly3 ed exp2, si ha un'abbassamento pronunciato dell'errore.

MAE sulla feature pressure diff Mean: 41.1923
MAE sulla feature pressure diff RMS: 41.9807
MAE sulla feature pressure diff PeakValue: 44.0292
MAE sulla feature pressure diff ShapeFactor: 49.5747
MAE sulla feature flow rate Mean: 49.5747
MAE sulla feature flow rate RMS: 49.5747
MAE sulla feature flow rate CrestFactor: 49.5718
MAE sulla feature all features: 49.5747

![](https://i.imgur.com/dRmuaOE.png)
![](https://i.imgur.com/sF4q2Kk.png)

## Large

Utilizzando la parte del dataset ottenuta a partire dal particolato grande abbiamo ottenuto dei risultati molto simili a quelli riferiti al particolato fine. Le differenze principali riguardano i modelli ARIMA3 ARMA3 che nonstante mantengono un andamento lineare, hanno un'errore costante molto più ridotto (21 contro 50). La seconda differenza riguarda il modello lienare, che in questo caso non presenta più l'abbassamento dell'errore nel primo 40%, ma tende a rimanere stabile come accade per exp2 e poly3.

### exp2

MAE sulla feature pressure diff Mean: 20.9367
MAE sulla feature pressure diff RMS: 20.8303
MAE sulla feature pressure diff PeakValue: 20.8323
MAE sulla feature pressure diff ShapeFactor: 21.3144
MAE sulla feature flow rate Mean: 21.3143
MAE sulla feature flow rate RMS: 21.3143
MAE sulla feature flow rate CrestFactor: 21.3046
MAE sulla feature all features: 21.3143

![](https://i.imgur.com/DWMP1xV.png)
![](https://i.imgur.com/Zyv8Zbf.png)

### arima3

MAE sulla feature pressure diff Mean: 21.3143
MAE sulla feature pressure diff RMS: 21.3143
MAE sulla feature pressure diff PeakValue: 21.3143
MAE sulla feature pressure diff ShapeFactor: 21.3144
MAE sulla feature flow rate Mean: 21.3149
MAE sulla feature flow rate RMS: 21.3147
MAE sulla feature flow rate CrestFactor: 21.3318
MAE sulla feature all features: 21.3145

![](https://i.imgur.com/DEIgXo4.png)
![](https://i.imgur.com/xhK7ECv.png)

### poly3

MAE sulla feature pressure diff Mean: 20.3624
MAE sulla feature pressure diff RMS: 20.4602
MAE sulla feature pressure diff PeakValue: 20.6266
MAE sulla feature pressure diff ShapeFactor: 21.3144
MAE sulla feature flow rate Mean: 21.3143
MAE sulla feature flow rate RMS: 21.3143
MAE sulla feature flow rate CrestFactor: 21.3104
MAE sulla feature all features: 21.3143

![](https://i.imgur.com/0oInol9.png)
![](https://i.imgur.com/Fdgl06h.png)


### arma3

MAE sulla feature pressure diff Mean: 21.3144
MAE sulla feature pressure diff RMS: 21.3144
MAE sulla feature pressure diff PeakValue: 21.3144
MAE sulla feature pressure diff ShapeFactor: 21.3143
MAE sulla feature flow rate Mean: 21.3077
MAE sulla feature flow rate RMS: 21.3051
MAE sulla feature flow rate CrestFactor: 21.3148
MAE sulla feature all features: 21.3098

![](https://i.imgur.com/wvjnl6a.png)
![](https://i.imgur.com/LFDb4fe.png)

### linear

MAE sulla feature pressure diff Mean: 21.5413
MAE sulla feature pressure diff RMS: 21.646
MAE sulla feature pressure diff PeakValue: 21.8027
MAE sulla feature pressure diff ShapeFactor: 21.3144
MAE sulla feature flow rate Mean: 21.3143
MAE sulla feature flow rate RMS: 21.3143
MAE sulla feature flow rate CrestFactor: 21.316
MAE sulla feature all features: 21.3143

![](https://i.imgur.com/qQl6KxR.png)
![](https://i.imgur.com/0EKPQWE.png)

# Conclusioni

Visti i risultati possiamo affermare che nonostante gli indici sintentici come monotonicity, trendability e prognosability delle feature selezionate erano molto simili, le uniche feature significative che hanno portato a modelli efficaci sono state quelle ricavate a partire da *Pressure Diff*. 
Inoltre nonostante il MAE, calcolato sui singoli modelli, sia sempre simile (ad eccezione dei modelli ARIMA3 ARMA3 su particolato fine), nella pratica i modelli mostrano un comportamento diverso: più precisamente, i modelli ARIMA3 e ARMA3 generati sui dati relativi al particolato grande non sono in grado di ridurre l'errore a pochi istanti prima della rottura, mostrando quindi una grave inaffidabilità.

### 23/01/2021

Abbiamo separato le features raccolte nel dataset in un unica tabella in più tabelle: in questo modo ogni tabella conteneva le features riferite ad un solo item.

### 24/01/2021

Abbiamo calcolato una nuova grandezza basandosi su la *pressure_diff:*
$new\_pressure\_diff = -(pressure\_diff - 20)$
in questo modo abbiamo ottenuto una misura che inizia da circa 20 e nel tempo si riduce fino a 0.





![](https://i.imgur.com/s1ojfIv.png)
*l'immagine riporta la RUL calcolata dal modello allenato singolarmente sulle features individuate (ad eccenzione dell'ultimo che si allena su tutte le features)*

![](https://i.imgur.com/EWihhbz.png)

### 25/01/2021

![](https://i.imgur.com/wwJZz3d.png)

DA FARE: plot errore, label grafico, adattamento codice ai particolati piccoli

### Features con frame 1 sec
| Type | Feature | Monotonicity | Trendability | Prognosability |
| -------- | -------- | -------- | -------- | -------- |
| Pressure difference  | Mean   | 0.9628 | 0.9929 | 0.9178 |
| Pressure difference  | RMS | 0.9545 | 0.9920 | 0.9224 |
| Pressure difference  | Peak Value | 0.8851 | 0.9594 | 0.9935 |
| Pressure difference  | Shape Factor | 0.6981 | 0.9506 | 0.9683 |
| Flow Rate | Mean | 0.1081 | 0.8787 | 0.9460 |
| Flow Rate  | RMS | 0.1081 | 0.6929 | 0.8906 |
| Flow Rate  | Crest Factor | 0.1057 | 0.8283 | 0.9667 |

### TANTE Features con frame 10 sec

| Type | Feature | Monotonicity | Trendability | Prognosability |
| -------- | -------- | -------- | -------- | -------- |
| Pressure difference  | Mean   | 0.9628 | 0.9929 |	0.9178 |
| Pressure difference  | RMS   | 0.9545	| 0.9920 | 0.9224 |
| Pressure upstream | PeakValue  | 0.9198 | 0.9567 | 0.9799 |
| Pressure difference  | PeakValue   | 0.8851 | 0.9594 | 0.9935 |
| Pressure upstream  | Mean   | 0.8647 | 0.9922 | 0.9173 |
| Pressure upstream  | RMS   | 0.8583 | 0.9911 | 0.9209 |
| Pressure upstream  | ShapeFactor   | 0.7358 | 0.9102 | 0.9595 |
| Pressure difference  | ShapeFactor   | 0.6981	| 0.9506 | 0.9683 |
| Pressure upstream  | BandPower   | 0.6801 |	0.4971 | 0.3455 |
| Pressure difference  | BandPower   | 0.6479 | 0.0589 | 0.4639 |
| Pressure upstream  | ClearanceFactor  | 0.5399 | 0.9022 | 0.9146 |
| Pressure upstream  | ImpulseFactor  | 0.5311 | 0.9126 | 0.8944 |
| Pressure upstream  | CrestFactor  | 0.5057 | 0.9062 | 0.8609 |
| Pressure difference  | ClearanceFactor   | 0.4773 | 0.9218 | 0.9266 |
| Pressure difference  | ImpulseFactor	| 0.4606 | 0.9313 |	0.9062 |
| Pressure difference  | CrestFactor	| 0.4336 | 0.9276 | 0.8679 |
| Flow rate | PeakValue | 0.2339 | 0.0520 | 0.9372 |
| Pressure downstream | Std | 0.1611 | 0.012 | 0.2722 |
| Pressure downstream | ImpulseFactor | 0.1412 | 0.0011 | 0.4979 |
| Flow rate | Mean |0.1081 | 0.6929 | 0.8906 |
| Flow rate | RMS | 0.1081 | 0.6929 | 0.8906 |
| Flow rate | CrestFactor | 0.1057 | 0.8283 | 0.9667 |
