Esempi di Business Analytics/Manutenzione predittiva

Caricamento librerie

modifica
library(survival)
library(dplyr)

Parte 1: Dati

modifica

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

Si vuole predire quando si verificheranno i guasti dei condensatori in modo da fare una manutenzione predittiva

Parte 3: Modellizzazione

modifica

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