Esempi di Business Analytics/Manutenzione predittiva
Caricamento librerie
[modifica | modifica sorgente]library(survival)
library(dplyr)
Parte 1: Dati
[modifica | modifica sorgente]Reliability è un insieme di datasets contenuto nel package survival di R per la manutenzione predittiva. Il dataset capacitor in Reliability contiene dati di 8 condensatori in vetro da un esperimento fattoriale sulla loro vita in funzione della tensione e della temperatura di esercizio. Il test ad ogni combinazione è stato terminato dopo la quarta rottura. Le variabili contenute nel dataset sono:
- temperature: temperatura in gradi Celsius
- voltage: tensione applicata
- time: tempo alla rottura
- status: 1=rotto, 0=funzionante
Caricamento dati:
data(reliability)
Parte 2: Domanda di ricerca
[modifica | modifica sorgente]Si vuole predire quando si verificheranno i guasti dei condensatori in modo da fare una manutenzione predittiva
Parte 3: Modellizzazione
[modifica | modifica sorgente]Creo il modello regressivo di sopravvivenza, scegliendo come variabili dipendenti da predire time e status:
model<-survreg(Surv(time, status) ~ temperature + voltage, data=capacitor)
Le variabili temperatura e voltaggio hanno un p-value minore di 0.05 ed entrambe un valore di z negativo. Ciò implica che tali variabili hanno un effetto negativo per la sopravvivenza dei condensatori.
summary(model)
Call: survreg(formula = Surv(time, status) ~ temperature + voltage, data = capacitor) Value Std. Error z p (Intercept) 13.40702 2.29584 5.84 5.2e-09 temperature -0.02890 0.01290 -2.24 0.025 voltage -0.00591 0.00104 -5.68 1.3e-08 Log(scale) -1.01113 0.15234 -6.64 3.2e-11 Scale= 0.364 Weibull distribution Loglik(model)= -244.2 Loglik(intercept only)= -254.5 Chisq= 20.57 on 2 degrees of freedom, p= 3.4e-05 Number of Newton-Raphson Iterations: 5 n= 64
Utilizzando il modello predico il tempo di rottura dei condensatori e creo la variabile tempo rimanente come differenza tra il tempo previsto e il tempo reale:
previsione_rottura=predict(model, newdata=capacitor)
capacitor <- cbind(capacitor, previsione_rottura)
capacitor$tempo_rimanente <- capacitor$previsione_rottura-capacitor$time
Ordino i dati dei condensatori funzionanti (status=0), in base al tempo rimanente previsto, in modo da anticipare i guasti e fare una manutenzione predittiva:
capacitor %>%
filter(status==0) %>%
arrange(tempo_rimanente) %>%
select(1,2,4,5,6,7)
temperature voltage time status previsione_rottura tempo_rimanente 61 180 350 455 0 461.9196 6.919563 62 180 350 455 0 461.9196 6.919563 63 180 350 455 0 461.9196 6.919563 64 180 350 455 0 461.9196 6.919563 37 170 250 1090 0 1113.7849 23.784938 38 170 250 1090 0 1113.7849 23.784938 39 170 250 1090 0 1113.7849 23.784938 40 170 250 1090 0 1113.7849 23.784938 45 170 350 588 0 616.7337 28.733744 46 170 350 588 0 616.7337 28.733744 47 170 350 588 0 616.7337 28.733744 48 170 350 588 0 616.7337 28.733744 49 180 200 1087 0 1121.0418 34.041784 50 180 200 1087 0 1121.0418 34.041784 51 180 200 1087 0 1121.0418 34.041784 52 180 200 1087 0 1121.0418 34.041784 41 170 300 628 0 828.7996 200.799586 42 170 300 628 0 828.7996 200.799586 43 170 300 628 0 828.7996 200.799586 44 170 300 628 0 828.7996 200.799586 57 180 300 380 0 620.7521 240.752062 58 180 300 380 0 620.7521 240.752062 59 180 300 380 0 620.7521 240.752062 60 180 300 380 0 620.7521 240.752062 53 180 250 473 0 834.1996 361.199615 54 180 250 473 0 834.1996 361.199615 55 180 250 473 0 834.1996 361.199615 56 180 250 473 0 834.1996 361.199615 33 170 200 1105 0 1496.7634 391.763401 34 170 200 1105 0 1496.7634 391.763401 35 170 200 1105 0 1496.7634 391.763401 36 170 200 1105 0 1496.7634 391.763401