Situação
Estou trabalhando em um problema em que estou usando os dados do sensor para prever a falha da máquina antes que ela ocorra e preciso de alguns conselhos sobre quais métodos explorar.
Especificamente, quero identificar indicações de falhas iminentes antes que elas realmente ocorram. Idealmente, isso seria com prazo de entrega suficiente para que pudéssemos consertar o que acontecesse antes que causasse falha.
Problema
O obstáculo conceitual em que estou é que sei que poderia ajustar vários modelos de classificação (regressão logística, árvore de decisão, vizinho mais próximo etc.) aos dados para identificar a probabilidade de falha, dados parâmetros específicos naquele momento. No entanto, não consigo descobrir como identificar a indicação de uma falha futura com tempo suficiente para realmente fazer algo a respeito.
Possíveis abordagens
Eu estou familiarizado com a Análise de Sobrevivência, mas, como não tenho dados de várias máquinas, e não é como se, após um reparo, a máquina estivesse de volta a 100%, não acho que isso se encaixe necessariamente.
Também pensei em dedicar o tempo em que uma falha ocorre, alterando-a de volta 1 hora e ver quão preciso eu posso prever esse ponto. Se eu puder, mova o alvo de volta mais uma hora e veja quanto tempo de lead posso prever com confiança. Mas não tenho certeza se é apropriado fazer isso.
Dado disponível
Os dados que tenho são registrados de uma máquina durante um período de 1 ano. Existem aproximadamente 60 sensores que são gravados a cada dois minutos. Esses sensores medem variáveis como as temperaturas dos diferentes componentes que compõem a máquina (incluindo a configuração do termostato versus a temperatura real), a velocidade em que a máquina está funcionando, pressões de vapor em toda a máquina, velocidades do ventilador, se a máquina está ou não funcionando , etc.
Além das leituras do sensor, aprimorei o conjunto de dados para incluir também o motivo pelo qual a máquina não está funcionando (por exemplo: mudança de turno, manutenção preventiva, falha). Incluí um exemplo resumido de como são os dados na parte inferior deste post. Alterei o exemplo para capturar parte da variedade capturada em todo o conjunto de dados. Na realidade, quando a máquina para de funcionar, ela fica inativa por 2 minutos a 2 dias, dependendo do motivo. Além disso, as variáveis não mudam necessariamente tão rapidamente quanto no exemplo abaixo, mas eu queria fornecer alguma variedade.
+-----------------+----------+-------------+------------+------------+-------+-------+-----+--------------------------+------------+
| Datetime | CircFan | CircFanAct | EntrySpeed | ExhaustFan | Speed | Temp1 | Run | Reason | TimeBtwRun |
+-----------------+----------+-------------+------------+------------+-------+-------+-----+--------------------------+------------+
| 2009-10-19 0:00 | 100 | 600 | 461 | 40 | 45 | 1126 | 1 | | NA |
| 2009-10-19 0:02 | 100 | 600 | 0 | 39 | 45 | 1120 | 0 | shift change | 0:00 |
| 2009-10-19 0:04 | 100 | 600 | 0 | 39 | 45 | 1118 | 0 | shift change | 0:02 |
| 2009-10-19 0:06 | 95 | 600 | 461 | 39 | 45 | 1119 | 1 | | 0:00 |
| 2009-10-19 0:08 | 95 | 599 | 461 | 40 | 45 | 1120 | 1 | | 0:02 |
| 2009-10-19 0:10 | 95 | 598 | 461 | 40 | 45 | 1120 | 1 | | 0:04 |
| 2009-10-19 0:12 | 95 | 597 | 461 | 40 | 45 | 1130 | 1 | | 0:06 |
| 2009-10-19 0:14 | 100 | 597 | 0 | 40 | 45 | 699 | 0 | failure | 0:00 |
| 2009-10-19 0:16 | 100 | 597 | 0 | 40 | 45 | 659 | 0 | failure | 0:02 |
| 2009-10-19 0:18 | 100 | 597 | 0 | 40 | 45 | 640 | 0 | failure | 0:04 |
| 2009-10-19 0:20 | 100 | 600 | 461 | 40 | 45 | 1145 | 1 | | 0:00 |
| 2009-10-19 0:22 | 100 | 600 | 461 | 40 | 45 | 1144 | 1 | | 0:02 |
| 2009-10-19 0:24 | 80 | 600 | 461 | 40 | 45 | 1138 | 1 | | 0:04 |
| 2009-10-19 0:26 | 80 | 600 | 461 | 41 | 45 | 1133 | 1 | | 0:06 |
| 2009-10-19 0:28 | 80 | 600 | 461 | 41 | 45 | 1134 | 1 | | 0:08 |
| 2009-10-19 0:30 | 100 | 600 | 461 | 41 | 45 | 1134 | 1 | | 0:10 |
| 2009-10-19 0:31 | 100 | 600 | 461 | 41 | 45 | 1133 | 1 | | 0:11 |
| 2009-10-19 0:34 | 100 | 600 | 461 | 40 | 45 | 1140 | 1 | | 0:13 |
| 2009-10-19 0:36 | 100 | 600 | 100 | 40 | 45 | 788 | 0 | preventative maintenance | 0:00 |
| 2009-10-19 0:38 | 100 | 600 | 100 | 40 | 45 | 769 | 0 | preventative maintenance | 0:02 |
+-----------------+----------+-------------+------------+------------+-------+-------+-----+--------------------------+------------+
Respostas:
Essa é uma pergunta bem feita e interessante.
Eu tenho algumas questões :
Eu acho que a maneira natural de estudar esse problema seria usar a análise de sobrevivência. E estar familiarizado com isso será mais!
O que eu faria (apesar de não estar ciente de todas as especificidades do seu problema):
Calcule sua variável de tempo de interesse (y ) e ocorrência da variável de evento (delta ): nesta etapa, você pode:
Ajuste um modelo Cox nesses dados:
Então, para usar seu modelo (e veja se você pode prever que uma falha ocorrerá no futuro (tempo suficiente antes)), você deve usar seu modelo Cox:
Embora a maneira natural de estudar o seu problema seja usar a análise de sobrevivência, você pode usar métodos de classificação, especialmente se o tempo antes da falha for curto (dessa forma, você está analisando dados passados e não será perturbado pela censura). Nesse caso, acho que a abordagem geral seria bastante semelhante.
Dê-nos um feedback sobre o seu problema!
fonte
Eu trabalho em problemas semelhantes.
Sugiro modelar isso como uma tarefa de classificação: Rotule os dados como ... sistemas / horários em que o sistema está fechado antes de uma falha ... sistemas / horários em que o sistema está íntegro
Então você precisa ajustar um modelo para fazer essa classificação. Provavelmente você precisa agregar os dados primeiro em intervalos.
fonte