Machine Learning para manutenção preventiva de sistemas de sensoriamento

Geovani Porto
BIX Tecnologia
Published in
9 min readSep 8, 2021

Atualmente, com o avanço da tecnologia, a indústria tem se atualizado e se tornado cada vez mais autônoma. Para a automação das máquinas são necessários diversos sensores e, como suas vidas úteis são finitas, requerem manutenção e substituição ao decorrer do tempo. Como fazer a manutenção e substituição desses dispositivos de maneira eficiente e evitando maiores problemas e paradas na linha de produção? Neste artigo, vamos explorar dados de sensoriamento para identificar falhas e anormalidades nesses dispositivos.

De acordo com a McKinsey, a manutenção preditiva pode reduzir o tempo de inatividade da máquina de 30% a 50% e aumentar a vida útil da máquina de 20% a 40%.

Com as novas tecnologias que surgiram a partir da revolução 4.0, a internet das coisas tornou-se parte do nosso dia a dia, smart homes, máquinas automatizadas e machine learning são algumas das coisas provenientes dessa nova realidade.

A indústria também mudou, automatizando os processos e reduzindo a intervenção humana nas suas linhas de produção. No entanto, ainda se faz necessário a inspeção e supervisão dessa produção, mas como realizá-la de forma eficiente? A vida útil desses dispositivos é finita e se os dispositivos quebrados não forem identificados prontamente podem levar a maiores prejuízos como danos a alguma máquina da linha de produção ou risco à segurança dos colaboradores. Assim, o intuito desse artigo é criar uma forma de identificar pequenas falhas e irregularidades nesses equipamentos para que a manutenção preventiva possa ser mais objetiva e antecipada, prevenindo maiores prejuízos.

Por que realizar manutenção preventiva?

Entre as diversas razões algumas delas são:

  • O prolongamento da vida útil do equipamento;
  • Economia de material e mão de obra através de planejamento;
  • Minimização das falhas;
  • Manter a confiabilidade dos equipamentos;
  • Maior segurança de trabalho aos colaboradores;
  • Minimização das perdas de produção e atrasos
  • Redução de custos e riscos no geral.

O que é manutenção preventiva?

Manutenção preventiva é uma metodologia que tem como objetivo a prevenção de danos e possíveis falhas. Passou a ser uma prática necessária com a indústria 4.0.

A manutenção preventiva contribui diretamente com a eficiência do processo de produção no chão de fábrica evitando erros, atrasos e paradas no fluxo produtivo. Sua aplicação tem se tornado cada vez mais comum, já que funciona excelentemente em fábricas modernizadas.

Uma das maneiras de realizar esse processo é utilizando a manutenção preditiva, que é o que abordaremos neste artigo. Utilizando os dados dos sensores, criaremos um algoritmo de machine learning capaz de distinguir quais sensores possuem algum tipo de alteração no funcionamento, a fim de antecipar quais estão mais propensos à falha e, assim, realizar a manutenção corretiva.

Do banco de dados

Vamos utilizar dados de uma base de sensoriamento de ambiente do kaggle, criada em julho de 2020, veja mais aqui. A base utiliza três diferentes dispositivos, com um deles apresentando dados irregulares que, para esse artigo, foram considerados uma falha no funcionamento dos sensores e a partir dessas informações foi desenvolvido o modelo.

Vale ressaltar que como o objetivo desse banco de dados difere do deste artigo, algumas features não se enquadraram com o propósito e tiveram que ser removidas, mais a frente explicarei os motivos que levaram a isso.

Conhecendo o Dataset

Os dados que usaremos estão divididos em três diferentes dispositivos, para os fins deste artigo vamos utilizar o que apresenta uma variação incomum como um dispositivo defeituoso. Os demais dispositivos serão considerados como em pleno funcionamento e em diferentes ambientes.

Após a execução, o data frame terá realizado a média entre os valores dos dados que estavam presentes dentro do intervalo de tempo que especificamos. Basicamente o que fizemos foi dividir nosso dataframe em 424 partes que é o equivalente a um intervalo de 250 milissegundos. Para chegar até esse valor, dividiu-se a quantidade de linhas de cada um dos dispositivos por 250, uma vez que cada linha representa um milissegundo.

Assim, temos um data frame com 1272 linhas. O ponto positivo de termos feito isso é a menor quantidade de dados que utilizaremos. Como consequência, poderemos realizar operações com os dados de forma mais rápida. Além disso, ao realizarmos a média dos dados em um intervalo X, amenizamos os ruídos que estariam presentes nos dados.

Explorando os dados / Explorando as features do dataset

Vamos dar uma olhada em como ficou a variação de umidade nos diferentes dispositivos.

Para calcular a variância usada nos gráficos abaixo foi utilizado o seguinte trecho de código

Fonte: Autor
Fonte: Autor

Como é possível ver no gráfico acima, o dispositivo 1 ainda apresenta uma variação anormal em relação aos demais em relação a umidade, vamos olhar agora a temperatura:

Fonte: Autor
Fonte: Autor

Preparando os dados para o modelo

Agora que vimos que de fato o dispositivo 1 apresenta dados discrepantes, passamos a considerá-lo como um dispositivo irregular e vamos começar a trabalhar em uma forma de prever quando um outro dispositivo poderá apresentar uma situação semelhante a essa.

Primeiramente atribuímos ao dispositivo com problemas uma flag que usaremos no aprendizado supervisionado do nosso modelo de machine learning, mas antes substituiremos os nomes dos dispositivos para facilitar a identificação deles. Para isso, faremos:

Como resultado, temos uma coluna chamada “status” que diferencia dispositivos quebrados de dispositivos funcionais, em que:

  • quando status = 1, o dispositivo apresenta algum tipo de problema
  • quando status = 0, o dispositivo está em pleno funcionamento.

Agora que possuímos a nossa coluna alvo para a predição, vamos olhar como está a correlação entre os dados:

Análise da variável Luz no modelo

Olhando para a correlação entre as variáveis e o status de quebrado, podemos ver que a luz possui uma correlação muito significativa em comparação aos demais, isso acontece porque se olharmos para a distribuição dessa variável no dataframe podemos ver que há algo de diferente , assim como pode ser observado no gráfico abaixo:

Algumas hipóteses para este comportamento são:

  • Erro durante a coleta do dado;
  • Condições de coleta desconhecidas por nós.

Os valores positivos estão inteiramente e exclusivamente positivos no dispositivo 1, enquanto sempre está desligada nos demais dispositivos. Isso pode ter acontecido por uma falta de atenção do criador da base de dados ou apenas por um conflito de objetivos entre ele e o que estamos fazendo nesse artigo, ou seja, pode ser que essa informação desbalanceada não afetasse o resultado desejado por ele inicialmente.

De todo modo, para os fins deste arquivo, essa variável acabará por enviesar o modelo fazendo com que ele aprenda que se houver luz, o dispositivo estará com defeito, o que pode não ser verdade.

Então vamos remover a coluna de luz do nosso dataset, uma vez que distribuir aleatoriamente os valores de luz nos demais dispositivos não seria tão interessante. Além disso, se olharmos para a coluna “motion” ela possui uma correlação baixíssima com todas as demais variáveis, mostrando que a presença ou não dela naquela situação não influencia nos demais valores, portanto vamos removê-la juntamente com a coluna de luz. Para isso, faremos:

Feature Engineering

Os dados dos sensores de “lpg”,”co” e “smoke” apresentam uma correlação de 1 que quer dizer que seus valores são iguais ou extremamente proporcionais, porém em contrapartida, sua correlação com nossa variável alvo é baixa. Então, para reduzir a quantidade de colunas não desejáveis, iremos agrupar esses três valores em uma só coluna chamada “gases”. Faremos:

Além de todas essas reduções que fizemos no nosso data frame, algumas variáveis apresentam um potencial interessante, como, por exemplo, a umidade e a temperatura. Como havíamos visto anteriormente, nossos sensores apresentam uma grande variação de umidade e temperatura entre si, o que se reflete na correlação dos dados. Relacionando a umidade com a temperatura conseguimos abstrair que elas possuem uma certa correlação. Por que não tentar relacionar as duas? Para isso, faremos:

Mas se olharmos bem, podemos ver que a relação entre temperatura e a nossa variável alvo é bem maior do que a da umidade, então, iremos ajustar os pesos dessa relação e usar a temperatura ao quadrado. Assim:

Por último, já que esses dados serão enviados para o nosso modelo, não podemos manter as colunas “ts” ou “device” uma vez que não queremos que as informações do nosso modelo sejam influenciadas por quando as informações foram obtidas ou por que dispositivo está criando elas. Por isso, removeremos também essas duas colunas. Para isso:

Agora que realizamos várias alterações nos nossos dados vamos olhar novamente a correlação entre as variáveis.

Fonte: Autor

Podemos ver que mesmo tendo agrupado as colunas dos gases eles ainda apresentam uma correlação baixa, mas em compensação a coluna apresenta uma correlação de 0.87.

O modelo

Primeiramente separamos nossa variável alvo do restante do data frame:

Em seguida, iremos dividir o nossos dados em treino e teste usando o train_teste_split do sklearn:

Agora que já temos divididos os nossos dados de treino e teste, iremos definir e treinar o nosso modelo. Nesse caso, utilizaremos a regressão logística do Sklearn:

Com o modelo treinado,podemos testá-lo utilizando o modelo de teste. Para melhor visualização, vamos ver a matriz de confusão do resultado.

Em análise preditiva, a matriz de confusão é uma tabela que relata o número de falsos positivos, falsos negativos, verdadeiros positivos e verdadeiros negativos.

Com isso, conseguimos ter uma visão mais detalhada do nosso modelo, o que pode vir a ser útil para gerar insights de como melhorar a predição. Para isso usaremos o código abaixo:

que retorna o gráfico:

Fonte: Autor

Essa matriz de confusão nos mostra que o nosso modelo teve um aproveitamento muito bom com o conjunto de dados, uma acurácia de 0.997. e apenas um dado incorreto nos falsos positivos.

Contudo, mesmo que o resultado tenha sido muito bom, muitas vezes eles não representam o desempenho do modelo com dados reais, uma vez que o modelo pode “decorar” os dados de treinamento ou então se viciar em padrões exclusivos dessa coleta de dados, o nome dado a isso é overfitting, veja mais.

Então, para termos certeza de que o resultado do nosso modelo é confiável usaremos o método de validação cruzada, veja mais. Para isso, faremos:

A acurácia média utilizando a validação cruzada com 5 folders foi de 0.995, que ainda é um valor muito bom. Para visualizarmos melhor qual foi resultado de cada uma das divisões usaremos o gráfico:

Fonte: Autor

Podemos ver que quatro dos cinco tiveram uma taxa de acerto de 100% e em um deles a taxa caiu para aproximadamente 97%, o que nos mostra que os resultados anteriores do nosso modelo estavam corretos.

Vale ressaltar que mesmo com a validação cruzada só poderíamos ter certeza do desempenho do nosso modelo se utilizarmos dados do mundo real para realizar a validação dos resultados. Então, a partir dos resultados que obtivemos, podemos aplicá-lo em outros dados de sensoriamento ou testar sua eficiência em dados reais, para assim comprovar de fato sua eficiência.

Conclusões

Neste artigo aprendemos:

  • O que mudou na indústria com a revolução 4.0;
  • O que é manutenção preditiva;
  • O porquê fazer manutenção preditiva;
  • Como fazer a reamostragem de dados de sensores;
  • Como analisar dados de sensores;
  • Como lidar com features enviesadas;
  • Como selecionar features para o modelo;
  • Como criar novas features para o modelo utilizando correlação;
  • Como usar a matriz de confusão;
  • Como utilizar validação cruzada para validar resultados.

Levando em consideração os resultados obtidos com o modelo podemos dizer que conseguimos com sucesso identificar o comportamento incomum dos sensores em uma linha de produção podendo, desse modo, realizar a manutenção preventiva e planejada dos dispositivos, evitando assim despesas indesejadas e atrasos na linha de produção.

Gostou deste conteúdo? Quer entender como a ciência de dados pode ajudar ainda mais o seu negócio? Entre em contato conosco para um bate-papo, vamos adorar te ajudar!

Quer ser aprofundar no código usado no artigo acima? acesse o notebook completo no github.

--

--