Você está na página 1de 108

UNIVERSIDADE ESTADUAL DE CAMPINAS

Faculdade de Engenharia Mecânica

MAURICIO BARRIOS CASTELLANOS

Monitoramento de falhas operacionais em


bombas centrífugas multiestágios usando
Árvores de Decisão

CAMPINAS
2019
MAURICIO BARRIOS CASTELLANOS

Monitoramento de falhas operacionais em


bombas centrífugas multiestágios usando
Árvores de Decisão

Dissertação de Mestrado apresentada à Faculdade


de Engenharia Mecânica da Universidade Estadual
de Campinas como parte dos requisitos exigidos
para obtenção do título de Mestre em Engenharia
Mecânica, na Área de Mecânica dos Sólidos e Pro-
jeto Mecânico.

Orientador: Prof. Dr. Alberto Luiz Serpa

ESTE EXEMPLAR CORRESPONDE À VERSÃO FINAL


DA DISSERTAÇÃO DEFENDIDA PELO ALUNO MAU-
RICIO BARRIOS CASTELLANOS, E ORIENTADO PELO
PROF. DR. ALBERTO LUIZ SERPA

CAMPINAS
2019
Ficha catalográfica
Universidade Estadual de Campinas
Biblioteca da Área de Engenharia e Arquitetura
Luciana Pietrosanto Milla - CRB 8/8129

Barrios Castellanos, Mauricio, 1989-


B277m BarMonitoramento de falhas operacionais em bombas centrífugas multiestágios
usando Árvores de Decisão / Mauricio Barrios Castellanos. – Campinas, SP :
[s.n.], 2019.

BarOrientador: Alberto Luiz Serpa.


BarDissertação (mestrado) – Universidade Estadual de Campinas, Faculdade
de Engenharia Mecânica.

Bar1. Bomba centrífuga submersa. 2. Aprendizado de máquina. 3. Escoamento


bifásico. 4. Árvores de decisão. I. Serpa, Alberto Luiz, 1967-. II. Universidade
Estadual de Campinas. Faculdade de Engenharia Mecânica. III. Título.

Informações para Biblioteca Digital

Título em outro idioma: Monitoring of operational failures in multistage centrífugal pumps


Palavras-chave em inglês:
Submersible centrifugal pump
Machine learning
Two-phase flow
Decision Tree
Área de concentração: Mecânica dos Sólidos e Projeto Mecânico
Titulação: Mestre em Engenharia Mecânica
Banca examinadora:
Alberto Luiz Serpa [Orientador]
Daniel Augusto Pereira
Valdir Estevam
Data de defesa: 17-04-2019
Programa de Pós-Graduação: Engenharia Mecânica

Identificação e informações acadêmicas do(a) aluno(a)


- ORCID do autor: https://orcid.org/0000-0003-4512-0965
- Currículo Lattes do autor: http://lattes.cnpq.br/3153450226944220

Powered by TCPDF (www.tcpdf.org)


UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECÂNICA
COMISSÃO DE PÓS-GRADUAÇÃO EM ENGENHARIA MECÂNICA
DEPARTAMENTO DE MECÂNICA COMPUTACIONAL

DISSERTAÇÃO DE MESTRADO ACADÊMICO

Monitoramento de falhas operacionais em


bombas centrífugas multiestágios usando
Árvores de Decisão
Autor: Mauricio Barrios Castellanos

Orientador: Prof. Dr. Alberto Luiz Serpa

A Banca Examinadora composta pelos membros abaixo aprovou esta Dissertação:

Prof. Dr. Alberto Luiz Serpa


Faculdade de Engenharia Mecânica - UNICAMP

Prof. Dr. Daniel Augusto Pereira


Departamento de Automática - UFLA

Prof. Dr. Valdir Estevam


Faculdade de Engenharia Mecânica - UNICAMP

A ata da defesa com as respectivas assinaturas dos membros encontra-se no processo de vida
acadêmica do aluno.

Campinas, 17 de abril de 2019.


Dedicatória

Dedico este trabajo a mi esposa Edna, a mis padres Romelia y Hernan, a mis hermanos
Carlos y Diego, quienes me dieran la fuerza, la perspectiva y la confianza para continuar.
Agradecimentos

Eu gostaria de expressar meus agradecimentos a meu orientador Prof. Dr. Alberto Luiz Serpa
pelo apoio contínuo, paciência, conhecimento e motivação. Pela confiança e a oportunidade de
trabalhar com ele no desenvolvimento deste mestrado.

Aos membros das bancas de qualificação e de defesa, Prof. Dr. Valdir Estevam, Prof. Dr. Hélio
Fiori de Castro e Prof. Dr. Daniel Augusto Pereira pelas sugestões realizadas a esse trabalho.

Aos companheiros de laboratório Luis Ruiz, Camilo Ariza, Felipe Barrera, Felipe de Castro,
Mauricio de Melo, Carolina Corredor e Giovanna Zanoni, por seu conhecimento, apoio e ami-
zade.

A todos os companheiros e amigos que conheci no Brasil, aqueles que me acolheram nessas
terras, Ao Lucho, Caro, Mafe, Cami, Pipe, Juli, Diego, Laura, Marce, German, Cata e Lucho
Izquierdo.

Ao Centro de Estudo de Petróleo (CEPETRO) pela oportunidade de ter realizado os experi-


mentos deste projeto de pesquisa nas instalações. Aos membros do grupo Artifical Lift & Flow
Assurance (ALFA), especialmente a Cristhian Porcel Estrada e ao Dr. Jorge Luiz Biazussi pela
ajuda no desenvolvimento experimental.

À Queiroz Galvão E&P e ao FAEPEX da UNICAMP pelo indispensável apoio financeiro.


Não é na ciência que está a felicidade,
mas na aquisição da ciência.

Edgar Allan Poe


Resumo

O monitoramento de bombas centrífugas é essencial para o adequado funcionamento de diversas


aplicações industriais. A confiabilidade dos sistemas de elevação artificial de petróleo depende subs-
tancialmente do desempenho das bombas centrífugas submersíveis (BCS). Essas bombas podem operar
sujeitas a condições severas, como escoamento viscoso e multifásico. Nos últimos anos, as tecnologias
de monitoramento em tempo real baseadas em algoritmos de aprendizado automático ganharam força
devido à capacidade de aproveitar os dados históricos do maquinário para previsões de eventos futuros.
Muitos tipos de falhas incipientes estão relacionadas a mudanças no fluido ou maquinário externo asso-
ciados ao processo. O presente trabalho propõe a utilização de Árvores de Decisão (AD) e uma estrutura
particular de Árvores de Decisão nomeada aqui como Cadeia de Árvores de Decisão (CAD) para a de-
tecção e classificação de falhas. A metodologia projetada na CAD pretende melhorar a distribuição na
classificação mantendo relações simplificadas entre as variáveis monitoradas e as falhas. Falhas operaci-
onais são simuladas, monitoradas e rotuladas em uma bomba centrífuga multiestágio em dois diferente
cenários, apenas com óleo e com uma mistura de petróleo e nitrogênio, considerando os casos de fecha-
mento abrupto da válvula choke (CV), diminuição da pressão de entrada (DIP), aumento da viscosidade
do fluido (VI) para o caso monofásico, e no caso de escoamento bifásico incluindo o aumento da fração
mássica de gás (GI). Experimentos foram realizados para rotular e selecionar as variáveis monitoradas
que melhor representam as falhas. As variáveis e suas variações no tempo foram usados como entradas
para os classificadores supervisionados. Os resultados obtidos usando AD e CAD são comparados em
termos da exatidão e do erro na classificação, sendo a CAD aquela que obteve melhores resultados na
determinação do tipo de falha. Os algoritmos implementados detectaram entre 80 e 90% das falhas cor-
retamente. A classificação foi avaliada através da matriz de confusão, obtendo-se acertos entre 75 e 82%.
As árvores de decisão testadas possuem potencial de aplicação na detecção de falhas em BCS devido a
sua capacidade de detecção, classificação e interpretabilidade.

Palavras-chave: Bomba centrífuga submersa, Aprendizado de máquina, Escoamento bifásico, Árvores


de decisão.
Abstract

The monitoring of centrifugal pumps is essential for the suitable operation of several industrial ap-
plications. The reliability of the petroleum artificial lifting systems depends substantially on the perfor-
mance of electrical submersible centrifugal pumps (ESP). These pumps can operate subjected to severe
operating conditions like viscous and multi-phase flow. In recent years, real-time technologies based on
machine learning algorithms have gained visibility due to the capability to take advantage of the machi-
nery historical data for future event predictions. Many kinds of incipient faults are related to changes in
the fluid or external machinery associated with the process. This document proposes the use of decision
trees (AD) and a particular decision tree structure named here as a decision tree chain (CAD) for the
detection and classification of failures. The methodology proposed in the CAD intends to improve the
classification distribution maintaining simplified relationships between monitored variables and failures.
Operational failures are simulated, monitored and labeled in a multistage centrifugal pump operating in
two different scenarios, in one-phase petroleum regime and with a mixture of petroleum and nitrogen,
considering as faults the abruptly close of choke valve (CV), the decreasing of input pressure (DIP), the
increasing of fluid viscosity (VI) one-phase flow, and for two-phase case including the increasing of gas
flow rate (GI). Experiments were performed to label and to select the features that strongly represent the
faults. The features and its time variations were used as inputs to the supervised classifiers. The results
obtained using AD and CAD are compared in terms of accuracy and misclassification error getting bet-
ter results in determining the fault kind for the CAD structure. The implemented algorithms correctly
detected 80 to 90% of the faults. The classification was measured using the confusion matrix metrics,
obtaining an accuracy between 75 and 82%. The decision trees evaluated have potencial to detect faults
in the BCS applications due to its detection, classification and interpretability capability.

Keywords: Electrical submersible pump, Machine learning, Two-phase flow, Decision Tree.
Lista de Figuras

1.1 Máxima capacidade de bombeamento de petróleo em função da profundidade do reser-


vatório, adaptado de [1]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.2 Fatores que influenciam a operação das BCS. . . . . . . . . . . . . . . . . . . . . . . . 20
1.3 Processo de detecção e classificação proposto. . . . . . . . . . . . . . . . . . . . . . . . 21

3.1 Escoamento de óleo em uma bomba de difusor [1]. . . . . . . . . . . . . . . . . . . . . 27


3.2 Exemplo de curvas de desempenho monofásico das BCS [27]. . . . . . . . . . . . . . . 28
3.3 Variação da elevação e vazão volumétrica, adaptado de [1]. . . . . . . . . . . . . . . . . 29
3.4 Tipo de impulsor dependendo da velocidade específica, adaptado de [28]. . . . . . . . . 30
3.5 Limites de surging e gas-locking. Adaptado de [29]. . . . . . . . . . . . . . . . . . . . . 31
3.6 Instalação convencional de uma BCS, adaptado de [1]. . . . . . . . . . . . . . . . . . . 33
3.7 Desempenho das BCS em escoamento bifásico, adaptado de [30]. . . . . . . . . . . . . 34
3.8 Curvas de desempenho de uma bomba SN3600, adaptado de [1]. . . . . . . . . . . . . . 35
3.9 Efeito da viscosidade em escoamento monofásico, adaptado de [31]. . . . . . . . . . . . 36

4.1 Árvores de Decisão qualitativa, adaptado de [8]. . . . . . . . . . . . . . . . . . . . . . . 40


4.2 Dados classificados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.3 Árvores de Decisão baseada em dados. . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.4 Árvore de Decisão expandida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.5 Dados classificados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

5.1 Layout do banco de testes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49


5.2 Circuito de testes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.3 Distribuição dos dados dos testes monofásicos. . . . . . . . . . . . . . . . . . . . . . . 52
5.4 Distribuição dos dados dos testes bifásicos. . . . . . . . . . . . . . . . . . . . . . . . . 54
5.5 Válvula choke. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

6.1 Fechamento da válvula choke (CV). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59


6.2 Rotulação do fechamento da válvula choke (CV) com sw. . . . . . . . . . . . . . . . . . 59
6.3 Rotulação do fechamento da válvula choke (CV) com s. . . . . . . . . . . . . . . . . . . 60
6.4 Aumento da fração de gás (GI). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.5 Rotulação do aumento da fração de gás (GI). . . . . . . . . . . . . . . . . . . . . . . . . 61

7.1 Distribuição dos experimentos em X e y. . . . . . . . . . . . . . . . . . . . . . . . . . 63


7.2 Estrutura de uma CAD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
7.3 Exemplo de uma matriz de confusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
8.1 Tendência de sts para a AD em escoamento monofásico. . . . . . . . . . . . . . . . . . 69
8.2 Tendência de cmmean para a AD em escoamento monofásico. . . . . . . . . . . . . . . 70
8.3 Tendência de cmmin para a AD em escoamento monofásico. . . . . . . . . . . . . . . . 70
8.4 Tendência de sts para a árvore de refinamento da CAD em escoamento monofásico. . . . 72
8.5 Tendência de cmmean para a árvore de refinamento da CAD em escoamento monofásico. 73
8.6 Tendência de cmmin para a árvore de refinamento da CAD em escoamento monofásico. . 73
8.7 Tabela de confusão para a AD em escoamento monofásico. . . . . . . . . . . . . . . . . 74
8.8 Matriz de confusão para a AD em escoamento monofásico. . . . . . . . . . . . . . . . . 75
8.9 Matriz de confusão para a CAD em escoamento monofásico. . . . . . . . . . . . . . . . 75
8.10 Árvore de refinamento da CAD em escoamento monofásico. . . . . . . . . . . . . . . . 77
8.11 Importância das variáveis da árvore de refinamento da CAD em escoamento monofásico. 77
8.12 Tendência de sts para a árvore de classificação da CAD em escoamento bifásico. . . . . 78
8.13 Tendência de cmmean para a árvore de refinamento da CAD em escoamento bifásico. . . 79
8.14 Tabela de confusão para a AD em escoamento bifásico. . . . . . . . . . . . . . . . . . . 80
8.15 Matriz de confusão para a AD em escoamento bifásico. . . . . . . . . . . . . . . . . . . 81
8.16 Matriz de confusão para a CAD em escoamento bifásico. . . . . . . . . . . . . . . . . . 81
8.17 Árvore de refinamento da CAD em escoamento bifásico. . . . . . . . . . . . . . . . . . 82
8.18 Importância das variáveis na árvore de refinamento da CAD para escoamento bifásico. . 83
Lista de Tabelas

4.1 Dados da Árvore de Decisão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44


4.2 Divisões da Árvore de Decisão expandida. . . . . . . . . . . . . . . . . . . . . . . . . . 46

5.1 Especificações dos equipamentos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50


5.2 Especificações dos sensores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.3 Distribuição dos experimentos em escoamento monofásico. . . . . . . . . . . . . . . . . 52
5.4 Distribuição dos experimentos em escoamento bifásico. . . . . . . . . . . . . . . . . . . 53

6.1 Comportamento das variáveis do sistema. . . . . . . . . . . . . . . . . . . . . . . . . . 57

7.1 Distribuição dos experimentos de escoamento monofásico. . . . . . . . . . . . . . . . . 66


7.2 Distribuição dos experimentos de escoamento bifásico. . . . . . . . . . . . . . . . . . . 66

8.1 Máximos de sts, cmmean e cmmin para a AD na validação em escoamento monofásico. 69


8.2 Máximos de sts, cmmean e cmmin para a árvore de refinamento da CAD em escoamento
monofásico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
8.3 Parâmetros da CAD para escoamento monofásico. . . . . . . . . . . . . . . . . . . . . . 74
8.4 Comparação AD-CAD para escoamento monofásico. . . . . . . . . . . . . . . . . . . . 76
8.5 Parâmetros da CAD para escoamento bifásico. . . . . . . . . . . . . . . . . . . . . . . . 80
8.6 Comparação AD-CAD para escoamento bifásico. . . . . . . . . . . . . . . . . . . . . . 82
Lista de Abreviaturas e Siglas

Letras Romanas

l Vetor de rótulos

X Matriz de características ou variáveis monitoradas

x Vetor de características ou variáveis monitoradas

y Vetor objetivo (condição do sistema)

ṁ vazão mássica

h̄ Amostras no nó

k Quantidade de amostras para cálculo de média móvel

m Número total de amostras

n Número total de características selecionadas

p Pressão

s Variância remanescente

sw Variância média

T Temperatura

x{raw} Variável bruta antes de realizar a média móvel

H Altura de pressão da bomba

q Vazão volumétrica

W Potência

Letras Gregas

δx/δt Derivada discreta da variável x

` Tamanho do vetor de rotulos l

γ Valor da variável para dividir dados no nó

= Critério de impureza
λ Vetor de pesos por falha

Φ Nó da árvore

φ Ponto de divisão do nó

θ Variável que denota probabilidade

α Fração mássica de gás

η Eficiência

Ω Velocidade específica

ω Velocidade angular

τ Torque

Superescritos

K Grupos para a validação cruzada

j Grupo selecionado na validação cruzada

Subescritos

g Subíndice relacionado ao gás

i Posição em vetor ou matriz

in Subíndice relacionado à entrada da bomba

j Posição em vetor ou matriz

l Subíndice relacionado ao líquido

lef t Nó à esquerda do nó atual

mean média aritmética

out Subíndice relacionado à saída da bomba

right Nó à dereita do nó atual

T est Dados para teste

T rain Dados de treinamento

V al Dados para validação


Acrônimos / Abreviações

mln Máximo número de folhas (Max. leaf nodes)

AD Árvore de Decisão

BCS Bombas centrífugas submersíveis

BEP Ponto de melhore eficiência (Best Efficient Point)

bpd Barris por dia

CAD Cadeia de Árvores de Decisão

CART Árvores de classificação e regressão (Classification and regression trees)

cm Matriz de confusão (valor da diagonal principal)

CV Fechamento da válvula Choke (Closed valve)

DIP Diminuição da pressão de entrada da bomba (Decreasing of input pressure)

GI Aumento da fração de gás (gas increasing)

sts Exatidão geral, total de acertos com relação ao total de testes

VI Aumento da viscosidade do líquido (viscosity increasing)


Sumário

1 INTRODUÇÃO 18
1.1 Motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.3 Organização do trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

2 REVISÃO DA LITERATURA 23
2.1 Monitoramento da condição de operação em BCS . . . . . . . . . . . . . . . . . . . . . 23
2.2 Aprendizado automático na detecção de falhas . . . . . . . . . . . . . . . . . . . . . . . 24
2.3 Monitoramento da condição de operação em BCS com aprendizado automático . . . . . 25

3 BOMBAS CENTRÍFUGAS SUBMERSAS 26


3.1 Princípios de funcionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.1.1 Escoamento monofásico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.1.2 Escoamento bifásico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2 Condições de operação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.2.1 Influência da quantidade de gás . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.2 Influência da velocidade angular . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2.3 Influência da pressão de sucção . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.2.4 Influência da viscosidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3 Monitoramento da condição de operação . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.3.1 Problemas típicos em BCS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3.2 Causas gerais dos problemas em BCS . . . . . . . . . . . . . . . . . . . . . . . 37

4 ÁRVORES DE DECISÃO 40
4.1 Construção das Árvores de Decisão . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.2 Critérios de divisão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.2.1 Índice Gini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.2.2 Entropia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.3 Critérios de parada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

5 DESENVOLVIMENTO EXPERIMENTAL 48
5.1 Circuito de testes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.2 Procedimento experimental . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.2.1 Fechamento da válvula choke (CV) . . . . . . . . . . . . . . . . . . . . . . . . 54
5.2.2 Diminuição da pressão de entrada (DIP) . . . . . . . . . . . . . . . . . . . . . . 55
5.2.3 Aumento da viscosidade do fluido (VI) . . . . . . . . . . . . . . . . . . . . . . 55
5.2.4 Aumento da fracção de gás (GI) . . . . . . . . . . . . . . . . . . . . . . . . . . 55

6 PROJETO DOS DADOS DE ENTRADA 56


6.1 Seleção das variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6.2 Rotulação dos dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6.2.1 Fechamento da válvula choke (CV) . . . . . . . . . . . . . . . . . . . . . . . . 58
6.2.2 Diminuição da pressão de entrada (DIP) . . . . . . . . . . . . . . . . . . . . . . 60
6.2.3 Aumento da viscosidade do fluido (VI) . . . . . . . . . . . . . . . . . . . . . . 60
6.2.4 Aumento da fracção de gás (GI) . . . . . . . . . . . . . . . . . . . . . . . . . . 60

7 IMPLEMENTAÇÃO DA ÁRVORE DE DECISÃO 62


7.1 Árvore de Decisão (AD) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7.2 Cadeia de Árvores de Decisão (CAD) . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
7.3 Máximo número de folhas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

8 RESULTADOS E DISCUSSÕES 68
8.1 Escoamento monofásico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
8.1.1 Árvore de Decisão AD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
8.1.2 Cadeia de Árvores de Decisão CAD . . . . . . . . . . . . . . . . . . . . . . . . 71
8.1.3 Comparação AD e CAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
8.2 Escoamento bifásico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
8.2.1 Árvore de Decisão AD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
8.2.2 Cadeia de Árvores de Decisão CAD . . . . . . . . . . . . . . . . . . . . . . . . 79
8.2.3 Comparação AD e CAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

9 CONCLUSÕES 84

Bibliografia 87

Apêndice A Códigos de Programação 91


A.1 Rotulação dos Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
A.2 Implementação das Árvores de Decisão . . . . . . . . . . . . . . . . . . . . . . . . . . 92
A.3 Funções e Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
18

1 INTRODUÇÃO

As bombas centrífugas multiestágio submetidas ao regime de escoamento bifásico gás-líquido de-


sempenham uma tarefa essencial em muitas aplicações críticas na indústria petrolífera, química, nuclear
e geotérmica. No entanto, devido ao seu princípio operacional, em escoamentos monofásico e com
fluidos de baixa viscosidade pode ser obtido seu melhor desempenho [1, 2]. A utilização deste tipo de
bomba sob escoamento multifásico de alta viscosidade é amplamente difundida na indústria do petróleo
como uma tecnologia de elevação artificial, quando os reservatórios não têm energia suficiente para pro-
duzir a vazão desejada. Os equipamentos usados para este fim são conhecidos como bombas centrífugas
submersíveis (BCS).
Atualmente, o monitoramento da condição de operação em sistemas de elevação artificiais baseados
em BCS tornou-se um fator determinante para a produção de hidrocarbonetos, pois a vida útil e a produ-
tividade do poço têm uma correlação direta com o bom funcionamento do sistema de elevação artificial.
Vários fatores relacionados às condições do poço, o projeto e a instalação podem induzir falhas nesse
equipamento. A formação de gás (indicada aqui como GI) causa operação instável (surging) e bloqueio
com gás (gas locking). Fluidos de alta viscosidade (indicados aqui como VI) fazem com que a eficiência
da bomba diminua e a perda de pressão na tubulação aumente devido ao maior atrito [1]. O fechamento
inesperado da válvula choke (indicado aqui como CV) é um problema predominante da instalação que
pode induzir perda de controle na operação. A diminuição da pressão de entrada (indicada aqui como
DIP) evidencia um declínio da produtividade de um poço.
Este trabalho tem seu foco na detecção e identificação de falhas operacionais em sistemas de BCS.
Define-se aqui falhas operacionais como as mudanças de comportamento que afetam o desempenho do
sistema sem causar uma interrupção permanente da capacidade do equipamento em executar a função
requerida. A detecção é o processo no qual se determina se o sistema está operando fora das condi-
ções normais, ou seja, se está acontecendo uma falha operacional ou não. Se o sistema apresentar uma
falha operacional, é feita uma identificação do tipo de falha, classificando ou segregando as mudanças
de comportamento em CV, DIP, VI e GI para escoamento bifásico e CV, DIP e VI para escoamento
monofásico.
As mudanças de comportamento do sistema podem não causar a completa interrupção do funcio-
namento do sistema de bombeamento. De acordo com [3], as falhas DIP, VI e GI estão associadas às
condições do fluido e são graduais, enquanto que o CV pode ser uma falha permanente. Portanto, Elas
são consideradas como falhas operacionais que causam alterações nas variáveis de processo monitora-
das, como a pressão de entrada da bomba, a pressão de descarga da bomba, a temperatura do motor e a
corrente elétrica do motor, permitindo implementar estratégias de detecção da falha. O desafio é a detec-
ção e identificação de falhas usando essas variáveis de processo, caracterizando os primeiros sintomas
que o sistema de bombeamento apresenta antes de uma falha catastrófica acontecer.
Os sistemas baseados em BCS estão sujeitos a condições operacionais severas (escoamento multi-
19

fásico, abrasão, fluidos de alta viscosidade, erosão, etc.) que variam dependendo da instalação do equi-
pamento. Estas variações dificultam o estabelecimento de um procedimento geral de monitoramento [1,
4]. Recentemente, a indústria petrolífera tem aumentado seu interesse na implementação de soluções
de mineração de dados para análise preditiva em tempo real [5], aplicações offshore [6] e previsão de
falhas [7].
Um dos métodos de mineração de dados amplamente usado é o classificador de Árvore de Decisão
(AD). As Árvores de Decisão são algoritmos que aprendem uma hierarquia de questões do tipo se /
senão levando à classificação requerida [8]. Sua compreensibilidade, baseada em uma série de regras,
permite estabelecer uma relação entre as variáveis monitoradas em tempo real (por exemplo pressão,
vazão, corrente elétrica e torque) e mudanças prematuras de comportamento ou falhas, no caso deste
trabalho CV, DIP, GI e VI.
As Árvores de Decisão com sinais de vibração mecânica como entradas foram aplicadas com sucesso
na detecção de falhas (cavitação, falha no mancal, falha no impulsor e falha na vedação) de bombas
centrífugas convencionais (bombas de voluta de um estágio trabalhando sob escoamentos monofásicos
de baixa viscosidade), como classificadores [9–11], ferramentas de extração de características [12] e
metodologias de montagem de Árvore de Decisão [13]. No entanto, o uso de classificadores de Árvore
de Decisão para monitoramento de condições em bombas centrífugas multiestágio de difusores sob alta
viscosidade em escoamento bifásico não tem sido estudado ainda na literatura recente.
Esta pesquisa apresenta uma metodologia para prever comportamentos atípicos das condições de
operação (CV, DIP, GI e VI) usando Árvores de Decisão e uma Cadeia de Árvores de Decisão (CAD).
A abordagem CAD reduz o erro de classificação para essa aplicação em comparação com uma AD,
preservando a compreensão dos resultados.

1.1 Motivação

O principal objetivo de um sistema de elevação artificial é transportar uma determinada quantidade


de líquido desde o fundo do poço até a superfície. Para atingir esse requisito de produção, o método de
elevação artificial selecionado deve enfrentar vários desafios relacionados à operação, projeto e manu-
tenção. A Figura 1.1 mostra a influência da profundidade do poço na quantidade de óleo produzido para
três métodos de elevação artificial. Quanto maior a profundidade do poço, mais difícil é produzir o óleo
necessário. Observa-se nessa figura a ampla faixa de profundidade dos poços para a operação das BCS.
Além da profundidade do poço, existem várias condições operacionais desafiantes na produção de
petróleo, como a viscosidade do fluido, a quantidade de gás no poço, e severas condições de abrasão e
erosão. A Figura 1.2 lista algumas dessas condições às quais os sistemas de elevação artificial operados
com BCS são regularmente submetidos.
Apesar da grande flexibilidade das bombas centrífugas submersíveis para operar em diferentes ambi-
entes, isso não significa que sua operação seja simples. Essas condições severas geram a necessidade de
monitoramento e controle contínuos. No entanto, o estabelecimento de um processo de monitoramento
padrão é difícil quando existem diferentes cenários, tornando-se uma motivação encontrar alternativas
para reduzir essa dificuldade.
20

Vazão Volumétrica, bpd Elevação por Gás

BCS

Bombas Jet

Profundidade, ft

Figura 1.1: Máxima capacidade de bombeamento de petróleo em função da profundidade do


reservatório, adaptado de [1].

Bomba Operação Instalação

Mudanças Erosão Variações


de Rotação na Coluna
Abrasão de Produção
Flexão do Eixo
Corrosão Flowline
Desgaste entupido
Escoamento
Bifásico (GI) Válvula
Fechada (CV)
Escoamento
Viscoso (VI)

Mudanças na
Pressão (DIP)

Figura 1.2: Fatores que influenciam a operação das BCS.

O histórico de falhas apresentadas pelo sistema, bem como o comportamento das variáveis do mesmo
são informações que normalmente estão disponíveis para a análise nos sistemas de bombeamento. Mo-
delos reativos para identificar a causa da falha são implementados com frequência. Portanto, um dos
grandes desafios é passar de uma abordagem reativa para uma abordagem preditiva, que permita que
decisões sejam tomadas antes que novas falhas ocorram.
Esse cenário é muito favorável para a implementação de métodos de aprendizado de máquina, uma
vez que um grande volume de informações está disponível e os sistemas podem ser muito diferentes.
21

Esses métodos permitem treinar algoritmos baseados em dados, que seriam capazes de prever compor-
tamentos futuros (no caso com falhas operacionais), independentemente de que os sistemas a serem
analisadas sejam muito diferentes.
Uma das principais desvantagens dos métodos de aprendizado de máquinas é sua estrutura de caixa
preta. Ou seja, a dificuldade em entender como o algoritmo desenvolvido faz as previsões. Não obstante,
há um método que permite uma compreensão razoável do processo, que é chamado na literatura de
Árvore de Decisão.
As árvores de decisão são métodos de aprendizado de máquina que, além de permitir a previsão de
comportamentos, também permitem entender as relações entre falhas e variáveis de processo. Esta é a
principal motivação para implementá-las na detecção de falhas, além de sua simplicidade, baixo custo
de computação, tolerância ao ruído e capacidade de lidar com dados redundantes.

1.2 Objetivos

O alvo principal do presente trabalho é propor, implementar e testar uma ferramenta computacio-
nal, que seja capaz de detectar e classificar falhas operacionais em uma bomba centrífuga de múltiplos
estágios, usando as variáveis monitoradas para tal proposito, como é esquematizado na Figura 1.3.

Variáveis GI
monitoradas
VI
Não
Se apresenta uma
DIP
falha operacional?

Sim Tipo de falha? CV

Figura 1.3: Processo de detecção e classificação proposto.

A ferramenta selecionada é a das Árvores de Decisão. Portanto, torna-se o objetivo principal deste
trabalho a implementação de Árvores de Decisão que sejam capazes de determinar se a bomba tem
alguma anomalia ou está em boas condições. Por sua vez, como mostrado na Figura 1.3, se o sistema
não estiver em boas condições, determinar se corresponde a um fechamento abrupto da válvula choke
(CV), um aumento na pressão de entrada da bomba (DIP), um aumento na viscosidade (VI) no caso
monofásico ou para escoamento bifásico adicionando-se o aumento na fração de gás (GI).
Os seguintes objetivos específicos são então propostos para atingir o alvo principal:

• Realizar experimentos de simulação de condições normais e anormais (CV, DIP, VI e GI) de uma
bomba centrífuga submersa, monitorando variáveis do processo.

• Desenvolver uma metodologia de implementação de Árvores de Decisão para a detecção de falhas,


onde as variáveis medidas sejam corretamente selecionadas e os respectivos sinais tratados.
22

• Projetar e implementar Árvores de Decisão para detecção de falhas na BCS, escolhendo os cri-
térios de impureza e de parada do algoritmo, evitando soluções pouco generalistas, as quais são
boas só para um conjunto reduzido de dados.

• Propor, projetar e implementar uma estrutura particular de detecção e classificação de falhas,


baseada em Árvores de Decisão, que melhore a classificação das falhas, sem perder a interpreta-
bilidade do método.

• Testar e comparar os algoritmos projetados, usando dados que não tenham sido considerados no
processo de treinamento e validação.

1.3 Organização do trabalho

Inicialmente, são realizados experimentos, onde condições normais e as falhas CV, DIP, VI e GI
são simuladas, monitorando as variáveis operacionais. Seguidamente, as variáveis usadas na detecção
de falhas são selecionadas e os respectivos sinais tratados. As estruturas para a classificação de falhas
baseadas em árvores de decisão são projetadas, selecionando os parâmetros necessários. Finalmente, os
algoritmos são testados.
A estrutura desta dissertação é a seguinte: a revisão da literatura é apresentada no Capítulo 2. Con-
ceitos básicos das bombas centrífugas submersíveis, as Árvores de Decisão e sua aplicação na detecção
de falhas são apresentados nos capítulos 3 e 4 respectivamente. A descrição da bancada de testes e o pro-
cedimento experimental estão descritos no Capítulo 5. O Capítulo 6 descreve a identificação de falhas
usando as variáveis monitoradas. No Capítulo 7 descreve-se o projeto, treinamento, validação e teste das
Árvores de Decisão. Posteriormente, os resultados dos experimentos e a discussão são apresentados no
Capítulo 8. Finalmente, as conclusões são apresentadas no Capítulo 9.
23

2 REVISÃO DA LITERATURA

Nesta seção, é apresentada uma revisão da literatura, começando com o monitoramento de bombas
centrífugas submersíveis, depois com o uso de técnicas de aprendizado automático para detecção e iden-
tificação de falhas em bombas convencionais, e finalizando com a implementação dessas técnicas em
BCS.

2.1 Monitoramento da condição de operação em BCS

Os sistemas de monitoramento de poços em tempo real começaram a ser usados em bombas cen-
trífugas submersíveis devido à necessidade de controle sobre a produção. Inicialmente, sistemas de
monitoramento de fundo de poço foram implementados. Nesses sistemas, a vigilância das pressões de
entrada, separação e descarga da bomba em tempo real permitiram tomar decisões sobre a operação e a
detecção de possíveis falhas eléctricas ou mecânicas [14]. Depois disso, a instalação de sensores de tem-
peratura, de vazão e sísmicos proporcionou o controle em tempo real da velocidade de rotação, melhor
gerenciamento da produção e previsão de falhas [15].
Diferentes métodos têm sido propostos e aplicados para a detecção e identificação de falhas em
bombas centrífugas submersíveis. Durante décadas, a supervisão de condições operacionais das BCS
baseou-se apenas na interpretação da corrente elétrica através de cartas amperimétricas [1]. Recente-
mente, o uso de técnicas do tipo soft computing começou a ser considerado como uma alternativa para o
monitoramento de falhas nos chamados poços inteligentes (smart-wells), com a lógica difusa sendo uma
das técnicas mais reportadas. No entanto, diversas tecnologias baseadas em algoritmos de aprendizado
têm ganhado importância nos últimos anos.
Thornhill et al. [16] apresentaram uma metodologia de lógica difusa para a identificação de falhas em
BCS baseada em medições de pressão, vazão, corrente do motor elétrico e temperatura do motor. Este
trabalho considerou o uso dessa técnica para detecção e classificação de falhas baseada nas variáveis
monitoradas em tempo real no poço. As variações da válvula choke, variações de velocidade angular,
desligamentos da bomba, bloqueio da bomba por gás, desgaste e entupimento da bomba foram as falhas
monitoradas.
Um sistema especializado baseado em outra técnica baseada em dados foi usado para identificar
falhas de bombas em sistemas de elevação artificial por Blanckaert et al. [17], onde uma rede bayesiana
com sua capacidade de raciocínio probabilístico foi usada para representar o conhecimento físico da
bomba. O sistema foi testado em um campo com aproximadamente vinte bombas durante um mês e meio.
As falhas detectadas e classificadas foram baixa vazão, o deadhead (restrição na descarga da bomba),
injeção de gás, paradas da bomba e falha mecânica no poço (desgaste da bomba ou eixo quebrado). Dos
24

79 eventos monitorados, 62 foram detectados com sucesso.


A lógica difusa e o reconhecimento de padrões aplicados em um campo petrolífero com múltiplas
bombas centrífugas são discutidos em [18, 19]. Esses trabalhos mostram alta correlação entre sinais
de monitoramento em tempo real e algumas falhas habituais na operação das BCS. O aumento do gás
(GI), o aumento da viscosidade (VI) e as variações da válvula choke (CV) foram analisados e discutidos
nesses artigos. O uso de algumas variáveis calculadas baseadas em variáveis medidas como o diferencial
de pressão (∆p) e a potência elétrica também foram introduzidos como característica nos procedimentos
de reconhecimento de falhas.
Grassian et al. [4] fizeram uma aplicação de um sistema especialista para identificação de falhas em
um caso prático, onde a lógica difusa baseada em regras generalizadas foi usada para a segregação de
falhas. Os desafios mais significativos na implementação foram os diferentes modos de falha em cada
bomba e os conjuntos de regras semelhantes que poderiam causar confusão na classificação. O desen-
volvimento de uma metodologia capaz de se adaptar a cada sistema individual, com base no histórico de
falhas da unidade BCS, pode ser uma maneira promissora de cumprir esses objetivos.

2.2 Aprendizado automático na detecção de falhas

O diagnóstico de falhas pode ser visto como a determinação do estado do equipamento (mau ou bom
estado), a detecção das falhas incipientes, a determinação da causa dessas falhas e previsão de novas
falhas. Portanto, o diagnóstico de falhas pode ser interpretado como um problema de reconhecimento de
padrões. Os classificadores e abordagens de aprendizagem estatística têm sido extensamente empregados
no diagnóstico de falhas de máquinas rotativas [20]. A identificação de falhas usando técnicas de apren-
dizado automático com sinais de vibração no domínio da frequência tem sido amplamente estudada em
bombas centrífugas de um estágio operando com água. As falhas analisadas usualmente são cavitação,
falhas no mancal, falha do impulsor e falha no elemento vedante.
Sakthivel et al. [9] realizaram a identificação de falhas em uma bomba centrífuga utilizando um
classificador de Árvore de Decisão. A precisão da classificação obtida para cada falha isolada foi boa. O
algoritmo apresentou um desempenho notável na classificação de falhas e na redução de características,
ou seja, na seleção das variáveis relevantes que permitem identificar as perturbações.
Sakthivel et al. [10] compararam o método de Árvore de Decisão-difusa e o método de configuração
difusa rough set-fuzzy na classificação de falhas, mostrando um melhor desempenho para o método de
árvore decisão-difusa na exatidão geral e nas métricas da matriz de confusão.
Muralidharan et al. [11] apresentaram outra implementação do classificador de Árvore de Decisão
com extração de características usando o método nomeado na literatura como wavelets e determinando
a wavelet que levou à melhor precisão.
O classificador de redes Bayesianas e o classificador de máquinas de suporte vetorial (SVM) também
foram implementados na segregação de falhas com bons resultados em [21] e, [22] respectivamente.
25

2.3 Monitoramento da condição de operação em BCS com aprendizado automático

As técnicas de aprendizado automático permitem o uso dos dados monitorados para implementar um
sistema de identificação com a vantagem de mudar de uma abordagem reativa, onde os eventos de falha
são analisados após já terem ocorrido, para uma abordagem proativa, onde tais eventos são previstos
com antecedência [5, 23]. As metodologias analíticas convencionais para monitoramento da condição
de operação e detecção de falhas na indústria de petróleo podem ser melhoradas mediante a implemen-
tação de tecnologias de aprendizado de máquina, uma vez que existe disponível um amplo histórico
das variáveis de controle e de processo, obtendo como resultado uma redução dos custos de inspeção,
evitando manutenções desnecessárias, identificando fraquezas de projeto e melhorando a produção [6].
Devido ao considerável potencial dessas técnicas e à implementação de novas tecnologias nas atividades
de produção de petróleo, a indústria aumentou o uso desses métodos na detecção de falhas nos últimos
anos. Atualmente, alguns trabalhos de detecção de falhas baseados em algoritmos de aprendizado foram
reportados com resultados significativos.
Patri et al. [24] apresentaram um método referenciado como shapelets de séries temporais, que foi
aplicado a um conjunto de dados de sensores de bombas de um campo de petróleo terrestre executando
uma detecção de falhas (ou falha ou normal). Esta metodóloga foi comparada com vários classificadores,
obtendo uma exatidão geral de 78 % para shapelets, 80 % para random forest e 75 % para a Árvore de
Decisão.
Procedimentos de classificação normal-anormal baseados no algoritmo não-supervisionado PCA
(Principal Component Analysis) foram apresentados em [5, 7]. Nestas estruturas propostas, os dados
históricos obtidos a partir de sensores de superfície e de fundo do poço foram usados para avaliar as
variáveis de desempenho usando o PCA para a redução dimensional e os conjuntos de dados históricos
para a separação das regiões estáveis das instáveis.
Sistemas de suporte às decisões (Decision Support Systems) para detecção e identificação de falhas
baseadas em lógica difusa foram propostos em [23, 25]. A redução dimensional de características e
a regressão foram realizadas nestes trabalhos com técnicas de mineração de dados (PCA e regressão
linear). Primeiro, calculou-se a média temporal dos dados para algumas amostras, e um algoritmo de
regressão linear previu a saída de determinado conjunto de dados. Em seguida, uma cadeia baseada em
regras difusas executa a classificação de falhas e, finalmente, o sistema gera um alarme se ocorrer uma
falha.
26

3 BOMBAS CENTRÍFUGAS SUBMERSAS

Neste capítulo, a descrição das leis físicas que governam o desempenho da bomba em escoamento
monofásico e bifásico é apresentada. Em seguida, as condições de operação das bombas multiestágio nas
aplicações de elevação artificial de petróleo são descritas. Finalmente, são expostos os desafios, falhas
típicas e prováveis causas de falha na operação das bombas.

3.1 Princípios de funcionamento

As bombas são turbomáquinas hidráulicas, cuja função principal é fornecer energia mecânica a um
fluido compressível. De acordo com seu princípio de funcionamento, elas podem ser classificadas em
bombas centrífugas e bombas de deslocamento positivo.
As bombas de deslocamento positivo transportam pequenos volumes de fluido isolados uns dos ou-
tros. Cada pacote de fluido é transportado da zona de baixa pressão para a zona de alta pressão. Portanto,
seu correto funcionamento depende da capacidade volumétrica da bomba e de uma vedação adequada.
Se o volume interno da bomba e a velocidade de rotação forem mantidos constantes, a vazão será apro-
ximadamente constante, independentemente das variações de pressão. Este princípio físico as torna
adequadas para aplicações de alta pressão e baixa vazão.
Por outro lado, as bombas centrífugas utilizam a força centrípeta gerada por um rotor para transportar
o fluido do centro do rotor até a periferia. A pressão desenvolvida pela bomba está altamente correlacio-
nada com o volume de líquido transportado, fazendo esses equipamentos apropriados para aplicações de
alta vazão e baixa pressão.
As bombas centrífugas estão compostas principalmente de um rotor e uma carcaça. O rotor aumenta
a velocidade do fluido por meio da força centrípeta, enquanto a carcaça transforma essa energia cinética
do fluido em energia potencial de pressão. Nas configurações convencionais, a força centrípeta tem uma
direção radial ao eixo, e a carcaça tem forma de espiral e é conhecida como voluta [26].
No entanto, nas aplicações de elevação artificial, as bombas têm um arranjo diferente. Estão compos-
tas por múltiplos estágios posicionados em série para incrementar a pressão do fluido. Cada estágio tem
um rotor que gera forças nas direções radial ou axial, e um difusor que transforma a energia em pressão
levando o fluido ao estágio seguinte. Esses dispositivos, quando usados submersos, são chamados de
bombas centrífugas submersíveis (BCS). Segundo a direção de saída do fluido do rotor, as BCS podem
se classificar em: radiais, usadas para baixas vazões de produção até 4000 bpd (barris por dia); e mistas,
usadas para produções de óleo acima dos 4000 bpd.
A Figura 3.1 apresenta esquematicamente um estágio de uma BCS do tipo radial. Inicialmente,
o fluido entra pela parte central do rotor que gira a altas velocidades, e através da força centrífuga é
27

direcionado para a parte mais externa. Depois, no difusor o líquido é transportado de novo para o centro,
onde passa para o próximo estágio. O rotor fornece energia cinética ao escoamento, enquanto que o
difusor a transforma em energia potencial na forma de pressão.
O estágio da Figura 3.1 mostra uma versão em que são perfurados orifícios na cobertura superior
do impulsor e na cobertura inferior do difusor. Os orifícios fornecem um caminho para o fluido voltar
do difusor para o impulsor. Esse projeto reduz os efeitos do escoamento bifásico em aplicações com
alta presença de gás [1]. Embora se apresente uma diminuição da pressão gerada pelo estágio devido
à recirculação parcial da descarga do rotor para a admissão, a eficiência da bomba pode ser maior nos
casos de escoamento bifásico gás-líquido.

Figura 3.1: Escoamento de óleo em uma bomba de difusor [1].

3.1.1 Escoamento monofásico

Inicialmente, as bombas foram projetadas idealmente para o transporte de líquidos de baixa visco-
sidade. Portanto, é estabelecido que sua operação ideal ocorre quando o equipamento está trabalhando
com água.
As condições de operação das BCS são determinadas por curvas de operação. Essas curvas são obti-
das experimentalmente pelo fabricante usando aguá como fluido de trabalho, para condições constantes
de velocidade angular e temperatura do fluido. A Figura 3.2 esboça as principais curvas operacionais
descritas como:

• Ganho de pressão da bomba em função da vazão volumétrica;

• Potência consumida em função da vazão volumétrica;

• Eficiência mecânica em função da vazão volumétrica.

A vazão volumétrica ql , o ganho de pressão ∆p, o torque mecânico do eixo da bomba τ , e a veloci-
dade angular são medidos experimentalmente. Essas variáveis são então usadas para calcular a potência
28

mecânica Wm , a potência hidráulica Wh , e a eficiência mecânica η, da seguinte maneira:

Wh = ∆p ql
Wm = ω τ (3.1)
Wh
η=
Wm
O ponto de máxima eficiência, BEP (Best Efficiency Point), é determinado junto com as curvas de
eficiência.

Figura 3.2: Exemplo de curvas de desempenho monofásico das BCS [27].

As relações apresentadas na Equação 3.1 e na Figura 3.1 correspondem às condições de velocidade


angular e viscosidade constantes. Porém, as BCS usadas para o transporte de petróleo são submetidas a
variações de viscosidade e de velocidade angular.
O desempenho da bomba em rotações diferentes às especificadas nas curvas de operação pode ser
determinado pelo uso das leis de afinidade [1]. Sendo ω1 a rotação da bomba à qual foram definidas as
curvas de operação da bomba, segundo as leis de afinidade, para uma velocidade ω2 tem-se:

• A vazão varia proporcionalmente com a velocidade angular,

ω2
ql2 = ql1 (3.2)
ω1

• O ganho de pressão muda proporcionalmente com quadrado da velocidade angular,


 2
ω2
∆p2 = ∆p1 (3.3)
ω1
29

• A potência requerida pela bomba varia proporcionalmente com o cubo da velocidade angular
 3
ω2
W2 = W1 (3.4)
ω1

• A eficiência permanece constante.

Estas leis funcionam bem para fluidos de baixa viscosidade. A Figura 3.3 apresenta esquematica-
mente as curvas de operação determinadas pelas leis de afinidade para as velocidade de rotação de ω1
até ω5 . As linhas tracejadas representam os pontos achados pelas leis de afinidade onde a eficiência é
constante.

ω1

ω2
Ganho de Pressão (∆p)

ω3

ω4
ω5

Vazão (q)

Figura 3.3: Variação da elevação e vazão volumétrica, adaptado de [1].

3.1.2 Escoamento bifásico

Embora as bombas centrífugas sejam máquinas projetadas para trabalhar com líquidos de baixa vis-
cosidade, em aplicações de elevação artificial isso nem sempre é cumprido. Enquanto a viscosidade da
água é aproximadamente 1 cP em condições normais, as bombas centrífugas submersíveis podem operar
com óleos pesados com viscosidades entre 200 e 1000 cP. Além disso, o petróleo não é uma substância
pura monofásica. O fluido extraído do poço é uma mistura não homogênea de óleo, água, gás, areia e
sedimentos.
Um caso bastante comum ocorre quando há duas fases predominantes, um líquido constituído prin-
cipalmente por petróleo e uma fase gasosa. Estas condições operacionais produzem baixa eficiência,
gerando assim uma maior necessidade de energia. Isso acontece porque a bomba usa uma parte da
energia cinética fornecida pelo rotor para comprimir o volume de gás presente no escoamento [26].
30

Para o caso bifásico gás-líquido, a fração de vazio α é definida como a razão entre a vazão volumé-
trica de gás qg e a vazão total q, ou seja,

qg
α= (3.5)
q
O desempenho da bomba em escoamento bifásico associa-se diretamente à separação das fases pre-
sentes no escoamento. Se as fases tiverem um baixo grau de segregação, então a bomba tem um bom
desempenho, próximo ao comportamento monofásico. Alguns dos fatores que mais influenciam a sepa-
ração das fases são [26]:

• Diâmetro das bolhas de gás. Quanto maior o diâmetro das bolhas, maior será a separação das
fases;

• Massa específica das fases. Se as massas específicas das fases têm valores semelhantes, a mistura
bifásica terá menor tendência de separação;

• Rotação. Uma maior velocidade angular produzirá mais turbulência, diminuindo o diâmetro das
bolhas de gás. No entanto, o campo centrífugo no rotor também é aumentado, favorecendo a
segregação das fases.

Outro fator que influencia o comportamento da bomba é a geometria de seus componentes. Se-
gundo [26] e [27], o desempenho bifásico é afetado por:

• A velocidade especifica das bombas (Ωs ). Quanto maior a velocidade específica, melhor será
o desempenho do equipamento. No entanto, a capacidade de gerar pressão pode ser menor. A
Figura 3.4 mostra a variação da geometria do impulsor em função da velocidade especifica;

• O diâmetro nominal do rotor da bomba. Quanto maior o diâmetro, maior é a vazão de gás para a
qual o surging ocorre na operação da bomba;

• O ângulo de saída do rotor. o qual está diretamente relacionado à força centrífuga gerada pelo
rotor.

Ωs 40 - 80 Ωs 80 - 140 Ωs 140 - 300 Ωs 300 - 600 Ωs 600 - 1800

Radiais lentas Radiais normais Radiais rápidas Fluxo misto Axiais

Figura 3.4: Tipo de impulsor dependendo da velocidade específica, adaptado de [28].

A queda da eficiência da bomba devido ao aumento do volume de gás caracteriza o fenômeno de


surging. O surging depende do padrão de escoamento que se apresenta no impulsor da bomba podendo
ser [27, 29]:
31

• Bolhas dispersas. São pequenas bolhas de gás presentes na entrada do impulsor. O diâmetro
dessas bolhas aumenta quando a fração do gás aumenta e diminui quando a vazão do líquido, a
pressão de entrada ou a velocidade angular aumentam.

• Surging. Desenvolve-se uma bolha alongada estacionária de grande diâmetro na entrada do rotor,
devido ao aumento da fração de gás até um ponto em que as pequenas bolhas anteriormente
formadas na entrada do rotor coalescem formando a bolha maior.

• Gas-locking. Quando a bolha estacionária ocupa mais de do 80% do canal do rotor, o líquido
deixa de escoar, produzindo um bloqueio por gás.

A Figura 3.5 mostra os limites das três regiões obtidos nos experimentos desenvolvidos por Este-
vam [29]. A linha vermelha tracejada representa a transição da região de bolhas dispersas para a região
de surging, enquanto que a linha azul tracejada representa o início do bloqueio por gás. Nesta figura, H
é a altura normalizada da coluna de gás e q l é a vazão volumétrica de líquido normalizada.

⍺ 0,0 % Bolhas Dispersas

⍺ 2,7 %
⍺ 4,7 %
⍺ 7,7 % Surging
⍺ 10,3 %
⍺ 15,3 %
Inicio Surging
Inicio Gas-Locking

Gás Locking

ql

Figura 3.5: Limites de surging e gas-locking. Adaptado de [29].

Considerando a massa especifica ρ e aceleração gravitacional g, a altura de pressão H é definida


como a energia específica por unidade de peso, e é dada por:

∆P
H= (3.6)
ρg
A altura normalizada H é definida como a razão entre H e a altura máxima da coluna de líquido que
32

a bomba pode gerar para uma rotação determinada Hmax , ou seja,

H
H= (3.7)
Hmax
Similarmente, a vazão normalizada q l é definida como a razão entre a vazão de líquido transportada
qL e a vazão máxima que pode ser transportada pela bomba qmax , que seria determinado pela condição
monofásica,

ql
ql = (3.8)
qmax

3.2 Condições de operação

O sistema BCS é um sistema eficiente na produção de líquido, principalmente na elevação de petróleo


e água. A instalação clássica ou convencional é ilustrada na Figura 3.6, onde a unidade BCS está na
tubulação, submersa nos fluidos do poço. O motor elétrico submersível está na parte inferior da unidade
e é resfriado pela vazão de fluido que passa por seu perímetro. Ele está conectado à seção do protetor que
fornece muitas funções cruciais para a operação segura da unidade. No topo do protetor está situada a
admissão da bomba ou um separador de gás que permite a entrada de fluidos de poço na bomba centrífuga
e ao mesmo tempo remove baixas quantidades de gás. O líquido é elevado até a superfície pela bomba
centrífuga multiestágio, componente central do sistema BCS [1].
O motor submersível é alimentado com corrente alternada trifásica através de um cabo elétrico que
sai da superfície e passa ao longo da coluna de produção. Os fluidos produzidos escoam pela coluna
de produção até a superfície, onde uma cabeça de poço especial garante a conexão do cabo elétrico ao
poço. Os equipamentos de superfície incluem a caixa de junção onde os cabos elétricos de fundo e de
superfície são unidos, e uma unidade de controle e o quadro de distribuição, o qual fornece funções de
medição e de controle [1].
A unidade BCS recebe energia AC de um conjunto de transformadores que fornecem a voltagem
requerida aumentando ou diminuindo a voltagem disponível a partir da rede elétrica de superfície. Este
tipo de instalação tem resistido ao longo dos anos e é frequentemente usado até hoje. As características
ideais mais importantes de uma instalação convencional de BCS são [1]:

• Apenas líquido entra na bomba centrífuga, proporcionando condições ideais para a bomba. O
poço deve produzir apenas uma pequena quantidade de gás na sucção da bomba, que pode ser
facilmente removida pelo separador de gás;

• A viscosidade do líquido produzido é baixa, aproximando-se da viscosidade da água;

• O motor é suprido com uma corrente alternada de frequência constante e assim sua velocidade, e
consequentemente a da bomba centrífuga são constantes.
33

Quadro de
Distribuição.
Cabeça Caixa de
de poço. Junction.

Coluna de Produção.

Bomba.

Admissão ou
Separador de gás.

Protetor.

Motor

Figura 3.6: Instalação convencional de uma BCS, adaptado de [1].

Embora as condições mencionadas anteriormente não sejam sempre cumpridas, a instalação conven-
cional de BCS pode ser aplicada em uma grande variedade de condições de campo. Condições incomuns
(como maior produção de gás, petróleo mais viscoso etc.) requerem o uso de equipamentos especiais [1].

3.2.1 Influência da quantidade de gás

O aumento na porcentagem de gás no fluido produz diminuição no desempenho da bomba. A Fi-


gura 3.7 apresenta esquematicamente o comportamento de uma BCS submetida a condições de escoa-
mento multifásico líquido-gás. Observa-se que o aumento na porcentagem de gás diminui a capacidade
da bomba de gerar pressão. Três regiões operacionais são definidas: a região (a) onde a operação é es-
tável, a região (b) onde ocorre uma região de operação instável e a região (c) onde ocorre o bloqueio de
gás [30].
34

Δp [kPa]

ql [m3/h]

Figura 3.7: Desempenho das BCS em escoamento bifásico, adaptado de [30].

3.2.2 Influência da velocidade angular

Para uma velocidade angular constante, os fabricantes de bombas centrífugas submersíveis recomen-
dam trabalhar dentro de uma faixa de vazão recomendada . Esse intervalo geralmente varia entre ± 20%
do BEP. Fora da faixa de operação, as bombas apresentam uma operação mais ineficiente, ou seja, maior
consumo energético por unidade de líquido produzido.
Como as leis de afinidade estabelecem que ao mudar a velocidade da bomba a eficiência é mantida
constante, os variadores de frequência são amplamente utilizados para manter um bom desempenho do
equipamento.
A Figura 3.8 mostra as curvas de desempenho de uma bomba SN3600 em diferentes rotações. As
três linhas tracejadas representam [1]:

• Os limites inferiores das taxas de líquido recomendadas;

• Os melhores pontos de eficiência;

• Os limites superiores das taxas líquidas recomendadas.

Note-se que que um aumento da rotação da bomba de até 70 Hz permite vazões acima de 5000 barris
por dia (bdp), mantendo um bom desempenho do equipamento.
35

Altura de Elevação de Líquido, ft

Vazão de Líquido, bpd

Figura 3.8: Curvas de desempenho de uma bomba SN3600, adaptado de [1].

3.2.3 Influência da pressão de sucção

Nos experimentos realizados por Monte Verde [31] para o caso de escoamento monofásico e para
baixas frações de gás no fluido (α), o efeito da pressão de entrada no desempenho da bomba foi consi-
derado desprezível. Por outro lado, quando estão presentes altas frações de gás no escoamento (α > 2),
um aumento na pressão de entrada permite melhorar o desempenho do equipamento.
Um aumento na pressão gera uma compressão dos gases que circulam dentro da bomba, diminuindo
a diferença entre as massas específicas das fases líquida e gasosa. Isso permite melhorar a qualidade
do escoamento, diminuindo a segregação das fases [31]. Embora um aumento na pressão de entrada
melhore o desempenho da bomba, não é um fator que pode ser controlado na maioria dos casos. Pelo
contrário, a pressão de sucção é determinada pelas pressões do reservatório, e pelo tipo de completação,
entre outras condições da instalação.

3.2.4 Influência da viscosidade

A Figura 3.9 mostra o desempenho de uma bomba GN5200 nos experimentos monofásicos reali-
zados por Monte Verde [31]. A capacidade de produção de líquidos é eficientemente diminuída com o
aumento da viscosidade. Enquanto o BEP para 76 cP de viscosidade é de cerca de 10 m3 /h, para 465 cP
é de cerca de 5 m3 /h. A vazão máxima que pode ser gerado também é afetado por esse comportamento.
36

Hl

ql

Figura 3.9: Efeito da viscosidade em escoamento monofásico, adaptado de [31].

O comportamento exibido é devido ao fato de que um aumento na viscosidade está diretamente


correlacionado com um maior aumento nas perdas por atrito.

3.3 Monitoramento da condição de operação

Para obter o maior tempo de duração possível de uma unidade de BCS é necessário monitorar re-
gularmente a operação da bomba e solucionar os problemas apresentados. Embora o monitoramento
adequado possa adiar danos ao sistema, estes acabam acontecendo. Estas podem estar relacionadas a
muitas possíveis causas. Nesta seção são descritos os problemas típicos que acontecem nas BCS, assim
como as possíveis causas deles de acordo com Tackacs et al. [1].
Assumindo que um projeto adequado do sistema foi feito, bem como uma instalação sem problemas,
o desempenho do sistema BCS e a vida útil dependem em grande parte do operador. A fim de garantir
uma operação rentável, alguns parâmetros chave devem ser continuamente monitorados e analisados para
avaliar as condições reais dos equipamentos e antecipar possíveis problemas.
Os três parâmetros operacionais mais importantes que devem ser monitorados regularmente, junta-
mente com seus possíveis diagnósticos, são os seguintes:

• Vazão volumétrica medida na superfície:

– Permite a determinação do ponto de operação da bomba na curva de desempenho;


– É o primeiro indicador de problemas no poço, como desgaste de equipamentos e vazamen-
tos;
– A mudança de vazão de entrada pode ser facilmente detectada a partir da tendência da taxa
do líquido.
37

• Corrente do motor da carta amperimétrica:

– Qualquer mudança na bomba, no poço ou no sistema elétrico é indicada na corrente consu-


mida pelo motor da BCS;
– Danos no motor causados por problemas elétricos ou mecânicos podem ser notados;
– Alterações nas propriedades dos fluidos produzidos podem ser rastreadas.

• Pressão de admissão da bomba (pin ):

– Mudanças na pin indicam mudanças no desempenho da bomba, entrada de poço ou integri-


dade da instalação;
– A comparação das pressões de entrada medidas com os valores projetados fornece informa-
ções sobre a precisão do projeto de instalação;
– Operação instável/cíclica pode ser antecipada mediante registros da pressão de admissão.

3.3.1 Problemas típicos em BCS

As bombas submersíveis operam sob condições adversas e estão sujeitas aos efeitos prejudiciais do
fluido do poço. Seus rolamentos, em contraste com os rolamentos do motor submersível que funcionam
com óleo de alta qualidade, são lubrificados pelo fluido bombeado e portanto podem falhar muito mais
cedo do que os do motor. Problemas típicos que podem gerar a parada da bomba são listados a seguir:

• O desgaste por compressão ocorre quando a bomba é operada em vazões superiores à taxa de
bombeamento máxima recomendada. Em bombas do tipo flutuante, os impulsores são forçados
contra os difusores, as arruelas de descarga ficam sobrecarregadas e o estágio eventualmente se
destrói, e se há materiais abrasivos no fluido do poço esse processo é acelerado.

• O desgaste radial causado por fluidos do poço carregados com abrasivos aumenta as folgas nos
mancais das bombas. Isso geralmente leva ao aumento das vibrações do eixo e a um maior des-
gaste dos rolamentos.

• A carcaça da bomba pode quebrar devido à circulação de fluidos abrasivos.

• O acúmulo de incrustações pode entupir ou até bloquear os estágios da bomba.

3.3.2 Causas gerais dos problemas em BCS

Projeto inadequado da instalação

O dimensionamento inicial adequado é o principal requisito para uma vida útil longa do equipamento.
A unidade deve operar dentro da faixa de vazão de líquido recomendada da bomba; o desgaste da bomba
38

é acelerado, levando a falhas prematuras da bomba e do motor, se a unidade for operada fora dessa faixa.
O projeto adequado requer dados confiáveis sobre a produtividade do poço e informações precisas sobre
as propriedades do fluido. No entanto, as imprecisões de projeto podem ser corrigidas usando unidades
de velocidade variável (VSD).

Equipamentos defeituosos

Equipamentos defeituosos ou instalações trabalhando com equipamentos que não foram devidamente
verificados para a operação antes da instalação pode levar a uma falha prematura devido a defeitos de fa-
bricação. Portanto, os componentes da BCS devem ser testados antes de serem instalados no poço. Além
disso, a instalação correta de todos os componentes (motor, bomba, cabo, etc.) seguindo o adequado
procedimento é importante.

Condições do poço

Existem várias condições de poço que podem ter um efeito primordial na longevidade do equipa-
mento BCS, incluindo:

1. A corrosão pode afetar todas as partes do sistema, mas a corrosão do motor e carcaças da bomba
é a mais prejudicial para o sistema. A escolha adequada do material da carcaça ou a aplicação de
um revestimento adequado em superfícies externas pode adiar ou impedir esse tipo de falha.

2. A formação de incrustações em superfícies metálicas causa dois tipos de problemas. Incrustações


nas carcaças dos motores reduzem a transferência de calor para o fluido do poço e aumentam a
temperatura do motor. Por outro lado, a formação de incrustações nos estágios da bomba reduz a
vazão, eventualmente entupindo a bomba.

3. A presença de areia ou abrasivos é o que mais prejudica a bomba afetando também os separado-
res rotativos de gás. Areia ou partículas abrasivas transportadas pelo líquido bombeado causam
abrasão e erosão nas partes onde altas velocidades de líquido estão presentes, que não são apenas
os estágios da bomba, mas rolamentos radiais e axiais. O dano nessas partes eventualmente leva
à perda total na capacidade de bombeamento. A escolha adequada do tipo de bomba e materiais
pode reduzir ou eliminar estes efeitos negativos.

4. As altas temperaturas do poço afetam principalmente o motor, o qual está sob condições desfavo-
ráveis, conduzindo inclusive à queima dele devido ao aumento de sua temperatura interna acima
da temperatura nominal.

5. A formação de gás causa problemas na bomba e no cabo elétrico do fundo do poço. A operação
da bomba pode se tornar instável levando finalmente a um bloqueio causado pela alta quantidade
de gás. A aplicação de separadores rotativos de gás, empaquetadores (packers) ou outros meios
de remoção de gás livre antes de entrar na bomba são as soluções mais comuns. No caso do cabo
elétrico, o gás pode atravessar o isolamento deste e a escolha adequada do material do cabo pode
resolver este problema.
39

6. Fluidos de alta viscosidade do poço, como regra, têm maior gravidade específica, portanto uma
maior potência da bomba é requerida para seu transporte. Além disso, a eficiência da bomba
centrífuga diminui devido ao aumento das perdas por atrito. Ambos efeitos resultam em maior
necessidade de potência no motor.
40

4 ÁRVORES DE DECISÃO

As Árvores de Decisão são modelos de inteligência artificial amplamente utilizados. Mesmo quando
outros algoritmos fornecem modelos mais precisos, estes algoritmos são frequentemente considerados
atraentes. Uma das razões mais importantes é sua compreensibilidade. As Árvores de Decisão podem ser
facilmente expressas na forma de um conjunto de regras lógicas fornecendo explicações simples sobre
decisões específicas, geralmente tendo uma regra para cada decisão, construindo assim uma conjunção
de várias premissas legíveis [32].

4.1 Construção das Árvores de Decisão

Supondo que temos que distinguir entre os seguintes quatro animais: ursos, falcões, pinguins e
golfinhos, fazendo a menor quantidade de perguntas. Pode-se começar perguntando se o animal tem
penas, uma questão que restringe as opções a dois animais. Se a resposta for "sim", então se pode fazer
outra pergunta que ajudaria a distinguir entre falcões e pinguins. Por exemplo, perguntar se o animal
pode voar. Se o animal não tiver penas, são possíveis duas escolhas, golfinhos e ursos, precisando
então de mais uma pergunta para distinguir entre esses dois animais, a qual poderia ser se o animal
tem barbatanas [8]. Esta série de questões pode ser expressa como a Árvore de Decisão mostrada na
Figura 4.1.

Tem Penas?

sim não

Pode Voar Tem Barbatanas?

Falcões Pinguins Golfinhos Ursos

Figura 4.1: Árvores de Decisão qualitativa, adaptado de [8].

Logo, esse mesmo processo pode ser desenvolvido em qualquer contexto de classificação. A Fi-
gura 4.2 apresenta duas variáveis medidas em um experimento dado, X1 e X2 . De acordo com os
valores dessas variáveis, é possível classificar os dados em quatro classes diferentes (1, 2, 3 e 4). Se o
valor de X2 for maior que 4,1, os experimentos serão classificados em apenas duas classes possíveis (3
e 4). Se além disso, X1 for maior que 3,4, todos os dados seriam da mesma classe. A Árvore de Decisão
obtida nesta classificação é mostrada na Figura 4.3.
41

10

6
X2

0
0 2 4 6 8 10
X1

Figura 4.2: Dados classificados.

X2 > 4, 1

não sim

X1 > 7, 5 X1 > 3, 4

não sim não sim

Classe 2 Classe 4 Classe 3 Classe 1

Figura 4.3: Árvores de Decisão baseada em dados.

A estrutura das Árvores de Decisão é caracterizada por [33]:

• O nó raiz Φ0 onde a divisão dos dados começa, o qual não tem linhas de entrada.

• Nós Φi , onde os dados são divididos sequencialmente. Cada nó tem uma linha de entrada e duas
linhas de saída.

• As linhas que conectam cada par de nós.

• Os nós finais, os quais não têm ramificações e são conhecidos como Folhas.

Algoritmo CART

Árvores de Classificação e Regressão (CART) são um dos métodos mais populares e bem sucedidos
para a construção de Árvores de Decisão. Esses métodos foram desenvolvidos inicialmente por Breiman
et al. [34] em 1984, sendo depois melhorados e usados em múltiplas aplicações.
42

O algoritmo CART é não paramétrico e cria árvores binárias a partir de dados descritos por variáveis
contínuas ou discretas. Para variáveis contínuas, consideram-se todas as possíveis divisões binárias em
intervalos (−∞, a) e (a, ∞). Para as discretas são consideradas todas as possíveis divisões do conjunto
de variáveis, dividindo os dados em dois subconjuntos complementares [32].
Para um determinado conjunto de dados, a impureza é definida como uma medida da quantidade de
informação que eles possuem. Se os dados têm características semelhantes (homogêneos), são conside-
rados como dados puros. Caso contrário, quando os dados são muito heterogêneos, diz-se que eles têm
alta impureza.
O objetivo geral de uma classificação é obter conjuntos de dados homogêneos. Portanto, a melhor di-
visão dos dados ocorre quando é obtida a maior redução da impureza. Essa redução é realizada mediante
uma busca exaustiva, usando métodos de otimização.
Existem vários critérios para quantificar a impureza dos dados. Os algoritmos CART usam princi-
palmente dois, Gini e Entropia, os quais são abordados na Seção 4.2.
O processo Indução-AD para a construção de uma Árvore de Decisão pode ser descrito pelo Al-
goritmo 1. A melhor divisão possível φ do conjunto inicial de dados D é encontrada. O método
M elhorDivisão é usado para encontrá-la, procurando dentro de todas as possíveis divisões aquela que
gere a maior redução da impureza.
Em árvores tipo CART, um nó Φ tem apenas dois conjuntos de dados, D1 e D2 . Para cada conjunto
de dados, o processo de indução é repetido, mantendo sempre a relação entre o nó raiz Φi e o subconjunto
de nós.

Algoritmo 1: Abordagem comum de indução de AD, adaptado de [32].


Função: Indução-AD (D, M elhorDivisão)
Entrada: Dados de Treinamento (D), Função que diminui a impureza M elhorDivisão
Saída: Árvore de Decisão = nós raiz e Folhas
1 início
2 M elhorDivisão(D) −→ φ ; // ⊥ = coleção vazia de sub-nós
3 se φ 6=⊥ então // Uma divisão é retornada
4 Φ(φ) −→ {D1 , ... , Dn } ; // Nó Φ
5 para i = 1 , ... , n faça
6 InduçãoAD(Di , M elhorDivisão) −→ Φi // Novo Nó Φi
7 fim
8 (Φ1 , ... , Φn ) −→ SubconjuntoDeN ós
9 senão
10 ⊥−→ SubconjuntoDeN ós
11 fim
12 retorna (φ, SubconjuntoDeNós, D)
13 fim
43

4.2 Critérios de divisão

Na maioria dos casos, as funções de divisão discretas têm só uma variação, ou seja, que um nó
interno é dividido de acordo com o valor de uma única variável. Consequentemente, o indutor procura
a melhor variável para dividir. Existem vários critérios, os quais podem ser caracterizados de diferentes
maneiras de acordo com [35]:

• A origem da medição: teoria da informação, dependência e distância;

• A estrutura da medida: critérios baseados em impurezas, critérios baseados em impurezas padro-


nizadas e critérios binários.

Para o caso dos algoritmos implementados, as regras usadas na divisão dos dados são baseadas em
impurezas. Essas regras são apresentadas na sequência.

4.2.1 Índice Gini

O índice de Gini é um critério que mede a divergência entre as distribuições de probabilidade dos
valores da classe objetivo [35]. Dada a probabilidade θj de que a classe j aconteça em um conjunto de `
classes, o índice Gini é definido como

`
X
Gi = 1 − θj 2 (4.1)
j=1

Se θj é a probabilidade de que a classe j seja classificada corretamente no nó, então o índice Gini
pode ser interpretado como uma medida do erro na classificação. O processo de diminuição da impureza
usando o critério Gini não está baseado no critério de pluralidade, ou seja, não maximiza os acertos, e
sim diminui o erro [34].

4.2.2 Entropia

Na teoria da informação, a Entropia ou Entropia de Shannon [36] mede a incerteza de uma fonte de
informação.
A Entropia é considerada como a quantidade de informação média contida em um conjunto de sím-
bolos. Os símbolos com menor probabilidade são aqueles que fornecem mais informações. No caso
de um texto, por exemplo, palavras frequentes como os conectores "o", "à" ou "e" fornecem pouca
informação, enquanto palavras menos frequentes como verbos, adjetivos e substantivos fornecem mais
informações. Se excluirmos um artigo de um determinado texto, isso certamente não afetará a compre-
ensão. Entretanto, se são excluídas palavras como "ouvir", "carro"ou "branco", será difícil entender o
44

texto. Quando todos os símbolos são igualmente prováveis (todos fornecem informações relevantes) a
Entropia é máxima. Considerando θj a probabilidade de obter a característica j em um conjunto com `
símbolos, a Entropia do conjunto é definida por

`
X
Entropia = − θj log2 (θj ) (4.2)
j=1

Nos problemas de classificação pode-se dizer que uma amostra que contém muitas classes diferentes
possuem muita informação, ou seja, tem alta Entropia. Em contrapartida, se a amostra tem só uma classe,
ela terá pouca informação. Portanto, para garantir a uma boa classificação deve-se reduzir a informação
das amostras, isto é diminuir a Entropia dos dados.

4.3 Critérios de parada

Os critérios de divisão, que para o caso dos algoritmos do tipo CART são baseados na redução de
impureza, permitem a criação subsequente de nós, construindo o diagrama de fluxo conhecido como
Árvore de Decisão. Porém, essas regras não permitem estabelecer quanto deveria crescer a Árvore de
Decisão. Por exemplo, a Figura 4.2 apresenta um conjunto de dados com quarenta amostras, dez de cada
classe. A Árvore de Decisão apresentada na Figura 4.3 mostra uma classificação razoavelmente boa para
este conjunto de dados. No entanto, nem todas as amostras classificadas nas classes 2 e 3 pertencem ao
grupo correto. Em outras palavras, as classes 2 e 3 possuem algum grau de impureza, como é mostrado
na Tabela 4.1. Para cada um dos nós da árvore pode se observar o cálculo dos dois critérios de impureza,
baseado na probabilidade de que cada uma das classes aconteça ([Classe 1, Classe 2, Classe 3, Classe
4]).

Quantidade Probabilidade %
Nó Gini Entropia
de Amostras

#1 40 [25, 25, 25, 25] 0,75 2,00


#2 20 [00, 45, 05, 50] 0,69 1,74
#3 20 [50, 05, 45, 00] 0,69 1,74
Classe 3 10 [00, 11, 89, 00] 0,20 0,50
Classe 1 10 [100, 00, 00, 00] 0,00 0,00
Classe 2 11 [09, 82, 09, 00] 0,31 0,87
Classe 4 9 [00, 00, 00, 100] 0,00 0,00

Tabela 4.1: Dados da Árvore de Decisão.


45

(1) X2 > 4, 1

não sim

(2) X1 > 7, 5 (3) X1 > 3, 4

não sim não sim

(6) X2 > 2 Classe 4 (4) X2 > 4, 8 Classe 1

não sim não sim

(10) X1 > 6 (11) X1 > 2 Classe 2 Classe 3

não sim não sim

Classe 2 Classe 4 (14) X2 > 3 Classe 2

não sim

Classe 2 Classe 3

Figura 4.4: Árvore de Decisão expandida.

A árvore poderia crescer até ter somente uma amostra por folha, ou seja, no caso descrito acima
a árvore poderia ter até 40 folhas. O critério de parada mais simples a ser considerado é dado pela
impureza, e consiste em acrescentar a estrutura da árvore até ter uma impureza igual a zero em todos os
nós. Seguindo essa dinâmica, os resultados mostrados na Figura 4.4 e na Tabela 4.2 são obtidos.
Os nós são rotulados de acordo com a ordem em que foram se formando, obtendo finalmente de-
zesseis nós, dos quais nove seriam folhas. Os dois critérios de impureza são zero para as folhas. Para a
maioria dos problemas de classificação essa metodologia não é recomendada, dado que leva a um fenô-
meno conhecido como sobre-treinamento, o qual é um fenômeno que acontece quando o classificador
aprende todas as peculiaridades dos dados incluindo ruído potencial e padrões espúrios, que são espe-
cíficos para o conjunto de treinamento, e não conseguem generalizar bem para o conjunto de dados de
teste [33].
A Figura 4.5 exemplifica bem uma condição de sobre-treinamento. As amostras são divididas em
nove regiões diferentes. Como esperado, cada seção tem a máxima pureza, já que apenas amostras da
mesma classe existem em cada região. Contudo, se a árvore apresentada na Figura 4.4 for usada para
classificar outro conjunto de dados, não usado na respectiva construção, é altamente provável que os
dados sejam erroneamente classificados, especialmente nas regiões que possuem apenas uma amostra.
Portanto, a solução obtida é apenas uma solução particular do sistema, que não pode ser aplicada em
outros casos.
46

Quantidade Probabilidade %
Nó Gini Entropia
de Amostras

#1 40 [25, 25, 25, 25] 0,75 2,00


#2 20 [00, 45, 05, 50] 0,69 1,74
#3 20 [50, 05, 45, 00] 0,69 1,74
#4 10 [00, 11, 89, 00] 0,20 0,50
Classe 1 10 [100, 00, 00, 00] 0,00 0,00
#6 11 [09, 82, 09, 00] 0,31 0,87
Classe 4 9 [00, 00, 00, 100] 0,00 0,00
Classe 2 1 [00, 100, 00, 00] 0,00 0,00
Classe 3 9 [00, 00, 100, 00] 0,00 0,00
# 10 4 [00, 75, 00, 25] 0,38 0,81
# 11 7 [00, 86, 14, 00] 0,25 0,59
Classe 2 3 [00, 100, 00, 00] 0,00 0,00
Classe 4 1 [00, 00, 00, 100] 0,00 0,00
# 14 00 [00, 01, 01, 00] 0,50 1,00
Classe 2 5 [00, 100, 00, 00] 0,00 0,00
Classe 2 1 [00, 100, 00, 00] 0,00 0,00
Classe 3 1 [00, 00, 100, 00] 0,00 0,00

Tabela 4.2: Divisões da Árvore de Decisão expandida.

10

6
X2

0
0 2 4 6 8 10
X1

Figura 4.5: Dados classificados.


47

Alguns outros critérios podem ser selecionados para evitar o excesso de treinamento, nos quais es-
tão [33]:

1. Alcançando a homogeneidade da classe: quando todas as amostras de um nó pertencem a mesma


classe.

2. Alcançando a homogeneidade da variável: quando todas as propriedades das amostras de um nó


possuem os mesmos valores (embora não necessariamente o mesmo valor de classe);

3. Atingindo uma profundidade máxima da árvore: definida previamente como a máxima quantidade
de hierarquias da árvore;

4. Atingindo um número máximo de folhas: definida previamente como a máxima quantidade de


divisões da árvore;

5. Falha ao exceder um critério de divisão: um valor máximo para os critérios de divisão de parâme-
tros pode ser especificado para evitar divisões fracas.

O critério 1 é universalmente aceitado e é implementado na majoria das estratégias de construção das


AD. O critério 2 é bom quando se tem propriedades das amostras contraditórias, ou seja, propriedades
idênticas, mas com valores de classe diferentes. O critério 3 é usualmente uma restrição relacionada
à complexidade das árvores, especialmente naqueles casos em que a compreensibilidade é um requi-
sito importante, porém não é um bom critério em problemas complexos de classificação que requerem
árvores profundas. O critério 4 implica que pequenas divisões (isto é, folhas das árvores com um nu-
mero muito pequeno de amostras) podem ser desprezadas uma vez que são propensas a erros. Observe
que a eliminação de pequenos divisões pode ser prejudicial, especialmente em um cenário de classes
desbalanceadas, e o critério 5 é altamente dependente da divisão usada [33].
Estes critérios apresentados anteriormente podem ser vistos como estratégias de pré-poda, uma vez
que interrompem “prematuramente” o crescimento da árvore. A maioria dos critérios discutidos aqui
pode prejudicar o crescimento de uma Árvore de Decisão quando se requerem muitas ramificações.
Existe uma convenção na literatura em evitar os critérios de parada de pré-poda para árvores profundas
(muitas folhas). Então, é sugerido empregar estratégias de pós-poda para evitar o sobre-treinamento dos
dados [33].
48

5 DESENVOLVIMENTO EXPERIMENTAL

O alvo principal deste trabalho é identificar se a bomba multiestágio está funcionando adequada-
mente ou não. Se a bomba não estiver funcionando corretamente, o objetivo é estabelecer se a falha
corresponde a CV, DIP, VI ou GI. O primeiro passo para conseguir atingir este processo é a simulação
das falhas em uma bancada experimental. Neste capítulo, as instalações experimentais e o processo
realizado na indução de cada falha são apresentados.

5.1 Circuito de testes

As instalações experimentais são compostas pelo circuito de testes e o sistema de injeção de gás
apresentados nas figuras 5.1 e 5.2. O circuito de testes está composto principalmente pelos seguintes
equipamentos principais: o tanque, a bomba de dois parafusos (bomba booster), o trocador de calor, o
resfriador, a bomba centrífuga de múltiplos estágios (BCS), os variadores de velocidade (VSD), a válvula
choke, o gerador de energia, a instrumentação e as válvulas auxiliares. O sistema de injeção de gás é
composto por um compressor, válvulas de regulagem e mangueiras.
Inicialmente, a bomba booster fornece a energia necessária para bombear o fluido do tanque ao
sistema, passando inicialmente pelo sistema de controle de temperatura composto por um resfriador, um
trocador de calor e uma resistência elétrica. Depois, o fluido atravessa um medidor de vazão mássica.
Subsequentemente, o líquido passa pela BCS e pela válvula choke e finalmente, retorna ao tanque.
Quando é considerado escoamento bifásico, nitrogênio obtido mediante separação mecânica do ár é
injetado na entrada da bomba centrífuga. Depois, a mistura bifásica é introduzida na BCS e na válvula
choke, retornando ao tanque de armazenamento, onde o nitrogênio é separado do óleo por gravidade.
O VSD-2 permite simular as mudanças de pressão do reservatório através das variações da velocidade
da bomba booster, e o VSD-1 permite alterar a velocidade de rotação da BCS. O circuito experimental é
ilustrado nas figuras 5.1 e 5.2. As principais especificações dos equipamentos e sensores são apresentadas
nas tabelas 5.1 e 5.2, respectivamente.
49

Nitrogênio
Óleo Nitrogeno Água Control
-Óleo
Tanque de
água fria
Painel de
Controle Inte-
VSD-1 & Aquisi- VSD-2 rruptor
ção Tanque de
combus-
VSD-3 tível

Válvula Aquece-
Válvula de VSD-3
de segu- dor
By-Pass rança

Trocador
de Calor
Tanque
de Óleo VSD-2 Gerador
Bomba Booster de
potência
M
Coriolis
NI-DAQ NI-DAQ Injeção
Caixa de de Gás
instrumentação
Pout DP 10 DP
9 DP
8 DP
7 DP
6 DP
5 DP4 DP
3 DP
2 DP
1 Pin T Chiller
BCS
NI-DAQ
Torque
Válvula Tout T T T T Tin
VSD-1
Choke
8 6 4 2

Mgas

Válvula Válvula Compressor


R. Pressão R. Vazão de ar

Figura 5.1: Layout do banco de testes.

Tanque de
água fria

Bomba
Booster

Tanque
de Óleo

Trocador
Injeção
de Calor
de Gás

BCS Chiller

Válvula
Choke

Figura 5.2: Circuito de testes.


50

Tabela 5.1: Especificações dos equipamentos.

Equipamento Especificações
HC20000L - series 675,
Bomba 10 estágios,
Pressão máxima 30 bar
BCS Motor eléctrico 3 fases, 2 pólos, 150 kW / 380V
3 fases, 329 A / 50-60 Hz,
VSD-1
Tensão nominal: 380-480V/206-260 KVA
Bomba Vazão Nominal: 200 m3 /h,
Max.Pressão: 25 bar
Bomba booster Motor eléctrico 3 fases, 8 pólos, 220 kW / 380V
3 fases, 477 A / 50-60 Hz,
VSD-2
Tensão nominal: 380-480V
Tanque estacionário horizontal,
Tanque de óleo -
Capacidade 6,7 m3 /h
Temperatura Trocador de calor Capacidade 267,5 kW
Sistema de controle Chiller Capacidade 241,9 kW
Motor eléctrico 50 Hp, 1750 rpm
Compressor Vazão Nominal: 5,7 m3 /min
Compressor HP50SE
Pressão máxima: 10,3 bar

Tabela 5.2: Especificações dos sensores.

Instrumento Modelo Faixa de Medição Incerteza


Micro-Motion
Medidor de vazão de óleo 0 - 545000 kg/h +/- 0,200 %
2700R
Micro-Motion
Medidor de vazão mássica de gás 0 - 45 kg/h ± 0,200 %
1700R
Termopar PT 100 RTD 0 - 100 o C +/- 0,070 %
Rosemount
Transdutor de pressão manométrica 0 - 4000 kPa +/- 0,073 %
2051 TG
Rosemount
Transdutor de pressão diferencial -300/+300 kPa +/- 0,088 %
2051 CD
Transmissor de Torque MCRT 390041 X 0 - 1130 Nm +/- 0,026 %
Tacômetro MDT 2239 A 2,4 - 99999 rpm +/- 0,050 %
51

5.2 Procedimento experimental

A instalação experimental foi projetada para ter o monitoramento preciso do ganho de pressão, da
vazão, da temperatura na entrada, da fração mássica, da pressão de sucção, da abertura da válvula choke,
da velocidade da bomba booster e da vazão mássica de gás.
Em todos os experimentos, a frequência de amostragem de dados foi de 33 Hz, e as variáveis moni-
toradas foram:

• A pressão manométrica na sucção (pin ) e na descarga (pout ) da BCS;

• O vazão mássica de líquido (ṁl )

• As temperaturas na entrada (Tin ) e na saída (Tout ) da BCS;

• O torque mecânico da bomba centrífuga (τ );

• A vazão mássica de gás (ṁg ) e a pressão do gás na entrada da BCS (pg ).

A bomba se encontra em regime estacionário quando as variáveis do processo não mudam com o
tempo. Neste trabalho, quando não há variações significativas na vazão mássica de líquido (menos de
±0, 1 kg/s), na pressão de entrada (menos de ±0, 05 Bar), na temperatura (menos de ±0, 5◦ C) e na
vazão mássica do gás (menos de ±0, 5 kg/h), a situação é considerada como Operação Normal. Foram
realizados 580 experimentos em operação normal, 392 experimentos em escoamento bifásico e 188
experimentos em escoamento monofásico, cada um deles com uma duração aproximada de 10 segundos.
Nas falhas CV, DIP, VI e GI, as medições foram feitas em intervalos de tempo de entre 20 e 30 segundos
tanto para escoamento monofásico, como para escoamento bifásico.
A distribuição dos experimentos foi realizada entre os limites operacionais da bomba, os quais cor-
respondem a velocidades entre 1800 e 3600 rpm, viscosidades abaixo de 10000 cP (temperaturas acima
de 30 ◦ C) e ganhos de pressão abaixo de 20 bar. Para o caso do escoamento bifásico, a operação da
bomba está limitada a vazões de gás abaixo de 5 kg/h devido ao aumento do volume da mistura bifásica.
Tanto para escoamento monofásico como para escoamento bifásico, a quantidade de experimentos é
escolhida aleatoriamente para testar a capacidade do método de classificação (AD ou CAD) de lidar com
bancos de dados assimétricos. Ou seja, determinar se os classificadores usados priorizam as falhas que
tem maior quantidade de experimentos sobre aquelas que apresentam menos eventos. Menciona-se aqui
que os algoritmos de aprendizado automático apresentam melhor desempenho quando existe a mesma
quantidade de amostras por classe (no caso desse trabalho, classes Normal, CV, DIP, VI e GI). Além
disso, como cada experimento tem uma duração maior de 10 segundos e a frequência de amostragem foi
de 33 Hz, tem-se mais de 3300 amostras por experimento, garantindo a quantidade suficiente de amostras
para treinar os algoritmos baseados em Árvores de Decisão).
A Figura 5.3 e a Tabela 5.3 apresentam um resumo da distribuição dos experimentos em escoamento
monofásico. Os testes realizados para a simulação da falha VI foram feitos a 1800 rpm, enquanto que
para as falhas CV e DIP, os experimentos foram realizados em duas condições de operação da bomba:
3000 rpm e 3500 rpm.
52

Um total de 68 experimentos foi realizado para a simulação das falhas na bancada experimental em
escoamento monofásico: 26 experimentos para CV, 32 para DIP, e 10 para VI.

Tabela 5.3: Distribuição dos experimentos em escoamento monofásico.

Falha Tin [◦ C] ω [rpm] ∆p [bar] ṁl [kg/s] # Experimentos

3500 0,16 - 22,07 11 - 37 64


Normal 36-51 3000 0,25 - 18,06 7 - 35 112
2400 6,60 - 6,79 10 - 18 12
3500 0,33 - 16,47 13 - 32 14
CV 36-40
3000 0,44 - 17,04 8 - 31 12
3500 8,59 - 18,82 14 - 28 13
DIP 36-40
3000 2,90 - 16,45 9 - 29 19
VI 41 - 47 1800 0,75 - 0,87 12 - 13 10

Figura 5.3: Distribuição dos dados dos testes monofásicos.

Para o caso do escoamento bifásico, o fechamento da válvula de estrangulamento (CV) e a variação


da pressão de entrada (DIP) foram realizados em temperatura e velocidade constantes, em três diferentes
configurações: 3500 rpm - 40 ◦ C, 2400 rpm - 50 ◦ C e 3500 rpm - 50 ◦ C. A variação da viscosidade do
fluido (VI) foi realizada a 2400 rpm com temperatura variável. O aumento de gás (GI) foi realizado nas
velocidades de 2400, 3000 e 3500 rpm e temperaturas de 40, 45 e 50 ◦ C principalmente.
Em escoamento bifásico 414 experimentos foram realizados na simulação das falhas (37 para CV,
45 para DIP, 42 para VI e 290 para GI). Uma breve distribuição dos experimentos é apresentada na
Figura 5.4 e na Tabela 5.4.
53

Os métodos de classificação na mineração de dados tendem a identificar melhor as classes com


mais amostras. Em uma implementação industrial, é comum ter uma falha predominante (falha de maior
número de ocorrências). Portanto, uma distribuição não homogênea foi selecionada para testar a robustez
do método na segregação de falhas, quando há um modo de falha predominante.

Tabela 5.4: Distribuição dos experimentos em escoamento bifásico.

Falha Tin [◦ C] ω [rpm] ṁg [kg/h] ∆p [bar] ṁl [kg/s] # Experimentos

3500 1 - 14 0,00 - 16,40 9 - 39 47


3000 1 - 14 0,15 - 13,14 15 - 23 45
50
2400 1 - 14 0,00 - 6,79 4 - 21 70
1800 1 - 14 0,45 - 0,71 10 - 11 5
3500 1 - 14 0,25 - 15,84 18 - 27 29
Normal 45 3000 1 - 14 0,21 - 11,61 15 - 23 43
2400 1 - 14 0,00 - 6,16 11 - 17 43
3500 1 - 14 0,07 - 12,75 16 - 27 39
3000 1 - 14 0,20 - 9,46 13 - 21 46
40
2400 1 - 14 0,14 - 5,70 9 - 15 25
3500 1- 5 0,55 - 16,08 3 - 39 17
50
CV 2400 1- 5 0,01 - 2,24 5 - 19 11
40 3500 1- 5 0,17 - 9,06 11 - 25 9
3500 2- 5 0,61 - 16,43 3 - 39 25
50
DIP 2400 2- 5 0,00 - 2,36 4 - 21 12
40 3500 2- 5 1,67 - 8,90 13 - 21 8
VI 30 - 45 2400 4 0,00 - 1,02 11 - 15 42
3500 0 - 14 1,23 - 19,63 17, 23, 28 26
3000 0 - 14 0,37 - 14,80 14, 19, 23 34
50
2400 0 - 14 0,18 - 8,97 11, 15, 18 49
1800 0 - 14 0,43 - 0,69 10, 11 3
3500 0 - 14 1,57 - 18,10 17, 22, 27 25
GI 45 3000 0 - 14 0,20 - 14,01 14, 19, 23 36
2400 0 - 14 0,00 - 7,96 10, 14, 17 33
3500 0 - 14 1,77 - 15,52 17, 22, 27 22
3000 0 - 14 0,00 - 12,66 13, 17, 21 38
40
2400 0 - 14 0,08 - 8,76 9, 12, 15 24
54

Figura 5.4: Distribuição dos dados dos testes bifásicos.

5.2.1 Fechamento da válvula choke (CV)

O fechamento da válvula de estrangulamento foi feito com um modelo de válvula globo proporcional
NT 1000 L mostrada na Figura 5.5, alterando sua abertura de 40 para 4%, em passos de 1, 2, 3, 4, 5 e
10%.

Figura 5.5: Válvula choke.

Para o caso do escoamento monofásico, as condições nas quais as falhas foram simuladas foram
apresentadas previamente. Enquanto que para escoamento bifásico, foram levadas em consideração as
55

seguintes condições de velocidade, temperatura e vazão mássica de gás: 3500 rpm - 40 ◦ C - 5 kg/h; 2400
rpm - 50 ◦ C - 4 kg/h; e 3500 rpm - 50 ◦ C - 2 kg/h.

5.2.2 Diminuição da pressão de entrada (DIP)

A variação da pressão de entrada foi simulada mudando a velocidade da bomba booster de 715 para
100 rpm, em passos de 10, 15, 20 e 30 rpm para as mesmas condições da válvula choke, tanto para
escoamento monofásico como para bifásico.

5.2.3 Aumento da viscosidade do fluido (VI)

O fluido utilizado é uma mistura de petróleo e diesel, cuja viscosidade dinâmica µ é afetada pela
temperatura T . Quanto maior a temperatura, menor é a viscosidade. Portanto, as variações da viscosidade
foram obtidas variando a temperatura do fluido através do sistema de aquecimento.

5.2.4 Aumento da fracção de gás (GI)

O ponto de máxima eficiência (BEP) é a condição operacional (vazão e ganho de pressão) onde é
obtida a máxima eficiência mecânica, η, dada por

q ∆p
η= (5.1)
τω
Há um BEP para cada temperatura e velocidade angular no escoamento monofásico. Para cada con-
dição operacional (velocidade angular e temperatura) os dados experimentais permitiram a determinação
do BEP. A vazão mássica de gás foi aumentada mantendo constante a vazão mássica de liquido em incre-
mentos entre 0,5 e 2 kg/h. Assim, a fração mássica foi alterada da condição sem gás até a bomba perder
toda a capacidade de transformar energia em pressão.
56

6 PROJETO DOS DADOS DE ENTRADA

O sucesso na detecção e classificação de falhas não depende apenas do algoritmo usado. O pré-
processamento, e seleção de características desempenham um papel fundamental para obter os resultados
esperados. Neste capítulo, o tratamento, rotulação e a seleção dos sinais são apresentados.
Cada uma das variáveis monitoradas sem fazer nenhum tratamento é chamada de x{raw}. Para
todos os testes realizados, os sinais adquiridos (Seção 5.2) foram tratados usando uma média móvel
simples dada por

i
1 X
xj = x{raw}j onde : j = 1, 2, 3, ... , m (6.1)
k
j=i−k

sendo j uma amostra do total m de amostras realizadas em um experimento, x cada variável tratada
representada (chamada aqui de característica), e k o número de amostras usadas para implementar a
média móvel. Como a frequência de amostragem é de 33 Hz, optou-se por utilizar a mesma quantidade
de amostras por segundo para o cálculo da média móvel (k = 33).

6.1 Seleção das variáveis

A ocorrência de qualquer uma das falhas simuladas provoca variações no tempo das variáveis moni-
toradas. No entanto, o comportamento dessas variáveis não é igual para todos os experimentos de uma
falha determinada. A Tabela 6.1 apresenta um resumo da resposta dessas características ao longo do
tempo para os experimentos bifásicos realizados. Um aumento na pressão é esperado quando ocorre um
fechamento abrupto da válvula de choke (CV). No entanto, para escoamento bifásico, isso nem sempre
é verificado. Para alguns experimentos, a pressão teve um aumento drástico (⇑), enquanto para outros
permaneceu constante (−→).
Considerando que existem variações ao longo do tempo quando qualquer uma das falhas acontece,
é possível calcular a derivada discreta {δx/δt}i para cada uma das características, definida para cada
amostra i como:

i
( ) !
δx 1 X xj − xj−1 xj+1 − xj
= + (6.2)
δt 2w tj − tj−1 tj+1 − tj
i j=i−k
57

Tabela 6.1: Comportamento das variáveis do sistema.

pin pout ∆p ṁ τ Tin W η

CV ⇑ ⇑ ⇑ ⇓ ⇑ ↑↓ ⇑ ⇑

− →
− →
− →
− →
− →

DIP ⇓ ⇓ ⇓⇑ ⇓ ⇓ ↑↓ ⇓ ⇓

− −
→ →
− →
− →
− →

VI ↑ −→ ↓ −→ −→ ⇓ ↓ ↓

GI ⇑ ⇓ ⇓ ⇓ ⇓ ↑↓ ⇓ ⇓

− →
− →
− →
− →
− →
− →

(−→) Constante no tempo, (↓↑) Mudanças leves no tempo,
(⇓⇑) Mudanças fortes no tempo.

Ao contrário do comportamento em escoamento monofásico, em escoamento bifásico as variáveis


monitoradas apresentam diferentes comportamentos para um mesmo tipo de falha como é observado na
Tabela 6.1. Portanto, a incorporação de novas variáveis, diferentes das medidas, facilita que o algoritmo
implementado realize a classificação das falhas. ∆p, W e η são então calculadas e consideradas como
variáveis de entrada.
Portanto, as variáveis selecionadas e usadas nesse trabalho são:

1. A pressão de entrada da BCS pin ;

2. A pressão de saída da BCS pout ;

3. O ganho de pressão da BCS, dado por

∆p = pout − pin

4. A vazão mássica de líquido ṁl ;

5. O torque τ ;

6. A temperatura de entrada da BCS Tin ;

7. A temperatura de saída da BCS Tout ;

8. A potência hidráulica dada por

ṁl ∆p
W =
ρ

9. A eficiência mecânica dada por

ṁl ∆p
η= (6.3)
ρT ω
58

10. As variações no tempo das variáveis monitoradas e calculadas, definidas por

δpin δ pout δ∆p δ ṁl δτ δTin δTout δW δη


, , , , , , , , e
δt δt δt δt δt δt δt δt δt
A matriz de características X é definida considerando cada coluna j como uma variável selecionada
e cada linha i como uma amostra. Para cada amostra i, as variáveis selecionadas são
"
δpin
xi = pin , pout , ∆p, ṁl , τ, Tin , Tout , W, η, ,
δt
# (6.4)
δpout δ∆p δ ṁl δτ δTin δTout δW δη
, , , , , , ,
δt δt δt δt δt δt δt δt

6.2 Rotulação dos dados

A rotulação de dados é um processo no qual os relacionamentos entre as variáveis de entrada da


Árvore de Decisão (pressão, vazão, torque, eficiência e potência) e o resultado esperado (Normal, CV,
DIP, VI, e GI) são criados. Uma metodologia de rotulação eficaz pode melhorar os resultados de um
modelo baseado em dados. A técnica usada para rotular a falha na classificação supervisionada com base
em conjuntos de dados históricos é nomeada como state-driven [37].
No método state-driven, o histórico de dados de uma máquina pode ser categorizado em pelo menos
dois estados, defeituoso e saudável. A Janela de Predição é definida como aquela em que o sistema está
em um estado defeituoso e é delimitada pelos tempos ti1 e ti2 . Por outro lado, tc é estabelecido como
o tempo no qual o atuador usado para simular a falha é ativado. A delimitação da Janela de Predição é
explicada para cada uma das falhas simuladas a seguir.

6.2.1 Fechamento da válvula choke (CV)

Considere uma variável monitorada em um experimento como xtj , com um número total de amostras
m e com k amostras para calcular a média móvel. A variância média swi e a variância remanescente si
para uma amostra i são respectivamente definidas como

i+k i+k
1 X 2 1X
swi (xtj ) = xi − x̄i onde : x̄i = xi (6.5)
k k
i=i i=i

m n
1 X 2 1X
si (xtj ) = xi − x̄i onde : x̄i = xi (6.6)
k k
i=i i=i
59

O tempo ti1 em que a falha começa é definido quando swi ≥ max(sw1 , ..., swc ), sendo swc a
variância média no tempo tc . O tempo ti2 , onde a janela de previsão termina é determinado quando
si ∼
= 0.
Os tempos ti1 e ti2 são calculados para as variáveis pin , pout e ṁl , selecionando o mínimo ti1 e o
máximo ti2 de acordo com a Janela de Predição.
As figuras 6.1, 6.2 e 6.3 exemplificam a rotulação de um fechamento da válvula choke para um dos
experimentos. A abertura da válvula mudou de 12% para 10% aos 2 segundos de operação (tc = 2 s), e
a Janela de Predição é definida aproximadamente entre 6 e 27 segundos (ti1 = 6 s e ti2 = 27 s).

Figura 6.1: Fechamento da válvula choke (CV).

Figura 6.2: Rotulação do fechamento da válvula choke (CV) com sw.


60

Figura 6.3: Rotulação do fechamento da válvula choke (CV) com s.

6.2.2 Diminuição da pressão de entrada (DIP)

A falha DIP foi rotulada da mesma forma que o fechamento da válvula de estrangulamento (CV)
descrita anteriormente.

6.2.3 Aumento da viscosidade do fluido (VI)

As variações da viscosidade ocorrem lentamente. Portanto, para determinar se a viscosidade está


variando ou não, um valor mínimo de variância swi da temperatura de entrada da bomba Tin foi escolhido
baseado no comportamento das variáveis nos experimentos.
A janela de predição está delimitada por um tempo ti1 definido como aquele em que swi (Tin ) ≥
2 × 10−5 , e um tempo ti2 como aquele em que swi (Tin ) ≤ 2 × 10−5 , sendo swi a variância média
definida na Equação 6.5.

6.2.4 Aumento da fracção de gás (GI)

Para o aumento da fração de gás, ti1 é o tempo em que ti < tmax e swi ∼
= 0, e ti2 é o tempo em que
∼ 0; sw é o a variância média definida na Equação 6.5, e tmax é o tempo em que swi
ti > tmax e swi =
atinge o valor máximo.
Os tempos ti1 e ti2 são calculados para pin , pout , ṁ e ṁg , selecionando o mínimo ti1 e o máximo
ti2 . As Figura 6.4 e 6.5 mostram a rotulação de um aumento de gás de aproximadamente 0,5 kg/h.
61

Figura 6.4: Aumento da fração de gás (GI).

Figura 6.5: Rotulação do aumento da fração de gás (GI).


62

7 IMPLEMENTAÇÃO DA ÁRVORE DE DECISÃO

As Árvores de Decisão são fluxogramas em que um conjunto de dados é dividido em subconjuntos


de acordo com uma regra baseada nos padrões de comportamento de características predeterminadas
(variáveis de entrada). A geração automática de regras na forma de Árvores de Decisão tem sido estudada
em engenharia, estatística e reconhecimento de padrões. Estes algoritmos apresentam várias vantagens
sobre outras técnicas de mineração de dados, como a robustez ao ruído, o baixo custo computacional
para gerar o modelo e a capacidade de lidar com característica redundantes [33]. Diversas metodologias
para indução de Árvores de Decisão foram desenvolvidas, por exemplo, as conhecidas como ID3, CART,
C4.5 e C5.0.
Duas estruturas de Árvore de Decisão foram usadas neste trabalho, Classificadores de Árvore de
Decisão denominados aqui como AD e Cadeia de Árvores de Decisão nomeadas aqui como CAD. A
implementação destes na linguagem de programação Python e a seleção de seus parâmetros são apresen-
tadas na sequência.

7.1 Árvore de Decisão (AD)

A Árvore de Classificação e Regressão (Classification and Regression Trees CART) é um método


amplamente usado para a construção de Árvores de Decisão univariavel. Para variáveis de entrada dis-
cretas, o algoritmo cria árvores binárias a partir dos dados considerando todas as possíveis divisões do
conjunto em dois subconjuntos disjuntos e complementares. A melhor estimativa de divisão é feita pela
redução de um critério de impureza [32]. Uma implementação otimizada do algoritmo CART, foi apre-
sentada por Pedregosa et al. [38] na linguagem de programação Python. O procedimento para obter
Árvores de Decisão por esse método e seu uso na previsão de falhas em BCS no caso desse trabalho é
definida da seguinte maneira:

1. Os experimentos das falhas simuladas (CV, DIP, IV, IG) e os testes no estado considerado sem
falha (Normal) foram aleatoriamente organizados como é apresentado na secção 5.2. Essas condi-
ções do sistema são chamadas de rótulos. Os pontos dentro da Janela de Predição foram rotulados
com o valor correspondente do vetor de rótulos l (tamanho `), i.e.,

h i
l = Normal, CV, DIP, VI, GI onde : `=5 (7.1)
63

Amostra 1 GI
X y
Amostra 2 GI
=>
Experimento 1 Falha 1 Amostra i GI

.... ....

Experimento 2 Falha 2

=>
Amostra 1 CV
Experimento i Falha i
Amostra 2 CV
=>
... Amostra i CV
...
.... ....

Figura 7.1: Distribuição dos experimentos em X e y.

2. Para a construção da matriz de dados X, os dados dos experimentos foram organizados como
mostra a Figura 7.1. O vetor objetivo y é definido considerando que cada linha da matriz X
corresponde a uma amostra de algum experimento e possui o estado correspondente yi , que só
pode ter um rótulo discreto do vetor l, ou seja,

   
x1,1 x1,2 x1,j ··· x1,n y1
   
 x2,1
 x2,2 x2,j ··· x2,n 

 y2 
 
 x3,1 x3,2 x3,j · · · x3,n   y3 
   
X= ; y=  (7.2)
 xi,1
 xi,2 xi,j · · · xi,n 

 yi 
 
 . .. .. .. ..   . 
 .. . . . .   .. 
   
xm,1 xm,2 xm,j · · · xm,n ym

3. O vetor de pesos λ é calculado para compensar o desequilíbrio no número de amostras por classe.
Cada rótulo tem um peso correspondente denotado por λj com base no número de rótulos `, no
número total de amostras m e no número total de amostras por classe mj , de acordo com:

h i m
λ = λN ormal , λCV , λDIP , λV I , λGI onde : λj = (7.3)
` mj

4. Para o conjunto de dados de treinamento (X, y), a Árvore de Decisão divide os dados em parti-
ções. Os dados são divididos a partir do nó raiz Φ0 , considerando cada candidato φ para dividir
a árvore como (xtj , γ), onde xtj é cada um dos vetores de variáveis que compõem a matriz X, e
γ é um número entre x1,j e xm,j . Cada nó Φ é dividido em dois nós subsequentes Φlef t e Φright
como mostrado a seguir.

Φlef t (φ) = (X, y) | xi,j ≤ γ


(7.4)
Φright (φ) = (X, y) | xi,j > γ
64

5. A impureza = é uma medida da heterogeneidade dos dados em um nó Φ. Se a impureza é menor,


a divisão dos dados é melhor em termos de homogeneidade. Portanto, o limite φ selecionado para
dividir os dados é aquele que minimiza a média ponderada da impureza =(Φ). Considerando h̄
como o número de amostras no nó atual e h̄lef t e h̄right como os números de amostras nos novos
nós formados (h̄ = h̄lef t + h̄right ), tem-se

!
h̄lef t h̄right
φ = min =(Φlef t ) + =(Φright ) (7.5)
h̄ h̄

6. Dois critérios de impureza são levados em consideração. Os cálculos dos critérios Gini e Entropia
são:

`
X
=Gini (Φ) = 1 − θj 2 onde : θj = λj sj (7.6)
j=1

`
X
=entropy (Φ) = − θj onde : θj = λj sj (7.7)
j=1

7. A árvore continua expandindo (etapas 4 a 6) até atingir um critério de parada determinado. Se


o critério de parada for cumprido, cada nó é marcado como uma folha e definido com o tipo de
classe que possui o maior número de amostras. O critério de parada é escolhido determinando o
máximo número de folhas (mln).

7.2 Cadeia de Árvores de Decisão (CAD)

A Cadeia de Árvores de Decisão é definida aqui como o uso sequencial de duas Árvores de Decisão.
A primeira realiza a classificação dos estados e a outra um refinamento dessa classificação. A Figura 7.2
mostra a estrutura da CAD, e o processo de desenvolvimento é descrito como:

Árvore de Classificação: O processo de classificação é realizado com o mesmo processo desenvolvido


para a AD. Se a classe for Normal, esse estado será selecionado. Caso contrário, uma nova
classificação é feita no passo seguinte.

Árvore de Refinamento: A construção da árvore é executada da mesma forma que a árvore de classifi-
cação. Contudo, o conjunto de dados X é reduzido, selecionando apenas aqueles que apresentam
falha (excluindo a condição Normal). Portanto, o vetor de rótulos l é [CV, DIP, V I, GI] para
escoamento bifásico e [CV, DIP, V I] para escoamento monofásico.
65

Dados de Entrada X

Árvore de
Classificação

y1 X

não sim
Está em estado de falha
(CV, DIP, IV, GI) ?

Normal Melhorar
CLassificação
CV
X

Tipo
Árvore de
DIP de
Refinamento
Falha?
y2
GI

VI

Figura 7.2: Estrutura de uma CAD.

7.3 Máximo número de folhas

O sobre-treinamento é um desafio comum em aplicações de mineração de dados. Para evitar esse


problema em Árvores de Decisão, um número máximo de folhas (mln) é estabelecido. A determinação
do número máximo de ramificações que melhor resolve o problema é realizada por uma metodologia de
validação cruzada K-folds [39]. Em primeiro lugar, o conjunto completo de dados é divido aleatoria-
mente em seis grupos, cinco partes para o procedimento de treinamento e validação (K-folds), e a parte
restante para testar o algoritmo projetado. As tabelas 7.1 e 7.2 apresentam a distribuição de dados usada
para a validação cruzada para escoamento monofásico e bifásico respectivamente. Em cada um dos gru-
pos apresentados nestas tabelas, procura-se ter aproximadamente a mesma quantidade de experimentos
por classe, evitando ter grupos sem alguma das classes e garantindo que o grupo de teste possua expe-
rimentos que não foram usados na construção das Árvores de Decisão AD e CAD. Os códigos usados
para a construção destas estruturas (AD e CAD) são apresentados no Apêndice A.
66

Tabela 7.1: Distribuição dos experimentos de escoamento monofásico.

Treinamento, Validação K Grupo de


Total
1 2 3 4 5 Teste

Normal 31 31 32 31 31 32 188
CV 4 4 5 4 4 5 26
DIP 5 5 6 5 5 6 32
VI 1 2 2 1 2 2 10

Total 41 42 45 41 42 45 256

Tabela 7.2: Distribuição dos experimentos de escoamento bifásico.

Treinamento, Validação K Grupo de


Total
1 2 3 4 5 Teste

Normal 65 65 66 65 65 66 392
CV 6 6 6 6 6 7 37
DIP 7 8 7 8 7 8 45
VI 7 7 7 7 7 7 42
GI 48 48 49 48 48 49 290
Total 133 134 135 134 133 137 806

Um procedimento de validação cruzada K - folds com K = 5 é implementado como apresentado na


sequência:

1. Para um determinado número de folhas z, o procedimento de treinamento apresentado na Sec-


ção 7.1 (expressado aqui com a função train) é realizado usando quatro dos cinco grupos de
dados apresentados nas tabelas 7.1 e 7.2. Cinco funções de previsão são encontradas para cada
uma das combinações possíveis. Cada função de predição fj é determinada por

 
fj X) = train X K−j
train , y K−j
train , z (7.8)

2. Cada uma das funções de previsão é usada para prever os resultados do grupo que não foi utilizado
no procedimento de treinamento, de acordo com

y jpred = fj X jval

(7.9)
67

3. O critério de validação é selecionado entre:

(a) A exatidão geral sts definida por

T otal de acertos
sts =
T otal de amostras

(b) A média aritmética da diagonal principal da matriz de confusão cmmean . A matriz de con-
fusão é um layout de tabela específica que permite a visualização do desempenho de um
algoritmo. Cada linha da matriz representa os experimentos de uma classe, enquanto cada
coluna representa as previsões de uma classe. O nome deriva do fato de que fica mais fácil
ver se o sistema está confundindo duas classes. Um exemplo de uma matriz de confusão é
apresentado na Figura 7.3.
(c) O mínimo da diagonal principal da matriz de confusão cmmin .

C1 0,80 0,10 0,03 0,07 = 1,00


Valores reais

C2 0,00 0,90 0,00 0,10

C3 0,15 0,20 0,60 0,05

C4 0,00 0,01 0,00 0,99

C1 C2 C3 C4

Valores previstos

Figura 7.3: Exemplo de uma matriz de confusão

4. O processo de validação (val) é realizado comparando os dados previstos (ypred ) com os dados
esperados (yval ) através do critério selecionado. Então, a função g(z) é encontrada como a média
dos critérios de validação da seguinte maneira:

K
1 X  j 
g(z) = val y pred , y jval (7.10)
K
j=1

5. O mln selecionado é obtido quando g(z) é máximo, ou seja,

mln = arg max g(z) (7.11)

O teste é realizado com o critério de parada mln selecionado, os cinco primeiros grupos como
conjunto de dados de treinamento e o grupo restante para avaliação.
68

8 RESULTADOS E DISCUSSÕES

Neste trabalho, o objetivo principal é determinar se a bomba está operando em condições normais ou
não. Se a bomba estiver em situação de falha, o alvo é descobrir o respectivo tipo da falha. Experimentos
foram realizados na bancada experimental para atingir esse objetivo. Falhas e condições estáveis foram
simuladas em diferentes condições para uma ampla faixa de operação conforme descrito na Seção 5.
Em seguida, os experimentos foram cuidadosamente rotulados e as variáveis de entrada selecionadas
como é apresentado na Seção 6. Finalmente, o algoritmo apresentado na Seção 7 foi implementado nas
condições de escoamento monofásico e bifásico.

8.1 Escoamento monofásico

Para obter uma melhor detecção e segregação de falhas, deve-se evitar o sobre-treinamento do al-
goritmo e as soluções particulares. A seleção de um número máximo de folhas mln permite evitar o
sobre-treinamento. Não obstante, a escolha de um mln arbitrário pode levar a uma solução boa ape-
nas para o conjunto de dados testado. Para evitar essas soluções particulares, um processo de validação
cruzada é usado. O número total de experimentos é dividido em dois grupos: um grupo com aproxima-
damente 83,33% dos dados usado na seleção do número máximo de folhas (Treinamento-Validação), e
outro grupo com 16,67% reservados para testar o algoritmo proposto com o mln selecionado. A distri-
buição dos experimentos realizada é apresentada na Tabela 8.1, tendo 211 experimentos para a seleção
do mln mediante o processo de validação cruzada proposto e 45 experimentos para o teste do algoritmo.
Dos enfoques são levados em consideração para a classificação de falhas, um baseado no uso de uma
Árvore de Decisão tipo CART proposto na Seção 7.1 e outro na Cadeia de Árvores de Decisão descrita
na Seção 7.2.

8.1.1 Árvore de Decisão AD

Seleção dos parâmetros

Para obter uma boa classificação das falhas é necessário maximizar a exatidão geral sts, a média
da diagonal principal da matriz de confusão cmmean e o mínimo da matriz de confusão cmmin . Esses
três critérios de parada são testados tanto para o critério de impureza Gini como para o de Entropia no
processo de validação cruzada. Na Tabela 8.1 são apresentados os valores de mln correspondentes aos
melhores resultados para esses três critérios de parada na validação.
69

Tabela 8.1: Máximos de sts, cmmean e cmmin para a AD na validação em escoamento monofásico.

Critério de parada
sts cmmean cmmin

% 87,36 88,41 77,81


Gini
mln 5 8 8
Impureza
% 87,48 85,89 65,75
Entropia
mln 5 5 5

Note-se que para o critério Gini, a máxima exatidão geral é obtida com 5 folhas (mln), no entanto
os máximos de cmmean e cmmin são obtidos com 8 folhas. Por outro lado para o critério de Entropia,
para os três casos testados, o melhor resultado corresponde a 5 folhas.
Nesse caso, o critério de Gini teve um melhor desempenho na classificação por falha (cmmean e
cmmin ) para 8 folhas. Portanto, para a árvore de classificação foi escolhido o critério de impureza
Gini com mln=8. A exatidão geral sts para 8 folhas é 86,93% somante 0,43% abaixo do melhor valor
(87,36%) apresentado com 5 folhas.

Teste

Depois da seleção do número de folhas mln feita mediante o processo de validação cruzada, é
necessário verificar se esse parâmetro escolhido leva a uma boa generalização do algoritmo. Para essa
finalidade, uma nova árvore com a totalidade dos dados usados na validação cruzada e com os parâmetros
escolhidos (Gini e mln=8) foi treinada, para posteriormente ser testada com os dados restantes que não
foram usados em nenhuma parte do processo de seleção dos parâmetros.

Treinamento Validação Min/Max Teste


0.90

0.85

0.80
sts

0.75

0.70

0.65
4 6 8 10 12 14 16 18 20
Folhas
Figura 8.1: Tendência de sts para a AD em escoamento monofásico.
70

Treinamento Validação Min/Max Teste


0.950
0.925
0.900
0.875
cmmean

0.850
0.825
0.800
0.775
0.750
4 6 8 10 12 14 16 18 20
Folhas
Figura 8.2: Tendência de cmmean para a AD em escoamento monofásico.

Treinamento Validação Min/Max Teste


0.9

0.8

0.7
cmmin

0.6

0.5

4 6 8 10 12 14 16 18 20
Folhas
Figura 8.3: Tendência de cmmin para a AD em escoamento monofásico.

As figuras 8.1, 8.2 e 8.3 apresentam uma comparação das tendências para os três critérios de parada
com Gini como critério de impureza. Para o treinamento e validação, os valores correspondem à média
aritmética dos resultados obtidos a partir da validação cruzada, enquanto que para os dados do teste, o
valor foi encontrado usando o sexto grupo de dados, e 83,3% restantes dos dados para treinamento.
Na Figura 8.1 observa-se que o valor máximo de exatidão geral para os dados de teste é atingido com
13 folhas e corresponde a 82,67%, enquanto que para o valor selecionado de 8 folhas a exatidão geral
fica em 80,46%.
Nas figuras 8.2 e 8.3, observa-se que para os dados de teste os máximos de cmmean e cmmin são
alcançados para 11 folhas, e são de 83,63% e 66,98% respectivamente, enquanto que para o valor seleci-
onado de 8 folhas, os valores de cmmean e cmmin são de 81,92% e 61,29% respectivamente.
71

Com 11 folhas é obtida a melhor exatidão geral para os dados de teste, enquanto que com 13 folhas a
cmmean e cmmin são maximizados. Embora esses resultados sejam melhores do que a solução escolhida,
estas são soluções particulares, que são boas apenas para o conjunto de dados de teste, e não representam
um comportamento geral do algoritmo.

8.1.2 Cadeia de Árvores de Decisão CAD

A Cadeia de Árvores de Decisão consta de duas Árvores de Decisão organizadas em série: uma
árvore de classificação, onde se classifica um evento em qualquer um dos estados estabelecidos, seja
normal ou falha (CV, DIP ou VI); e outra árvore de refinamento usada no pós-processamento dos dados,
fazendo a classificação no caso de haver falha. Nas duas árvores, o número máximo de folhas mln é
selecionado como aquele que apresenta o melhor resultado na validação.
Para a árvore de classificação os parâmetros de construção (a impureza e o critério de parada) são
Gini e 8 folhas iguais aos da AD. Enquanto que para a árvore de refinamento a seleção dos parâmetros é
apresentada no restante da presente Seção.

Seleção dos parâmetros

Da mesma maneira que para a AD, para a árvore de refinamento é desejado maximizar sts , cmmean
e cmmin , avaliando-se os dois critérios de impureza Gini e Entropia mediante a validação cruzada. Na
Tabela 8.2 é apresentada a quantidade de folhas, onde são obtidos os valores máximos para cada um dos
três critérios de parada usando o conjunto de dados de validação.

Tabela 8.2: Máximos de sts, cmmean e cmmin para a árvore de refinamento da CAD em escoamento
monofásico.

Critério de parada
sts cmmean cmmin

% 92,14 93,55 83,23


Gini
mln 6 6 6
Impureza
% 88,04 89,94 73,05
Entropia
mln 7 7 8

Pode-se observar na Tabela 8.2 que os dados obtidos com o critério Gini apresentam melhores resul-
tados do que os dados obtidos com o critério de Entropia. Além disso, tanto para a exatidão geral como
para cmmean e cmmin , os máximos são atingidos para 6 folhas. Portanto, os parâmetros escolhidos para
a árvore de classificação são Gini e 6 folhas.
72

Teste

Inicialmente, com os parâmetros selecionados mediante o processo de validação cruzada (critério de


impureza Gini com 6 folhas) e os cinco grupos de dados usados nesse processo foi realizado o treina-
mento. Posteriormente, a disposição obtida foi testada com o grupo de dados separado para teste.
As figuras 8.4, 8.5 e 8.6 apresentam uma comparação das tendências para os três critérios de parada
com Gini como critério de impureza no caso da árvore de refinamento. Para o treinamento e validação,
os valores correspondem à média aritmética dos resultados obtidos a partir da validação cruzada, en-
quanto que para os dados do teste sts, cmmean e cmmin são calculados mediante o processo descrito no
parágrafo anterior (83,3% dos dados para treinamento e o restante para teste).
Na Figura 8.4 observa-se que o valor máximo de exatidão geral para os dados de teste e validação
foi atingido com 6 folhas e corresponde a 95,68%.
Nas figuras 8.4, 8.5 e 8.6 observa-se que tanto para os dados de teste como para os de validação, os
máximos de sts, cmmean e cmmin são obtidos com mln de 6, e são respectivamente 95,68%, 96,00% e
91,63%.
Finalmente, para o caso do árvore de refinamento tem-se que os melhores resultados dos dados
de teste e validação coincidem no mesmo número máximo de folhas. Verifica-se que para o sistema
estudado, bastam somente seis divisões das variáveis para determinar qualquer um dos tipos de falha na
condição de escoamento monofásico.
Um resumo dos parâmetros escolhidos para construir o classificador de CAD é apresentado na Ta-
bela 8.3.

Treinamento Validação Min/Max Teste


1.00

0.95

0.90
sts

0.85

0.80

0.75
4 6 8 10 12 14 16 18 20
Folhas
Figura 8.4: Tendência de sts para a árvore de refinamento da CAD em escoamento monofásico.
73

Treinamento Validação Min/Max Teste


1.00

0.95

0.90
cmmean

0.85

0.80

4 6 8 10 12 14 16 18 20
Folhas
Figura 8.5: Tendência de cmmean para a árvore de refinamento da CAD em escoamento monofásico.

Treinamento Validação Min/Max Teste


1.0

0.9

0.8
cmmin

0.7

0.6

0.5
4 6 8 10 12 14 16 18 20
Folhas
Figura 8.6: Tendência de cmmin para a árvore de refinamento da CAD em escoamento monofásico.
74

Tabela 8.3: Parâmetros da CAD para escoamento monofásico.

Critério de Rótulos de Características


mln
Impureza Classes Selecionadas

pin , pout , ∆p, ṁ, τ, Tin ,


Árvore de [Normal,
Gini 8 Tout , W, η, δpin /δt,
Classificação CV, DIP, VI, GI]
δpout /δt, δ∆p/δt,
δ ṁ/δt, δτ /δt,
Árvore de δTin /δt, δTout /δt,
Gini 6 [CV, DIP, VI, GI]
Refinamento δW/δt, δη/δt

8.1.3 Comparação AD e CAD

Dois conceitos diferentes foram levados em conta no algoritmo: Detecção, como a capacidade de
determinar se o sistema está em falha, e Classificação para determinar o tipo de falha. A exatidão geral
sts apresenta limitações para avaliar esses dois critérios, principalmente em cenários onde não se tem a
mesma quantidade de dados de cada classe.
Um método amplamente utilizado para avaliar o erro na classificação em problemas de segregação
é a matriz de confusão, uma matriz quadrada, em que os dados da diagonal principal representam a
porcentagem de sucesso na classificação para cada falha individual, e os demais valores da cada linha
correspondem àquelas que foram classificadas incorretamente. A soma dos dados de cada linha é igual a
um e corresponde à quantidade total de dados testados por falha.
Quando há apenas duas classes, a matriz de confusão é conhecida como tabela de confusão, e esta
composta de verdadeiros positivos, falsos positivos, verdadeiros negativos e falsos negativos, lendo-os
da esquerda para a direita, de cima para baixo.
A Figura 8.7 apresenta a tabela de confusão obtida para a AD. Os resultados mostram que 85%
dos dados de testes considerados normais foram corretamente identificados, enquanto que 15% foram
incorretamente reconhecidos. 80% das falhas simuladas foram reconhecidas com sucesso também.

Normal 0,85 0,15


Valor Real

Falha 0,20 0,80


Normal Falha
Predição

Figura 8.7: Tabela de confusão para a AD em escoamento monofásico.


75

Normal 0,85 0,12 0,03 0,00

CV 0,32 0,61 0,06 0,00

Valor Real
DIP 0,17 0,01 0,82 0,00

VI 0,00 0,00 0,00 1,00

Normal CV DIP VI
Predição

Figura 8.8: Matriz de confusão para a AD em escoamento monofásico.

Normal 0,85 0,09 0,05 0,01

CV 0,32 0,68 0,00 0,00


Valor Real

DIP 0,17 0,03 0,80 0,00

VI 0,00 0,00 0,00 1,00

Normal CV DIP VI
Predição

Figura 8.9: Matriz de confusão para a CAD em escoamento monofásico.

A Figura 8.8 apresenta a matriz de confusão para a AD. Como era esperado, a percentagem de
sucesso para a classe Normal é a mesma que a apresentada na Figura 8.7. Com relação aos demais
estados tem-se que:

• O estado com a melhor classificação é VI;

• O fechamento da válvula choke CV teve a maior porcentagem de falhas não detectadas (32%), e
6% restantes foram classificados como aumento na pressão de entrada;

• 17% dos experimentos simulados para a diminuição da pressão de entrada não foram detectados
como falhas, e só um 1% foi classificado erroneamente como CV.
76

A tabela de confusão e a matriz de confusão das figuras 8.7 e 8.8 mostram um bom resultado na
segregação das classes para a AD. A Figura 8.9 apresenta uma matriz de confusão do conjunto de dados
de teste para a Cadeia de Árvores de Decisão (CAD). Nesse caso, tem-se que:

• A classificação da falha CV melhora em 7%;

• O erro na classificação da falha DIP aumenta em 2%.

A Tabela 8.4 apresenta uma comparação dos resultados obtidos com a Árvore de Decisão e a Cadeia
de Árvores de Decisão. Pode-se observar que para as três métricas analisadas, a metodologia proposta
(CAD) melhora o resultado obtido com uma Árvore de Decisão.

Tabela 8.4: Comparação AD-CAD para escoamento monofásico.

sts cmmean cmmin

AD 80,46% 81,92% 61,29%


CAD 81,69% 83,15% 67,66%

A Figura 8.10 apresenta a árvore de refinamento do algoritmo CAD. Observa-se que uma série de
cinco perguntas sucessivas são suficientes para fazer a classificação das falhas. Estas perguntas podem
ser interpretadas como:

Nó 0: A temperatura de entrada está acima de 40 ◦ C?

Nó 1: A pressão na saída da BCS diminui?

Nó 3: A vazão mássica está abaixo de 29,87 kg/s?

Nó 4: A pressão na entrada da BCS aumenta?

Nó 7: A vazão mássica está abaixo de 29,36 kg/s?

A divisão dos dados da árvore foi feita minimizando a heterogeneidade mediante a diminuição do
critério de impureza Gini. A árvore de classificação apresentada na Figura 8.10 começa no nó #0 com
a divisão de 34251 amostras usadas no treinamento, com um Gini de 0,667. Nos nós #1 e #2, o Gini
diminui para 0,5 e 0,0 respectivamente. Levando em conta o número de amostras, a média ponderada do
Gini desses valores seria então 0,39. Pode-se observar, na respectiva ordem, que cada um dos nós tem:

• O número do nó na ordem que foi criado;

• O valor de impureza Gini nesse nó;

• A quantidade de amostras totais no nó;

• A quantidade de amostras por classe [CV, DIP, VI];

• A classe com que é nomeado o nó.


77

node #0
Tin [ oC] ≤ 40.626
gini = 0.667
samples = 34251
value = [11417.0, 11417.0, 11417.0]
class = VI
True
False
node #1
node #2
dPout /dt ≤ 239.315 gini = 0.0
gini = 0.5 samples = 7750
samples = 26501 value = [0.0, 0.0, 11417.0]
value = [11417.0, 11417.0, 0.0]
class = DIP class = VI

node #3 node #4
M [kg/s] ≤ 29.87 dPin /dt ≤ -126.147
gini = 0.122 gini = 0.153
samples = 12496 samples = 14005
value = [727.83, 10444.977, 0.0] value = [10689.17, 972.023, 0.0]
class = DIP class = CV

node #7
node #5 node #6 node #8
M [kg/s] ≤ 29.36
gini = 0.073 gini = -0.0 gini = 0.066
gini = 0.498
samples = 12111 samples = 385 samples = 12464
samples = 1541
value = [409.404, 10444.977, 0.0] value = [318.425, 0.0, 0.0] value = [9983.672, 353.381, 0.0]
value = [705.498, 618.642, 0.0]
class = DIP class = CV class = CV class = CV
node #9 node #10
gini = 0.124 gini = 0.0
samples = 741 samples = 800
value = [43.835, 618.642, 0.0] value = [661.663, 0.0, 0.0]
class = DIP class = CV
Figura 8.10: Árvore de refinamento da CAD em escoamento monofásico.

/ t
W/ t
Tout/ t
Tin/ t
/ t
m/ t
p/ t
Característica

pout/ t
pin/ t
W
Tout
Tin
m
p
pout
pin
0 10 20 30 40 50
Importância %
Figura 8.11: Importância das variáveis da árvore de refinamento da CAD em escoamento monofásico.

Somente 4 das variáveis monitoradas foram necessárias para a construção da árvore de refinamento.
Nesse processo de treinamento é possível determinar quais variáveis permitiram classificar mais dados,
78

obtendo-se o gráfico apresentado na Figura 8.11. As variáveis preponderantes são ṁ, Tin , δpout δt e
δpin δt.

8.2 Escoamento bifásico

Para os testes bifásicos foi implementado um procedimento semelhante ao caso monofásico, levando
em consideração uma falha adicional GI, tendo-se cinco possíveis estados: Normal, CV, DIP, VI e GI.
Uma validação cruzada foi implementada na seleção do máximo número de folhas. Seguidamente, o
mln que tenha o melhor comportamento com os dados de validação é selecionado para avaliar a estru-
tura obtida com o conjunto de dados de teste, corroborando assim que a solução escolhida é uma boa
generalização para o problema.

8.2.1 Árvore de Decisão AD

Para a AD, sts é selecionado como um critério de parada para maximizar a eficiência na classificação,
embora algumas classes sejam melhor segregadas do que outras. Os dois critérios de impureza foram
testados com o conjunto de dados de validação, obtendo uma precisão de 75,98% para Gini e 76,27%
para Entropia. Por causa disso, a Entropia foi selecionada como critério de impureza.

Treinamento Validação Min/Max Teste


0.850
0.825
0.800
0.775
sts

0.750
0.725
0.700
0.675
10 20 30 40 50 60
Max. Nós de Folha mln
Figura 8.12: Tendência de sts para a árvore de classificação da CAD em escoamento bifásico.

Inicialmente, a estrutura do algoritmo foi determinada. A Figura 8.12 apresenta a seleção das fo-
lhas máximas mln para a árvore de classificação usando Entropia como critério de impureza. Para o
treinamento e validação, os valores correspondem à média aritmética dos resultados obtidos a partir da
79

validação cruzada, enquanto que para os dados do teste o valor foi encontrado com o grupo separado para
essa finalidade, empregando 83,3% restantes dos dados para treinamento. O desvio padrão acompanha
os resultados da validação.
O conjunto de dados de teste alcançou o melhor sts para 50 folhas, enquanto o conjunto de validação
atingiu esse critério para 55 folhas. De acordo com a metodologia proposta, o valor de mln selecionado
é 55.

8.2.2 Cadeia de Árvores de Decisão CAD

Para a árvore de classificação os parâmetros de construção (a impureza e o critério de parada) são


Entropia e 55 folhas iguais aos da AD. Enquanto que para a árvore de refinamento as seleção dos parâ-
metros é apresentada no restante da presente Seção.

Treinamento Validação Min/Max Teste


0.95
0.90
0.85
cmmean

0.80
0.75
0.70
0.65
0.60
10 20 30 40 50 60
Max. Nós de Folha mln
Figura 8.13: Tendência de cmmean para a árvore de refinamento da CAD em escoamento bifásico.

O critério cmmean foi selecionado como o critério de parada para a árvore de refinamento. A Fi-
gura 8.13 apresenta o cmmean como uma função do mln usando o Gini como um critério de impureza.
A validação e o conjunto de dados de teste alcançaram o máximo de cmmean para mln=18, sendo este
valor escolhido.
Um resumo dos parâmetros escolhidos para construir o classificador é apresentado na Tabela 8.5.
80

Tabela 8.5: Parâmetros da CAD para escoamento bifásico.

Critério de Rótulos de Características


mln
Impureza Classes Selecionadas

Pin , Pout , ∆P , M, τ,
Árvore de [Normal,
Entropia 55 Tin , Tout , Π, η, δPin /δt,
Classificação CV, DIP, VI, GI]
δPout /δt, δ∆P/δt,
δM/δt, δτ /δt,
Árvore de δTin /δt, δTout /δt,
Gini 18 [CV, DIP, VI, GI]
Refinamento δΠ/δt, δη/δt

8.2.3 Comparação AD e CAD

A tabela de confusão obtida para a AD é mostrada na Figura 8.14. Os resultados mostram que
86% dos dados de teste considerados normais foram corretamente identificados, enquanto que 14% fo-
ram incorretamente reconhecidos. 89% das falhas simuladas foram reconhecidas com sucesso também
apresentando um bom resultado na detecção de falhas.

Normal 0,86 0,14


Valor Real

Falha 0,11 0,89


Normal Falha
Predição

Figura 8.14: Tabela de confusão para a AD em escoamento bifásico.

A Figura 8.15 mostra a matriz de confusão para a AD definida. O estado com melhor classificação é
o VI. O GI exibiu 72% de sucesso e a maioria das confusões foi identificada como estado normal (23%).
Ou seja, embora a falha não seja detectada, ela não é confundida com outro tipo de falha. CV e DIP
apresentaram os piores resultados de classificação, confundindo com outros tipos de falha.
A tabela de confusão e a matriz de confusão (figuras 8.14 e 8.15) para uma AD mostram que a
segregação de classes requer uma melhoria na estrutura do algoritmo. Como 89% das amostras estão
corretamente agrupados no estado de falha, é possível redistribuir as amostras em um estado correto
(CV, DIP, VI, ou GI). A distribuição sugerida para essas amostras foi feita com a árvore de refinamento.
A Figura 8.16 apresenta a matriz de confusão do conjunto de dados de teste para a estrutura projetada
(CAD). A classificação da falha CV apresenta um aprimoramento significativo, enquanto que a clas-
81

sificação da falha DIP permanece igual. No entanto, as classes VI e GI apresentam maiores erros de
classificação.

Normal 0,86 0,06 0,02 0,00 0,06

Valor Real CV 0,00 0,51 0,17 0,00 0,32

DIP 0,10 0,16 0,64 0,00 0,10

VI 0,01 0,00 0,00 0,99 0,01

GI 0,23 0,02 0,03 0,00 0,72


Normal CV DIP VI GI
Predição

Figura 8.15: Matriz de confusão para a AD em escoamento bifásico.

Normal 0,86 0,04 0,03 0,00 0,07

CV 0,00 0,80 0,04 0,01 0,15


Valor Real

DIP 0,10 0,14 0,64 0,00 0,13

VI 0,01 0,00 0,02 0,91 0,06

GI 0,23 0,12 0,03 0,00 0,62


Normal CV DIP VI GI
Predição

Figura 8.16: Matriz de confusão para a CAD em escoamento bifásico.

As principais métricas dos dois métodos são apresentadas na Tabela 8.6. Os resultados mostram que
a metodologia proposta CAD apresenta uma diminuição na exatidão geral sts com relação à técnica AD.
Porém, a média da diagonal principal cmmean e o mínimo da diagonal principal cmmin da matriz de
confusão são melhores para a Cadeia de Árvores de Decisão. Isso indica que a estrutura de classificação
sugerida é melhor para categorizar as falhas do que a AD.
82

Tabela 8.6: Comparação AD-CAD para escoamento bifásico.

sts cmmean cmmin

AD 78,28% 74,45% 51,26%


CAD 77,80% 76,51% 61,55%

A Figura 8.17 apresenta uma Árvore de Decisão para o procedimento de refinamento, disponível para
analisar as mudanças das variáveis operacionais que podem dar uma indicação do surgimento de falhas.
Em comparação com a AD que possui 55 folhas, este fluxograma tem apenas 19 folhas, melhorando a
interpretabilidade.

Tout ≤ 40,18
Verd Falso

VI δη/δt ≤ 0,00
Verd Falso

δPin /δt ≤ 0,46 δTout /δt ≤ -0,01


Verd Falso Verd Falso

δ ṁ/δt ≤ -0,2 ṁ ≤ 10,96 VI Tout ≤ 42,39


Verd Falso Verd Falso Verd Falso

DIP δTout /δt ≤ -0,01 Tout ≤ 51,74 pin ≤ 86,90 pin ≤ 149,30 δPin /δt ≤ -0,04
Verd Falso Verd Falso Verd Falso Verd Falso Verd Falso

VI pin ≤ 145,64 CV DIP δPin /δt ≤ 4,62 GI GI DIP pout ≤ 988,52 CV


Verd Falso Verd Falso Verd Falso

pin ≤ 90,48 DIP CV GI δPout /δt ≤ 0,26 DIP


Verd Falso Verd Falso

η ≤ 0,11 GI pout [kPa], pin [kPa], ṁ [kg/s], Tout [◦ c], t [s] DIP CV
Verd Falso

CV DIP

Figura 8.17: Árvore de refinamento da CAD em escoamento bifásico.

Os valores limites onde são feitas as divisões são escolhidos mediante uma otimização do critério de
impureza, levando a uma certa divisão conforme a característica de cada algoritmo de árvore de decisão.
A Figura 8.18 apresenta a importância das variáveis de entrada na construção da árvore de refina-
mento. Diferentemente do escoamento monofásico, a maioria das variáveis estabelecidas são usadas na
construção da árvore, descartando a potência W , o torque τ , o delta de pressão ∆p e a temperatura de
entrada Tin .
Embora a falha predominante nos experimentos tinha sido GI, os melhores resultados foram na
identificação de VI. A Figura 8.18 mostra uma grande importância da Tout , o que acontece devido à
grande relação da falha VI com as variações de temperatura no sistema. No entanto, a temperatura de
entrada Tin não foi utilizada na classificação, já que o algoritmo conseguiu fazer as divisões só com uma
variável de temperatura.
83

/ t
W/ t
Tout/ t
Tin/ t
/ t
m/ t
p/ t
Característica pout/ t
pin/ t
W
Tout
Tin
m
p
pout
pin
0 10 20 30 40
Importância %
Figura 8.18: Importância das variáveis na árvore de refinamento da CAD para escoamento bifásico.

As variáveis usadas para a construção da Árvore de Refinamento não são necessariamente as mais
importantes na análise das falhas. As variáveis não usadas podem ser importantes em outro tipo de
análise. Porém, o algoritmo interpreta melhor o fenômeno com as variáveis selecionadas.
84

9 CONCLUSÕES

Este trabalho apresenta o diagnóstico de falhas operacionais em bombas centrífugas multi-estágio


baseado no monitoramento de variáveis operacionais, trabalhando com um fluido viscoso para dois casos
de operação, escoamento monofásico e bifásico.
Condições estáveis de operação e falhas operacionais foram simuladas experimentalmente para as
condições de escoamento monofásico e bifásico, considerando como falhas os eventos de fechamento
abrupto da válvula choke (CV), diminuição da pressão de entrada da bomba (DIP), incremento da vis-
cosidade (VI) e aumento da fracção de gás (GI). Nos testes realizados, as pressões de entrada e saída da
BCS, o torque mecânico e a vazão mássica foram monitoradas em tempo real. Foi realizado um processo
de tratamento dos sinais adquiridos mediante uma média móvel simples, tanto em escoamento mono-
fásico quanto bifásico. Para cada uma das falhas simuladas, foram verificadas variações no tempo das
variáveis monitoradas. Porém, observou-se que para um tipo de falha dado, as variáveis pin , pout , τ , e ṁ
apresentaram diferentes comportamentos. Portanto, o ganho de pressão ∆p, a potência mecânica W e
a eficiência mecânica η foram também calculados a partir das variáveis medidas, com o objetivo de for-
necer ao algoritmo mais critérios de seleção no treinamento e construção das Árvores de Decisão. Uma
derivação discreta (δx/δt) foi também realizada para cada uma dessas variações. Foram selecionadas
como variáveis de entrada do algoritmo as variáveis medidas (pin , pout , τ , e ṁ), as calculadas (∆p, W ,
e η) e suas variações no tempo (δpin /δt, δpout /δt, δτ /δt, δ ṁ/δt, δ∆p/δt, δW/δt, e δη/δt).
Uma Janela de Predição foi definida para cada um dos experimentos realizados, rotulando as amos-
tras dentro dessa janela com o estado esperado em cada um dos testes (CV, DIP, VI, GI ou Normal). As
amostras que apresentaram uma variação ao longo do tempo das variáveis monitoradas foram considera-
das como falha, e caso contrário foram desconsideras, com exceção da condição Normal.
Árvores de Decisão do tipo CART foram usadas na detecção de falhas operacionais em bombas
centrífugas submersíveis. As variáveis selecionadas dos dados rotulados foram usadas na indução de
cada árvore mediante um processo de treinamento e validação. O treinamento foi feito minimizando a
impureza dos dados levando em consideração os critérios de Gini e Entropia.
A estrutura de cada uma das árvores construídas foi definida por um critério de impureza (Gini
e Entropia) e um número máximo de folhas mln. Com o objetivo de evitar o sobre treinamento do
algoritmo e soluções particulares, foi definido um processo de validação cruzada K-folds para determinar
o número de folhas. Tanto para escoamento monofásico quanto para bifásico, 83,3% dos dados foram
usados para determinar o mln mediante esse processo de validação cruzada, testando três critérios de
parada: a média da diagonal principal da matriz de confusão cmmean , o mínimo da diagonal principal da
matriz de confusão cmmin e a quantidade de acertos sobre a quantidade de amostras sts. Enquanto que
o 16,7% dos dados restantes foram usados para testar os algoritmos projetados.
Além da Árvore de Decisão AD, uma estrutura de identificação de falhas nomeada como Cadeia de
Árvores de Decisão (CAD) foi proposta. A Cadeia de Árvores de Decisão foi definida como uma série
85

de Árvores de Decisão: uma árvore chamada de classificação, que é igual a uma Árvore de Decisão AD,
e outra de refinamento, treinada somente com os dados de falha (excluindo os experimentos da condição
Normal). O comportamento dessas duas estruturas propostas (AD e CAD) foi testado para escoamento
bifásico e monofásico, e comparado em cada um dos dois casos.
Foi proposto um problema de detecção de falha em escoamento monofásico, onde o sistema de
bombeio poderia apresentar quatro possíveis estados (CV, DIP, VI, ou Normal). Uma Árvore de Decisão
AD com 8 folhas foi construída com o critério de impureza Gini para realizar a classificação de falhas
nesse contexto. A CAD foi definida usando essa Árvore de Decisão na classificação, e projetando outra
estrutura de refinamento com 6 folhas construída com o critério Gini. As duas árvores foram projetadas
usando 211 experimentos mediante o processo de validação cruzada descrito anteriormente.
Os 45 experimentos restantes foram usados no teste das estruturas projetadas. A AD apresentou bons
resultados na detecção e classificação de falhas. Oitenta e cinco porcento dos testes do estado normal e
80% dos experimentos considerados como falha foram classificados corretamente, a exatidão geral foi
de 80,46%, a média aritmética na classificação foi de 81,92%, e a classe com a exatidão na classificação
mais baixa foi o fechamento da válvula choke com 61,29%. Para a estrutura CAD apresentou-se uma leve
melhora em todos os critérios de avaliação com relação à AD. A sts passou de 80,46% para 81,69%,
cmmean passou de 81,92% para 83,15% e a falha com a exatidão na classificação mais baixa foi o
fechamento da válvula choke com 67,66%.
Para o caso de escoamento bifásico, o problema foi tratado com os mesmos estados do caso mono-
fásico, adicionando o tipo de falha de aumento da vazão de gás (GI). Foram projetadas também duas
estruturas de classificação de falhas mediante o processo de validação cruzada com 669 experimentos
selecionados aleatoriamente. A AD apresentou uma estrutura mais complexa do que para o caso bifásico
com 55 folhas e com o critério de diminuição da impureza de Entropia. A estrutura de refinamento da
CAD foi projetada com 18 folhas e o critério Gini.
As duas estruturas propostas, AD e CAD, foram também testadas usando os 137 experimentos res-
tantes. Em geral, essas estruturas exibiram cerca de 90% de sucesso na detecção de alguma anomalia,
e cerca de 75% na capacidade de segregação dessas falhas (cmmean ) para um conjunto de dados não
usado na construção e validação do algoritmo. A comparação da AD e CAD exibiu mudanças mais sig-
nificativas nos resultados que para o caso monofásico. A exatidão geral diminuiu de 78,28% na AD para
77,80% em CAD. Porém cmmean e cmmin aumentaram. A classe com a porcentagem de acerto mais
baixa para a Árvore de Decisão foi CV com 51,26%, enquanto que para a Cadeia de Árvores de Decisão
foi DIP com 61,55%.
As variáveis monitoradas apresentaram comportamento menos estável no caso bifásico. Para o
mesmo tipo de falha, uma certa variável permanecia constante, aumentava, diminuía ou apresentava
oscilação. Este fato refletiu-se nas estruturas de classificação de falhas, uma vez que as árvores projeta-
das no caso bifásico necessitaram de mais folhas. Tanto no escoamento monofásico quanto no bifásico,
a classificação de falhas foi melhor para a estrutura projetada (CAD), apresentando uma melhora maior
no caso bifásico.
Devido ao fato de que é difícil implementar um método padrão de detecção e classificação de falhas
em bombas centrífugas submersíveis, uma vez que cada sistema de bombeio possui diferentes condições
de operação, os métodos de mineração de dados apresentam-se como possíveis soluções capazes de
86

se adaptar a cada sistema particular. No presente trabalho, as Árvores de Decisão treinadas com as
variáveis monitoradas permitiram uma boa compreensão do fenômeno físico com base em padrões de
variáveis monitoradas. A partir dos resultados e discussão analisados anteriormente, pode-se afirmar que
o algoritmo, assim como as características selecionadas, são bons candidatos para aplicações práticas de
diagnóstico de falhas em bombas centrífugas multiestágio.

Trabalhos Futuros

Levando em consideração os resultados obtidos em este trabalho, algumas considerações para próxi-
mos trabalhos são:

• Estudar o efeito das variações da velocidade nas variáveis do processo como uma falha operacio-
nal, assim como a detecção de falhas permanentes tais como o bloqueio dos estágios, falhas nos
elementos de vedação, desgaste e quebra do eixo ou dos estágios.

• Desenvolver métodos de identificação baseados em outros algoritmos de aprendizado de máqui-


nas, assim como métodos baseados em modelos físicos.

• Testar o comportamento das Árvores de Decisão com dados obtidos na operação de BCS em poços
com dados reais se possível.

• Verificar o comportamento dos algoritmos no caso de falhas simultâneas. Esse e o item anterior,
visam a futura implementação do método para aplicações industriais.
87

Bibliografia

[1] G. Takacs, Electrical Submersible Pumps Manual. Elsevier Inc, 2009.


[2] O. Shoham, Mechanistic Modeling of gas liquid two phase flow in pipes. The Society of
Petroleum Engineers (SPE), 2006, p. 396.
[3] R. A. Collacott, Mechanical Fault Diagnosis and condition monitoring. Springer Nether-
lands, 1977.
[4] D. Grassian, M. Bahatem, T. Scott e D. Olsen, “Application of a Fuzzy Expert System
to Analyze and Anticipate ESP Failure Modes”, SPE Abu Dhabi International Petroleum
Exhibition & Conference, 2017.
[5] S. Gupta, M. Nikolaou, L. Saputelli e C. Bravo, “ESP Health Monitoring KPI: A Real-
Time Predictive Analytics Application”, em SPE Intelligent Energy International Confe-
rence and Exhibition, vol. 1, 2016, pp. 1–10.
[6] P. Lu, H. Liu, C. Serratella e X. Wang, “Assessment of Data-Driven, Machine Learning
Techniques for Machinery Prognostics of Offshore Assets”, Offshore Technology Confe-
rence, pp. 1–22, 2017.
[7] M. Abdelaziz, R. Lastra e J. Xiao, “ESP data analytics: Predicting failures for improved
production performance”, Society of Petroleum Engineers - SPE Abu Dhabi International
Petroleum Exhibition and Conference, 2017.
[8] A. C. Müller e S. Guido, Introduction to Machine Learning with Python. A Guide for
Data Scientists. O’Reilly Media, 2016, p. 392.
[9] N. R. Sakthivel, V. Sugumaran e S. Babudevasenapati, “Vibration based fault diagnosis
of monoblock centrifugal pump using decision tree”, Expert Systems with Applications,
vol. 37, no 6, pp. 4040–4049, 2010.
[10] N. R. Sakthivel, V. Sugumaran e B. B. Nair, “Comparison of decision tree-fuzzy and
rough set-fuzzy methods for fault categorization of mono-block centrifugal pump”, Me-
chanical Systems and Signal Processing, vol. 24, no 6, pp. 1887–1906, 2010.
[11] V. Muralidharan e V. Sugumaran, “Feature extraction using wavelets and classification
through decision tree algorithm for fault diagnosis of mono-block centrifugal pump”,
Measurement: Journal of the International Measurement Confederation, vol. 46, no 1,
pp. 353–359, 2013.
88

[12] N. R. Sakthivel, B. B. Nair e V. Sugumaran, “Soft computing approach to fault diagnosis


of centrifugal pump”, Applied Soft Computing Journal, vol. 12, no 5, pp. 1574–1581,
2012.
[13] Y. Wang, C. Lu, H. Liu e Y. Wang, “Fault diagnosis for centrifugal pumps based on
complementary ensemble empirical mode decomposition, sample entropy and random
forest”, Proceedings of the World Congress on Intelligent Control and Automation
(WCICA), pp. 1317–1320, 2016.
[14] T. Moffatt e C. Doug, “Innovative Real-Time Well-Monitoring Systems (ESP Applicati-
ons)”, SPE Production & Facilities, vol. 16, no 03, pp. 151–155, 2001.
[15] C. Gao, T Rajeswaran, C. U. Technology, E. Nakagawa e C. P. Resources, “A Literature
Review on Smart-Well Technology”, em SPE Production and Operations Symposium
held, SPE, 2007, pp. 1–9.
[16] D. G. Thornhill, D. Zhu e B. H. Incorporated, “Fuzzy Analysis of ESP System Perfor-
mance”, em SPE Annual Technical Conference and Exhibition, New Orleans, Louisiana,
USA: SPE, 2009, pp. 1–7.
[17] T. Blanckaert e Y. Subervie, “Real-Time Data and Expert System Combine to Develop
Artificial Lift Predictive Diagnostics”, Proceedings of SPE Production and Operations
Symposium, pp. 1–15, 2013.
[18] F. Bermudez, G. Carvajal, G. Moricca, J. Dhar, F. Halliburton, a. Al-Jasmi, H. Goel e H.
Nasr, “Fuzzy Logic Application to Monitor and Predict Unexpected Behavior in Electric
Submersible Pumps ( Part of the KwIDF Project )”, SPE Intelligent Energy, p. 13, 2014.
[19] A Awaid, H Al-Muqbali, A Al-Bimani, Z Yazeedi, H Al-Sukaity, K Al-Harthy e A. Bail-
lie, “ESP Well Surveillance using Pattern Recognition Analysis, Oil Wells, Petroleum
Development Oman”, em International Petroleum Technology Conference, Society of
Petroleum Engineers, 2014, pp. 1–22.
[20] R. Liu, B. Yang, E. Zio e X. Chen, “Artificial intelligence for fault diagnosis of rotating
machinery: A review”, Mechanical Systems and Signal Processing, vol. 108, pp. 33–47,
2018.
[21] V. Muralidharan e V. Sugumaran, “A comparative study of Naïve Bayes classifier and
Bayes net classifier for fault diagnosis of monoblock centrifugal pump using wavelet
analysis”, Applied Soft Computing Journal, vol. 12, no 8, pp. 2023–2029, 2012.
[22] V. Muralidharan, V. Sugumaran e V. Indira, “Fault diagnosis of monoblock centrifugal
pump using SVM”, Engineering Science and Technology, an International Journal, vol.
17, no 3, pp. 152–157, 2014.
89

[23] M. Adesanwo, O. Bello, O. Olorode, O. Eremiokhale, S. Sanusi e E. Blankson, “Advan-


ced Analytics for Data-Driven Decision Making in Electrical Submersible Pump Opera-
tions Management”, Nigeria Annual International Conference and Exhibition, 2017.
[24] O. P. Patri, A. V. Panangadan, C. Chelmis e S. California, “Predicting Failures from
Oilfield Sensor Data using Time Series Shapelets”, em SPE Annual Technical Conference
and Exhibition held in Amsterdam, Society of Petroleum Engineers, 2014, pp. 1–14.
[25] M. Adesanwo, T. Denney, S. Lazarus e O. Bello, “Prescriptive-Based Decision Support
System for Online Real-Time Electrical Submersible Pump Operations Management”,
em SPE Intelligent Energy International Conference and Exhibition, Society of Petro-
leum Engineers, 2016, pp. 1–18.
[26] W. Monte Verde, “Estudo Experimental de Bombas de BCS Operando com Escoamento
Bifásico Gás-Líquido”, Dissertação de Mestrado, Universidade Estadual de Campinas,
2011, p. 153.
[27] L. F. R. Pineda, “Controle do Ponto de Operação de Bombas Centrífugas Submersas em
Escoamento Líquido-Gás Usando Redes Neurais”, Dissertação de Mestrado, Universi-
dade Estadual de Campinas, 2016, p. 107.
[28] C. Mataix, Turbomáquinas hidráulicas : turbinas hidráulicas, bombas, ventiladores. Edi-
torial ICAI, 1975, p. 1371.
[29] V. Estevam, “Uma Análise Fenomenológica da Operação de Bomba Centrífuga com
Escoamento Bifásico”, Tese de Doutorado, Universidade Estadual de Campinas, 2002,
p. 265.
[30] G. E. C. Jimenez, “Simulação do Controle de Escoamento Multifásico em uma Bomba
Centrífuga Submersa - BCS”, Dissertação de Mestrado, Universidade Estadual de Cam-
pinas, 2014, p. 98.
[31] W. Monte Verde, “Modelagem do Desempeho de Bombas de BCS Operando com Mistu-
ras Gás- Óleo Viscoso”, Tese de Doutorado, Universidade Estadual de Campinas, 2016,
p. 408.
[32] K. Gra̧bczewski, Meta-Learning in Decision Tree Induction. Springer International Pu-
blishing, 2014.
[33] R. C. Barros, A. C. de Carvalho e A. A. Freitas, Automatic Design of Decision-Tree
Induction Algorithms, 1st. Springer International Publishing, 2015, p. 184.
[34] L. Breiman, J. H. Friedman, R. A. Olshen e C. J. Stone, Classification And Regression
Trees, 1. 1984, vol. 1, p. 366.
[35] L Rokach e O Maimon, “Top-Down Induction of Decision Trees Classifiers—A Survey”,
IEEE Transactions on Systems, Man and Cybernetics, Part C (Applications and Reviews),
vol. 35, no 4, pp. 476–487, 2005.
90

[36] C. E. Shannon, “A Mathematical Theory of Communication”, Bell System Technical


Journal, vol. 5, no 3, p. 3, 1948.
[37] Patrick Jahnke, “Machine Learning Approaches for Failure Type Detection and Predic-
tive Maintenance”, Dissertação de Mestrado, Technische Universitat Darmstadt, 2015,
p. 83.
[38] F. Pedregosa, G. Varoquaux, A. Gramfort, V. Michel, B. Thirion, O. Grisel, M. Blondel,
P. Prettenhofer, R. Weiss, V. Dubourg, J. Vanderplas, A. Passos, D. Cournapeau, M. Bru-
cher, M. Perrot e E. Duchesnay, “Scikit-learn: Machine Learning in Python”, Journal of
Machine Learning Research, vol. 12, pp. 2825–2830, 2011.
[39] T. Hastie, R. Tibshirani e J. H.J. H. Friedman, The elements of statistical learning : data
mining, inference, and prediction. 2013, p. 745.
91

Apêndice A. Códigos de Programação

A.1 Rotulação dos Dados

1 #%% ########################################################################
2 # Import libraries
3 ############################################################################
4 import numpy as np
5 import Functions as fn
6 import random as rd
7
8 #%% ########################################################################
9 # Load Data
10 ############################################################################
11 Data = np.load(’1_Results/01_SelectedSamples.npy’)
12 print("\n%s Experiments to Evaluate"%(len(Data)))
13 folderload = ’0_Data/1_Python/’
14 foldersave = ’0_Data/2_Samples/’
15
16 #%% ########################################################################
17 # Construct States
18 ############################################################################
19 New_Data = []; k = 1 # List of Samples
20 for i in Data: # for i in list of Data
21 print(’Sample = %s/%s \n %s’%(k,len(Data),i[0]))
22 sample_a = np.load(folderload + i[0]+’.npy’) # Import Sample as Array
23 print(’ Before Add State Shape = %s’%format(sample_a.shape))
24 sample_o = fn.Sample_lvm(sample_a) # Sample as Object
25 MB = [’Bi2’ if sample_o.Mgas.max()*3600 > 0.5
26 else ’Mo2’] # Monophasic or Bhifasic
27 sample_o.Construct_State() # Construct Sample State
28 s = sample_o.State # Sample State
29 sample_a = np.c_[sample_a, s] # Add State to Saple Array
30 if s.max() != 5: # if fault is not Temperature
31 np.save(foldersave + i[0] ,sample_a) # Save Array
32 print(’ After Add State Shape = %s\n’%format(sample_a.shape))
33 New_Data.append( # Add Sample to New List
34 np.r_[i, MB, s.max(), sample_o.tch])
35 else: # if fault is Temperature
36 i1 = np.where(sample_o.t>=sample_o.tch[0])[0][0] # Fault Begin
37 i2 = np.where(sample_o.t<=sample_o.tch[1])[0][-1] # Fault End
38 cut = np.arange(i1,i2,1025) # Cut every 30 [s]
39 stringj = i[0] # Name of sample performed
40 for j in range(0,len(cut)-1): # Cut Faults
41 j1 = cut[j]; # New Sample Begin
42 j2 = cut[j+1] if (i2-cut[j+1])>1025 \
43 else i2 + 1 # New Sample End
44 sample_aj = sample_a[j1:j2] # New Sample Array
45 tj = sample_aj[:,0] # New time vector
46 sample_aj[:,0] = tj - tj[0] # Replace Vector Time in Array
92

47 ij = i # Get list [Name, MonBif, Fault]


48 ij[0] = stringj + ’_’ + str(j) # Replace Name by New Sample Nam
49 np.save(foldersave + ij[0]+ ’.npy’, sample_aj) # Save Array
50 print(’ After Add State Shape = %s\n’%format(sample_aj.shape))
51 tch = [tj[0], tj[-1]] # Get New Time Begin and End
52 New_Data.append( # Add Sample to New List
53 np.r_[ij, MB, s.max(), tch])
54 k += 1 # New Iteration
55 New_Data = np.array(New_Data) # Numpy List of Samples
56 np.save(’1_Results/02_SelectedSamples’, New_Data) # Save List of Samples
57 print(’New list of Samples was saved in \’02_SelectedSamples.npy\’’)
58
59 #%%#########################################################################
60 # Import List Data and Shuffle and Get index By Fault ####################
61 ############################################################################
62 Data = np.load(’1_Results/02_SelectedSamples.npy’) # Load Data
63 Fault_Index = {’Mo2’:[], ’Bi2’:[]} # Dict. whith fault location
64 for MB in Fault_Index: # For in [Monphasic, Biphasic]
65 yl = 6.0 if MB ==’Mo2’ else 10.0 # Failure Quantity
66 Fault_kind = [str(i) for i in np.arange(0,yl,1.0)] # Float to String
67 for F in Fault_kind: # For in kind of Failure
68 Index = fn.index_data(Data,MB,3,F,4)# Get index where Data Fault
69 rd.shuffle(Index) # shuffle list of index
70 Fault_Index[MB].append(Index) # Alocate in Dict
71 np.save(’1_Results/02_FaultIndex’,Fault_Index)
72 print(’Save List of Split Fault Index in \’02_FaultIndex.npy\’’)

A.2 Implementação das Árvores de Decisão

1 #%%#########################################################################
2 # Import libraries
3 ############################################################################
4 import numpy as np
5 import Functions as fn
6 import matplotlib.pyplot as plt
7 from sklearn.tree import DecisionTreeClassifier
8 from sklearn.tree import export_graphviz
9 from sklearn.metrics import confusion_matrix
10 import sys
11 import graphviz
12 from pathlib import Path
13
14 #%%#########################################################################
15 # Functions
16 ############################################################################
17 Estimator = lambda mln,cr: DecisionTreeClassifier(
18 random_state=0,
19 max_leaf_nodes=mln,
20 criterion=cr,
21 class_weight=’balanced’
22 )
23 HealthFault = lambda y: np.array( [1 if i != 0 else 0 for i in y] )
24
93

25 #%%#########################################################################
26 # Load List Data and Initial Data
27 ############################################################################
28 print(’Estimator are:\n dt = DecisionTree or First Step of CDT\
29 \n cdt = Second Step of CDT’)
30 est = str(input(’Select Estimator:’)); print(’ ’)
31 CreateXy = str(input(
32 "Create Matrix X and target vector y:\n \’yes\’ or \’not\’? "))
33 print(’ ’)
34 CreateMLN = str(input(
35 "Calculate data of Max Leaf Nodes: \n \’yes\’ or \’not\’? "))
36 print(’ ’)
37 cr = str(input("Criterion: \n \’gini\’ or \’entropy\’? "))
38 print(’ ’)
39 #___________________________________________________________________________
40 folder = ’1_Results/’ + est + ’/’
41 List = np.load(folder + ’02_SelectedSamples.npy’) # List of Data
42 I = np.load(folder + ’02_FaultIndex.npy’).item() # Index by fault in data
43 folderload = ’0_Data/2_Samples/’ # Where Load Global Data
44
45 #___________________________________________________________________________
46 SaveData = folder
47 SaveResult = SaveData + cr + ’/’
48 #___________________________________________________________________________
49 Var = [’P1’,’P2’,’DP’,’M’,’T’,’Tin’,’Tout’,’Pow’,’Eff’] # Features
50 #Var = [’P1’,’P2’,’M’,’Tout’,’Eff’] # Features
51 G = 6 # Number of Group to divide the original dataset
52 Gr = [’X’, ’Xd’]; # Make with only Gradient ’Xd’, only data ’X’ or both ’’
53 W = 33; # Window for Filter Gradient every 33 samples 1 [s]
54 BF = ’Bi2’; # Biphasic ’Bi2’ or Monophasic ’Mo2’
55 F = [0,1,3,5,7] # Biphasic, FaultSel, Groups _______________________________
56 #’\n 0 = Static\n 1 = Close Valve\n 2 = Open Valve\
57 # \n 3 = P Inlet Decrease\n 4 = P Inlet Increase\
58 # \n 5 = Viscosity Increase\
59 # \n 6 = Mgas Decrease\n 7 = Mgas Increase\
60 # \n 8 = RPM Increase\n 9 = RPM Decrease’
61 Vtr = [i for i in range(0,len(Gr)*len(Var))]
62 #for i in [11,13,14]: Vtr.pop(i)
63 MLN = [i for i in range(4,101)] # Max Leaf Number
64
65 #%%#########################################################################
66 # Construct five sets of Data
67 ############################################################################
68 if CreateXy == ’yes’:
69 # Initialize ___________________________________________________________
70 G_Index = {} # Index for every Group
71 for g in range(G): # First Value in G Groups Empty
72 G_Index[g] = np.empty([0,]) # Index in every Group g
73 # Construct "G" and "G_Index" for Cross Validation _____________________
74 for f in F: # Get index for selected Faults
75 F_i = I[BF][f]; l = len(F_i) # Index and len
76 c = [int(l/G*i) for i in range(G)] # Where Cut every group F_i
77 F_split = np.split(F_i,c) # Fault Splited in G G_Index
78 for g in range(G): # Append Every Group of Fault
79 G_Index[g] = np.r_[G_Index[g], F_split[g+1]]
80 # Get X, Y in every Cross Calidation Group _____________________________
81 G_Data = {} # Data for every Group
82 for i in G_Index: # Construct Data based in Index
83 G_Data[i] = fn.Construct(G_Index[i],folderload,List,W,Var,Gr,F)
94

84 print(’Group Constructed = %s / %s’%(len(G_Data),G))


85 np.save(SaveData + ’03_GroupIndex’,G_Index)
86 np.save(SaveData + ’03_GroupData’,G_Data)
87 else:
88 G_Index = np.load(SaveData + ’03_GroupIndex.npy’).item()
89 G_Data = np.load(SaveData + ’03_GroupData.npy’).item()
90 #___________________________________________________________________________
91 feature_names = [G_Data[0][’feature_names’][i] for i in Vtr]
92 if est == ’cdt’:
93 for i in G_Data:
94 I_sel = np.where(G_Data[i][’target’]!=0)[0]
95 G_Data[i][’target’] = G_Data[i][’target’][I_sel]
96 G_Data[i][’data’] = G_Data[i][’data’][I_sel]
97 target_names = G_Data[0][’target_names’][1:]
98 else:
99 target_names = G_Data[0][’target_names’]
100
101 #%%#########################################################################
102 # Determination MLN Trends
103 ############################################################################
104 # For for determination of best MLN bassed on maximization accuraccy of
105 # worst failure detected ___________________________________________________
106 if CreateMLN == ’yes’:
107 # Initialize Dictionary for Results ____________________________________
108 Results = {} # Initial Dictionary
109 for i in [’Train’, ’Val’, ’Test’]: # Position in Dict Results[’Train’]
110 Results[i] = {} # Sub Dict Relts[’Train][’sts’]
111 for j in [’sts’, ’cmmean’, ’cmmin’]: # In every Dict
112 Results[i][j] = [ # Empty List of List shape [mln,groups]
113 [[]for i in range(G-1)] for i in range(len(MLN))]
114 # Train To Get Resutls and Analize _____________________________________
115 Ltotal = len(MLN)*(G-1); count = 0
116 for mln in MLN: # Fill in MLN Dimension 0
117 for g in range(G-1): # Fill in Group Dimension 1
118 X, y = fn.TrainValTest(G_Data,g,G-1)
119 tree = Estimator(mln,cr) # Calculate Tree
120 tree.fit(X[’Train’][:,Vtr], y[’Train’]) # Train Tree
121 for i in [’Train’, ’Val’, ’Test’]:
122 sts, cmmean, cmmin, _ = fn.MetricS( # Get Metrics from
123 tree,X[i][:,Vtr], y[i]) # Constructed Tree
124 Results[i][’sts’][mln-min(MLN)][g].append(sts)
125 Results[i][’cmmean’][mln-min(MLN)][g].append(cmmean)
126 Results[i][’cmmin’][mln-min(MLN)][g].append(cmmin)
127 count+=1 # Count Percent
128 sys.stdout.write("\rMLN Calculated:... {:.4f} %".\
129 format(100*count/Ltotal)); sys.stdout.flush()
130 # Save Results _________________________________________________________
131 MLN_Trend = {’MLN’:MLN, ’Train’:Results[’Train’],
132 ’Val’:Results[’Val’], ’Test’:Results[’Test’]}
133 np.save(SaveResult + ’MLN_Trend’,MLN_Trend)
134 else:
135 MLN_Trend = np.load(SaveResult + ’MLN_Trend.npy’).item()
136
137 #%%#########################################################################
138 # Get Data for Plots
139 ############################################################################
140 # Get Max leaf Nodes and Number of Estimators ______________________________
141 MLN = np.array(MLN_Trend["MLN"])
142 # Get Test Data ____________________________________________________________
95

143 if Path(SaveResult + ’Test.npy’).is_file() is True:


144 Test = np.load(SaveResult + ’Test.npy’).item()
145 print(’The file Test.py was load,\n if you wanna create new file \
146 \n delete existent file and re-run’)
147 else:
148 X, y = fn.TrainValTest(G_Data,0,G-1) # Get Data for all groups
149 X_train = np.r_[X["Val"],X["Train"]][:,Vtr] # X organized Train + Val
150 y_train = np.r_[y["Val"],y["Train"]] # y organized Train + Val
151 # Initialize Dictionary for Results ____________________________________
152 print(’\nCalculed of Test Data \n\n’)
153 Test = {’sts’:[], "cmmean":[], "cmmin":[]} # Initial
154 Test = {} # Dict Test[’Train][’sts’]
155 for j in [’sts’, ’cmmean’, ’cmmin’]: # In every Dict
156 Test[j] = [ # Empty List of List shape [mln]
157 [] for i in range(len(MLN))]
158 Ltotal = len(MLN); count = 0
159 # Train To Get Resutls and Analize _____________________________________
160 for mln in MLN: # Fill in MLN Dimension 0
161 tree = Estimator(mln,cr) # Calculate Tree
162 tree.fit(X_train, y_train) # Train Tree
163 sts, cm_mean, cm_min, cm = fn.MetricS( # Get Metrics from
164 tree,X[’Test’][:,Vtr],y[’Test’]) # Constructed Tree
165 plt.clf()
166 Test[’sts’][mln-min(MLN)].append(sts)
167 Test["cmmean"][mln-min(MLN)].append(cm_mean)
168 Test["cmmin"][mln-min(MLN)].append(cm_min)
169 count+=1 # Count Percent
170 sys.stdout.write("\rTest Data MLN Calculated:... {:.4f} %".\
171 format(100*count/Ltotal)); sys.stdout.flush()
172 np.save(SaveResult + ’Test.npy’, Test)
173 # Get Validation and Training Data _________________________________________
174 X_Plot = {}; count = 0
175 for stop in ["sts", "cmmean", "cmmin"]:
176 # Validation and Train Results [mln, group, nest] = [0, 1, 2] ---------
177 Train_r = np.array(MLN_Trend["Train"][stop])
178 Val_r = np.array(MLN_Trend["Val"][stop])
179 # For every MLN get respective best n_estimators -----------------------
180 Nest_i = [np.bincount(i).argmax() for i in Val_r.argmax(2)] # Index Est.
181 # Get Validation -------------------------------------------------------
182 Val = Val_r.max(2).mean(1)
183 Val_std = Val_r.max(2).std(1)
184 # Get Train ------------------------------------------------------------
185 Tra = Train_r.max(2).mean(1)
186 # Save Data ------------------------------------------------------------
187 X_Plot[stop] ={’Train’:Tra, ’Val’:Val, ’Val_std’:Val_std, ’Nest_i’:Nest_i}
188
189 #%%#########################################################################
190 # Global Plots
191 ############################################################################
192 x_s = [’Train’, ’’, ’Validation’, ’’, ’Test’]
193 x_c = [(0.6,0.6,0.6), (0,0,0), (0,0,0), (0,0,0), (0.6,0.6,0.6)]
194 x_t = [":", "_", ’--+’, "_", "--o"]
195 for criteria in ["sts", "cmmean", "cmmin"]:
196 Tra = X_Plot[criteria][’Train’]
197 Val = X_Plot[criteria][’Val’]
198 Val_std = X_Plot[criteria][’Val_std’]
199 Nest_i = X_Plot[criteria][’Nest_i’]
200 Test_c = np.array(
201 [Test[criteria][i][Nest_i[i]] for i in range(0,len(Nest_i))])
96

202 x = [Tra, Val-Val_std/2, Val, Val+Val_std/2, Test_c]


203 plt.clf()
204 Fig1 = fn.Plot(MLN,’Max Leaf Nodes’,x,x_s,x_c,x_t,0,0,0,’Equal’,0,0)
205 Fig1.suptitle(criteria, fontsize=20, y=1.05); #plt.show()
206 plt.savefig(SaveResult + criteria + ".pdf")
207
208
209 #%%#########################################################################
210 # Desicion Tree Algorithm
211 ############################################################################
212 MLN = np.array(MLN_Trend["MLN"])
213 # Get ’mln’ and ’nest’ for every stop criteria: sts, cmmean, cmmin _________
214 for stop in ["sts", "cmmean", "cmmin"]:
215 # Validation, Train and Test Results [mln, group, nest] = [0, 1, 2] ____
216 Train_r = np.array(MLN_Trend["Train"][stop]) # All Training Data
217 Val_r = np.array(MLN_Trend["Val"][stop]) # All Validation Data
218 Val = Val_r.max(2).mean(1) # Get Best Validation
219 Val_std = Val_r.max(2).std(1) # Get Validation Std
220 Tra = Train_r.max(2).mean(1) # Get Training
221 # Where are the best results in Validation Sets ________________________
222 Nest_i = [np.bincount(i).argmax() for i in Val_r.argmax(2)]
223 i = np.argmax(Val) # Where is the b
224 n = Nest_i[i] # Where is the best validation
225 # Results Validation Test ______________________________________________
226 np.array(MLN_Trend["Train"]["sts"])[i,:,n].mean()
227 print("\n\n|||||________Stop Criteria is: %s________|||||\n\n"%stop)
228 sts_tr = np.array(MLN_Trend["Train"]["sts"]).max(2).mean(1)[i]
229 sts_va = np.array(MLN_Trend["Val"]["sts"]).max(2).mean(1)[i]
230 cmmean = np.array(MLN_Trend["Val"]["cmmean"]).max(2).mean(1)[i]
231 cmmin = np.array(MLN_Trend["Val"]["cmmin"]).max(2).mean(1)[i]
232 print("|_ Validation Test _|")
233 print("Accuracy on training set: {:.4f}".format(sts_tr))
234 print("Accuracy on validation set: {:.4f}".format(sts_va))
235 print("Mean of confusion matrix diagonal:{:.4f}".format(cmmean))
236 print("Min of confusion matrix diagonal: {:.4f}".format(cmmin))
237 print("MLN: {:.0f}".format(MLN[i]))
238 # Results Best Test ____________________________________________________
239 Test_array = np.array(Test[stop])
240 Test_best = Test_array.max()
241 ib, nb = np.where(Test_array==Test_best); ib = ib[0]; nb = nb[0]
242 # Get X and y Data _____________________________________________________
243 X, y = fn.TrainValTest(G_Data,0,G-1) #
244 X_train = np.r_[X["Val"],X["Train"]][:,Vtr]
245 y_train = np.r_[y["Val"],y["Train"]] # y organized Train + Val
246 # Run in Seleted and Validation Test ___________________________________
247 Case = ["Selected", "Best"]; it = [i, ib]; nt = [n, nb]
248 for mk in range(2):
249 mln = MLN[it[mk]]
250 tree = Estimator(mln,cr)
251 tree.fit(X_train, y_train)
252 sts_tr = tree.score(X_train, y_train)
253 sts, cmmean, cmmin, cm = fn.MetricS(tree,X[’Test’][:,Vtr],y[’Test’])
254 cm_s = cm.shape[0]
255 error = np.mean([np.delete(cm[i,:],i).mean() for i in range(cm_s)])
256 error_falha = np.mean([np.delete(cm[i,:],[0,i]).mean()
257 for i in range(1,cm_s)])
258 print("|_ %s Test _|"%Case[mk])
259 print("Accuracy on training set: {:.4f}".format(sts_tr))
260 print("Accuracy on validation set: {:.4f}".format(sts))
97

261 print("Mean of confusion matrix diagonal:{:.4f}".format(cmmean))


262 print("Min of confusion matrix diagonal: {:.4f}".format(cmmin))
263 print("Confusion with another states: {:.4f}".format(error))
264 print("Confusion with another failures: {:.4f}".format(error_falha))
265 print("MLN: {:.0f}".format(mln))
266 String = SaveResult + str(stop) + ’_’ + Case[mk]
267 np.save(String + ’_Tree’ ,tree)
268 # Export Confusion Matrix __________________________________________
269 plt.clf()
270 fn.plot_confusion_matrix(cm, classes=target_names, normalize=True,
271 title=’Confusion matrix’)
272 plt.savefig(String + ’_ConfusionMatrix.pdf’); #plt.show()
273 # Save Tree Figures .dot and .svg __________________________________
274 if est != ’rf’ and est != ’ab’ and est != ’bg’:
275 export_graphviz(tree, out_file=String + ’_Tree.dot’,
276 class_names=target_names, feature_names=feature_names,
277 impurity=True, filled=True)
278 graphviz.render(’dot’,’pdf’,String + ’_Tree.dot’)
279 #graphviz.view(String + ’_Tree.dot)

A.3 Funções e Objetos

1 ############################################################################
2 # Import libraries #########################################################
3 ############################################################################
4 import numpy as np
5 import matplotlib.pyplot as plt
6 import math
7 from sklearn.metrics import confusion_matrix
8 import itertools
9 from matplotlib.offsetbox import TextArea
10 import sys
11 import matplotlib.ticker as mtick
12 import matplotlib.ticker as ticker
13
14 ############################################################################
15 # Create Class from Every Sampe ############################################
16 ############################################################################
17 class Sample_lvm(object):
18 ########################################################################
19 def __init__(self, Frame):
20 # Get Variables ####################################################
21 self.Frame = Frame
22 self.t = Frame[:,0]; self.t_s = ’t [s]’
23 self.P1 = Frame[:,1]*1E5; self.P1_s = ’$P_{in}\ [Pa]$’
24 self.DP1 = Frame[:,2]*1E5; self.DP1_s = ’$\Delta P_{1}\ [Pa]$’
25 self.DP2 = Frame[:,3]*1E5; self.DP2_s = ’$\Delta P_{2}\ [Pa]$’
26 self.DP3 = Frame[:,4]*1E5; self.DP3_s = ’$\Delta P_{3}\ [Pa]$’
27 self.DP4 = Frame[:,5]*1E5; self.DP4_s = ’$\Delta P_{4}\ [Pa]$’
28 self.DP5 = Frame[:,6]*1E5; self.DP5_s = ’$\Delta P_{5}\ [Pa]$’
29 self.DP6 = Frame[:,7]*1E5; self.DP6_s = ’$\Delta P_{6}\ [Pa]$’
30 self.DP7 = Frame[:,8]*1E5; self.DP7_s = ’$\Delta P_{7}\ [Pa]$’
31 self.DP8 = Frame[:,9]*1E5; self.DP8_s = ’$\Delta P_{8}\ [Pa]$’
98

32 self.DP9 = Frame[:,10]*1E5; self.DP9_s = ’$\Delta P_{9}\ [Pa]$’


33 self.DP10 = Frame[:,11]*1E5;self.DP10_s = ’$\Delta P_{10}\ [Pa]$’
34 self.P2 = Frame [:,12]*1E5; self.P2_s = ’$P_{out}\ [Pa]$’
35 self.T = Frame[:,13]; self.T_s = ’$Torque\ [N-m]$’
36 self.rho = Frame[:,14]; self.rho_s = ’$\rho\ [kg/m^{3}]$’
37 self.M = Frame[:,15]/3600; self.M_s = ’$\dot M\ [kg/s]$’
38 self.Tin1 = Frame[:,16]; self.Tin1_s = ’$T_{in1}\ [^oC]$’
39 self.Tin2 = Frame[:,17]; self.Tin2_s = ’$T_{in2}\ [^oC]$’
40 self.T2 = Frame[:,18]; self.T2_s = ’$T_{2}\ [^oC]$’
41 self.T4 = Frame[:,19]; self.T4_s = ’$T_{4}\ [^oC]$’
42 self.T6 = Frame[:,20]; self.T6_s = ’$T_{6}\ [^oC]$’
43 self.T8 = Frame[:,21]; self.T8_s = ’$T_{8}\ [^oC]$’
44 self.Tout1 = Frame[:,22]; self.Tout1_s = ’$T_{out1}\ [^oC]$’
45 self.Tout2 = Frame[:,23]; self.Tout2_s = ’$T_{out2}\ [^oC]$’
46 self.Mgas = Frame[:,24]/3600;self.Mgas_s = ’$\dot M_{gas}\ [kg/s]$’
47 self.Choke = Frame[:,25]; self.Choke_s = ’Choke Valve [%]’
48 self.Bypass = Frame[:,26]; self.Bypass_s = ’Bypass Valve [%]’
49 self.Booster = Frame[:,27]; self.Booster_s = ’Booster Speed [RPM]’
50 self.RPM = Frame[:,28]; self.RPM_s = ’Pump Speed [RPM]’
51 self.Tset = Frame[:,29]; self.Tset_s = ’$T_{set}\ [^oC]$’
52 self.Pgas = Frame[:,30]*1E5;self.Pgas_s = ’$P_{gas}\ [Pa]$’
53 self.Vgas = Frame[:,31]; self.Vgas_s = ’Gas Valve [%]’
54 # Calculate ########################################################
55 Tin = (self.Tin1 + self.Tin2) * 0.5 # T in [C]
56 self.Q = self.M * (1/self.rho); self.Q_s = ’$Q\ [m^{3}/s]$’
57 self.DP = self.P2 - self.P1; self.DP_s = ’$\Delta P\ [Pa]$’
58 self.Tin = (self.Tin1 + self.Tin2) * 0.5;
59 self.Tin_s = ’$T_{in}\ [^oC]$’
60 self.Tout = (self.Tout1 + self.Tout2)*0.5;
61 self.Tout_s = ’$T_{out}\ [^oC]$’
62 self.mul = Mul(Tin); self.mul_s = ’$\mu_l [Cp]$’
63 self.rhol = Rhol(Tin); self.rhol_s = ’$\rho_l kg/m^{3}]$’
64 self.mug = Mug(Tin); self.mug_s = ’$\mu_g [Cp]$’
65 self.rhog = Rhog(Tin,self.P1); self.rhog_s = ’$\rho_g kg/m^{3}]$’
66 #self.Pow = self.M*self.DP; self.Pow_s = ’$Power [W]$’
67 self.Pow = self.Q*self.DP; self.Pow_s = ’$Power [W]$’
68 #self.Eff = self.Pow*(1/self.T); self.Eff_s = ’$Eff [-]$’
69 self.Eff = self.Pow*(1/self.T)* ((60/2/np.pi)/self.RPM)
70 self.Eff_s = ’$Eff [-]$’
71 # State ############################################################
72 if self.Frame.shape[1] == 33:
73 self.State = Frame[:,32]; s = self.State.max()
74 i1 = np.where(self.State==s)[0][0]
75 i2 = np.where(self.State==s)[-1][0]
76 self.tch = [self.t[i1], self.t[i2]]; self.ich = [i1,i2]
77 else:
78 msg = ’Warning: The sample has not defined \"self.State\" \
79 \n run \"self.Construct_State()\" to define \
80 \n State’
81 self.State = msg; self.tch = msg
82 #self.Construct_State()
83 self.State_s = ’Expected State’
84 # State ############################################################
85 self.target_names = [’Normal State’,
86 ’CV’, ’OV’, # Close Choke Valve, Open Choke Valve
87 ’DIP’, ’IIP’, # Decreasing Input Pressures, Increassing
88 ’VI’, # Viscosity Increase
89 ’GI’, ’GD’, # Gass Increasse, Gas Decreasse
90 ’RI’, ’RI’] # RPM Increasse, RPM Decreasse
99

91 if self.Mgas.max()*3600 < 0.5:


92 self.target_names = self.target_names[:6]
93 ########################################################################
94 def Adimensionals(self, d):
95 # Aquire Variavels #################################################
96 P1 = self.P1; P2 = self.P2; DP = self.DP # [Pa]
97 Q = self.Q # [m^3/s]
98 T = self.T # [N-m]
99 T_in = self.Tin2; # [C]
100 rho = self.rho # [kg/m^3]
101 mu = self.mul/1000 # [kg/m-s]
102 omega = self.RPM * (2 * np.pi) / 60 # [rad/s]
103 # Calculate Adimensional Variable ##################################
104 self.CQ = (Q) * (1/(omega * (d**3)))# Flow Coeficient
105 self.CH = (DP/rho) * \
106 (1/((omega**2)*(d**2))) # Head Coeficient
107 self.CH1 = (P1/rho) * \
108 (1/((omega**2)*(d**2))) # Head Inlet Coeficient
109 self.CH2 = (P2/rho) * \
110 (1/((omega**2)*(d**2))) # Head Outlet Coeficient
111 self.CP = (T/rho) * (1/((omega**2)*(d**5))) # Power Coeficient
112 self.Eta = ((Q*DP)/T) * (1/omega) # Efficient
113 self.Xw = (mu/rho) * \
114 (1/((d**2)*omega)) # InversedRotacionalReynolds
115 ####################################################################
116 self.CQ_s = ’$\Phi$’; self.CH_s = ’$\Psi$’
117 self.CH1_s = ’$\Psi _{in}$’; self.CH2_s = ’$\Psi _{out}$’
118 self.CP_s = ’$\Pi$’; self.Eta_s = ’$\eta$’
119 self.Xw_s = ’$X_{W}$’
120 ########################################################################
121 def Construct_State(self):
122 ####################################################################
123 # Control ##########################################################
124 ####################################################################
125 W = 33 # Window
126 t = self.t # Tiempo
127 Choke = self.Choke; Booster = self.Booster # Control Ch - B
128 RPM = self.RPM; Tset = self.Tset # Control RPM - T
129 Pgas = self.Pgas; Vgas = self.Vgas; # Control Gas
130 Mgas = mean_movil(self.Mgas,W) # Mass Flux Gas
131 MonBif = 1 if Mgas.max()*3600 > 0.5 else -1
132 print(" Test Biphasic") if MonBif == 1 else \
133 print(" Test Monophasic")
134 ####################################################################
135 # Determinate kind of fault in test ################################
136 ####################################################################
137 k = 0; X = ’Static’; msg = ’ 0 Static Test Not Fault’
138 if MonBif == 1: ############# Biphasic #############################
139 for i in range(1,len(t)):
140 if Pgas[i] > Pgas [i-1] or Vgas[i] > Vgas[i-1]:
141 msg = ’Mgas Increase’
142 k = 7; X = ’Gas’; break # 4 Mgas Increase
143 elif Pgas[i] < Pgas[i-1] or Vgas[i] < Vgas[i-1]:
144 msg = ’Mgas Decrease’
145 k = 6; X = ’Gas’; break # 5 Mgas Decrease
146 elif Choke[i] < Choke[i-1]:
147 msg = ’Close Valve’
148 k = 1; X = ’Choke’; break # 1 Close Valve
149 elif Choke[i] > Choke[i-1]:
100

150 msg = ’Open Valve’


151 k = 2; X = ’Choke’; break # 8 Open Valve
152 elif Booster[i] < Booster[i-1]:
153 msg = ’P Inlet Decrease’
154 k = 3; X = ’Booster’; break # 2 P Inlet Decrease
155 elif Booster[i] > Booster[i-1]:
156 msg = ’P Inlet Increase’
157 k = 4; X = ’Booster’; break # 9 P Inlet Increase
158 elif RPM[i] < RPM[i-1]:
159 msg = ’RPM Decrease’
160 k = 9; X = ’RPM’; break # 6 RPM Decrease
161 elif RPM[i] > RPM[i-1]:
162 msg = ’RPM Increase’
163 k = 8; X = ’RPM’; break # 7 RPM Increase
164 elif Tset[i] < Tset[i-1]:
165 msg = ’Viscosity Increase’
166 k = 5; X = ’Temp’; break # 3 Viscos. Decrease
167 else: ############# Monophasic ###########################
168 for i in range(1,len(t)):
169 if Choke[i] < Choke[i-1]:
170 msg = ’Close Valve’
171 k = 1; X = ’Choke’; break # 1 Close Valve
172 elif Choke[i] > Choke[i-1]:
173 msg = ’Open Valve’
174 k = 2; X = ’Choke’; break # 2 Open Valve
175 elif Booster[i] < Booster[i-1]:
176 msg = ’P Inlet Decrease’
177 k = 3; X = ’Booster’; break # 3 P Inlet Decrease
178 elif Booster[i] > Booster[i-1]:
179 msg = ’P Inlet Increase’
180 k = 4; X = ’Booster’; break # 4 P Inlet Increase
181 elif Tset[i] < Tset[i-1]:
182 msg = ’Viscosity Increase’
183 k = 5; X = ’Temp’; break # 5 Viscos. Decrease
184 msg = ’ ’ + str(k) + ’ ’ + msg
185 print(" Time for Control is t = %s"%t[i])
186 ####################################################################
187 # Assing limits in what fault happens ##############################
188 ####################################################################
189 if X == ’Static’: ################# Static ###################
190 i1 = 0; i2 = 3
191 elif X == ’Temp’: ############### Temperature ################
192 Tin = mean_movil( # Temperatura [C]
193 (self.Tin1 + self.Tin2) * 0.5,W)
194 Tinvar = [Tin[j:j+W].var() for j in range(0,len(t))]
195 E = np.array(2E-5) # Max var before control
196 i1 = np.where(Tinvar[i:]>E)[0][0] + i # first higuer than E
197 i2 = np.where(Tinvar[i:]>E)[0][-1] + i # last lower than E
198 else: ####### Gas, Choke, Booster and RPM ########
199 # Initial Functions
200 def get_variables(X,W):
201 X = mean_movil(X,W)
202 Xvar = [X[j:j+W].var() for j in range(0,len(X))]
203 Xvarg = np.gradient([X[j:].var() for j in range(0,len(X))])
204 return X, Xvar, Xvarg
205 First = lambda x : x[0] if len(x) > 0 else 0
206 # Intitial Variables
207 P1, P1var, P1varg = get_variables(self.P1,W)
208 P2, P2var, P2varg = get_variables(self.P2,W)
101

209 M, Mvar, Mvarg = get_variables(self.M,W)


210 if X == ’Gas’: # Gas #
211 # Get Gas Mass Variance and his first derivate
212 Mgas, Mgasvar, Mgasvarg = get_variables(self.Mgas, W)
213 # Functions only used in Gas
214 Last = lambda x : x[-1] if len(x) > 0 else 0
215 def gas_limits(Xvar,i):
216 I = np.argmax(Xvar[i:]) # Index Max Variance
217 Xd = np.gradient(Xvar[i:]) # 1st Diff Variance
218 i1 = Last(np.where(Xd[0:I-1]<0)[0]) + i
219 i2 = First(np.where(Xd[I+1:]>0)[0]) + I + i
220 return i1, i2 # Limits pos
221 # Get posible for every posible variable
222 i1P1, i2P1 = gas_limits(P1var, i)
223 i1P2, i2P2 = gas_limits(P2var, i)
224 i1M, i2M = gas_limits(Mvar, i)
225 i1Mgas, i2Mgas = gas_limits(Mgasvar, i)
226 # Firs limit when variance of begin to increasse
227 i1 = min(i1P1, i1P2, i1M, i1Mgas)
228 # Last limit when variance of finish to decreasse
229 i2 = max(i2P1, i2P2, i2M, i2Mgas)
230 else: # Choke, Booster and RPM #
231 # One seconde more to choke valve
232 i = i + 33 if X == ’Choke’ else i
233 # Commun Functions for Choke Booster and RPM
234 WhereMax = lambda X, i : First(
235 np.where(X[i:] > np.max(X[0:i]))[0] ) + i
236 Change = lambda X, i : np.max([ First(np.where(X[i:]<0)[0]),
237 First(np.where(X[i:]>0)[0]) ])
238 I2 = lambda X, i, t : X + i if X !=0 else len(t) - 1
239 # Get first limit when Variance begin to increasse
240 i1P1 = WhereMax(P1var,i)
241 i1P2 = WhereMax(P2var,i)
242 i1M = WhereMax(Mvar,i)
243 i1 = min(i1P1, i1P2, i1M)
244 #Get las limit whenn Variance is so slow for every variable
245 i2P1 = I2(Change(P1varg,i1), i1, t)
246 i2P2 = I2(Change(P2varg,i1), i1, t)
247 i2M = I2(Change(Mvarg,i1), i1, t)
248 i2 = max(i2P1, i2P2,i2M)
249 tch = [t[i1],t[i2]] # Time to change
250 S = np.zeros(len(t)) # State
251 for i in range(i1,i2+1): S[i] = k # put State
252 # Check if exist any posible error
253 if int(S.max()) != int(k): msg = ’Error in Fault Simulation Test’
254 print("%s\n\n"%msg)
255 # Save Variables
256 self.State = S; self.tch = tch; self.ich = [i1,i2]
257 ########################################################################
258 def Plots(self, Kind, Pred, MonBif):
259 t = self.t; t_s = self.t_s
260 # secondary Axis for States ########################################
261 s = [self.State]; s_s = [self.State_s]; s_c = [(0.2,0,0)]
262 if len(Pred)>0:
263 s.append(Pred); s_s.append("Predicted State")
264 s_c.append((0.3,0,0))
265 yt = 9 if self.Mgas.max()*3600 > 0.5 else 5
266 #yt = 9 if MonBif == "Bif" else 5;
267 Yt = [i for i in range(0,yt+1)]
102

268 Yl = [-0.1, np.max(Yt) + 0.1] # Define Secondary ticks and Limits


269 #Yt = 0; Yl = 0
270 # Primary Axis #####################################################
271 if Kind == ’temperature’:
272 x = [self.Tin1, self.Tin2, self.T2, self.T4, self.T6, self.T8,
273 self.Tout1, self.Tout2, self.Tset]
274 x_s = [self.Tin1_s, self.Tin2_s, self.T2_s, self.T4_s,
275 self.T6_s, self.T8_s, self.Tout1_s, self.Tout2_s,
276 self.Tset_s]
277 x_c = [(0.3,0.3,0.3), (0.3,0.3,0.3), (0.4,0.4,0.4),
278 (0.4,0.4,0.4), (0.5,0.5,0.5), (0.5,0.5,0.5),
279 (0.6,0.6,0.6), (0.6,0.6,0.6), (0,0,0)]
280 x_t = [’--x’, ’--+’, ’:o’, ’:d’, ’:s’, ’:v’, ’--x’, ’--+’, ’:’]
281 Axes = "Equal"
282 elif Kind == ’delta_pressure’:
283 x = [self.DP1, self.DP2, self.DP3, self.DP4, self.DP5,
284 self.DP6, self.DP7, self.DP8, self.DP9, self.DP10]
285 x_s = [self.DP1_s, self.DP2_s, self.DP3_s, self.DP4_s,
286 self.DP5_s, self.DP6_s, self.DP7_s, self.DP8_s,
287 self.DP9_s, self.DP10_s]
288 x_c = [(0.3,0.3,0.3), (0.45,0.45,0.45), (0.3,0.3,0.3),
289 (0.525,0.525,0.525), (0.375,0.375,0.375),
290 (0.525,0.525,0.525), (0.375,0.375,0.375), (0.6,0.6,0.6),
291 (0.45,0.45,0.45), (0.6,0.6,0.6)]
292 x_t = [’:x’, ’-x’, ’:o’, ’-o’, ’:s’, ’-v’, ’:+’, ’-+’,":d",’-d’]
293 Axes = "Equal"
294 elif Kind == ’pressure’:
295 x = [self.P1*1E-5, self.P2*1E-5, self.DP*1E-5]
296 x_s = [’P1 [Bar]’, ’P2 [Bar]’, ’$\Delta P\ [Bar]$’]
297 x_c = [(0.4,0.4,0.4), (0.3,0.3, 0.3), (0.6,0.6,0.6)]
298 x_t = [’:x’, ’--+’, ’-o’]
299 Axes = "Equal"
300 elif Kind == ’gas’:
301 x = [self.Mgas*3600, self.Pgas, self.Vgas]
302 x_s = [’$\dot M_{gas}\ [kg/h]$’, self.Pgas_s, self.Vgas_s]
303 x_c = [(0.6,0.6,0.6), (0.4,0.4,0.4), (0.3,0.3,0.3)]
304 x_t = [’-o’, ’:x’, ’:+’]
305 Axes = "Diff"
306 elif Kind == ’flow’: # Flow
307 x = [self.M*3600, self.T]
308 x_s = [’$\dot M\ [kg/h]$’, self.T_s]
309 x_c = [(0.3,0.3,0.3), (0.5,0.5,0.5) ]
310 x_t = [’:o’, ’-x’]
311 Axes = "Diff"
312 else: # Control
313 x = [self.Choke, self.Booster, self.RPM]
314 x_s = [self.Choke_s, self.Booster_s, self.RPM_s]
315 x_c = [(0.4,0.4,0.4), (0.3,0.3, 0.3), (0.6,0.6,0.6)]
316 x_t = [’:x’, ’--+’, ’-o’]
317 Axes = "Diff"
318 Fig = Plot(t,t_s,x,x_s,x_c,x_t,s,s_s,s_c,Axes,Yt,Yl)
319 return Fig
320 ########################################################################
321 def get_X(self,Var,W,Gr):
322 ’’’ Var is list in form [’P1’,’P2’, ...] \nW is a int
323 \nGr is a string \’X\’ = only Var \’Xd\’ = only first derivat of Var
324 \’\’ Both derivate Var and derivate of Var ’’’
325 X = np.empty([len(self.t),0]); X_s = [] # Variable
326 Xd = np.empty([len(self.t),0]); Xd_s = [] # Derivate
103

327 Xi = np.empty([len(self.t),0]); Xi_s = [] # Integer


328 for i in Var: # for in Variables
329 x = mean_movil(self.__getattribute__(i),W) # Get Variable mean
330 X = np.c_[X, x] # Add Variables to frame
331 x_s = self.__getattribute__(i + ’_s’) # Get Variable Name
332 X_s.append(x_s) # Add Name to list names
333 if ’Xd’ in Gr: # If Add Gradients
334 xd = gradient_movil(x,self.t,W) # gradient of Variables
335 Xd = np.c_[Xd, xd] # Add gradients
336 xd_s = x_s.replace(’]’,’/s]’) # Transform Strig from
337 xd_s = xd_s.replace(’\\’,’ /dt\\’) # Variable to get
338 xd_s = ’$d ’ + xd_s[1:] # gradient string
339 xd_s = xd_s.replace(’d /dt’,’d ’) # Correct erros
340 xd_s = xd_s.replace(’/s/s’,’/s^2’) # Change time string
341 Xd_s.append(xd_s) # Add gradient strings
342 if ’Xi’ in Gr: # If Add Integers
343 xi = integer_movil(x,self.t,W) # integer of variables
344 Xi = np.c_[Xi,xi] # Add integers
345 xi_s = x_s.replace(’]’,’-s]’) # Transform Strig from
346 xi_s = xi_s.replace(’\\’,’ dt\\’) # Variable to get
347 xi_s = ’$\int ’ + xi_s[1:] # integer string
348 xi_s = xi_s.replace(’ dt’,’ ’) # Correct erros
349 xi_s = xi_s.replace(’/s-s’,’’) # change time String
350 Xi_s.append(xi_s) # Add integer strings
351 X = X if ’X’ in Gr else np.empty([len(self.t),0])
352 self.X = np.c_[X, Xd, Xi]
353 X_s = X_s if ’X’ in Gr else []
354 self.X_s = X_s + Xd_s + Xi_s # Get Self X derivates
355 return self.X, self.State
356
357 ############################################################################
358 # Get Train, Validation and Test Data ####################################
359 ############################################################################
360 def Construct(Index,folder,List,W,Var,Gr,F):
361 X_len = len(Var)*len(Gr); k = 1 # Len Data
362 c = 2 if (’Xd’ in Gr or ’Xi’ in Gr) else 1
363 data_X = np.empty([0,X_len]); data_y = np.empty([0,]) # Initial data
364 print(’\n Contruct from %s data’%(len(Index)))
365 for i in Index: # Search data by index
366 sys.stdout.write("\r Construct X:... {:.2f} %"\
367 .format(100*(k)/len(Index)))
368 Sample_a = np.load(folder + List[int(i)][0] + ’.npy’) # Sample Array
369 Sample_o = Sample_lvm(Sample_a) # Sample as Object
370 Sample_o.get_X(Var,W,Gr) # Get X data in Object
371 s = Sample_o.State.max() # State in Sample
372 X = Sample_o.X[W*c:]; y = Sample_o.State[W*c:] # Cut X
373 i1 = np.where(y==s)[0][0]; i2 = np.where(y==s)[0][-1] # begin, end
374 X = X[i1:i2+1]; y = y[i1:i2+1] # X, y
375 data_X = np.r_[data_X,X]; data_y = np.r_[data_y,y] # Add X, y
376 k+=1 # Nex iteration
377 X_s = Sample_o.X_s; # Get Feature Names
378 y_s = list(np.array(Sample_o.target_names)[F]) # Get Target Names
379 data = {’data’: data_X, ’target’: data_y, # Save Dict
380 ’feature_names’: X_s, ’target_names’: y_s} # Data
381 return data # Return Results
382 ############################################################################
383 def plot_confusion_matrix(cm, classes, normalize=False,
384 title=’’, cmap=plt.cm.Greys,
385 fontsize=20):
104

386 """ This function prints and plots the confusion matrix. Normalization
387 can be applied by setting ‘normalize=True‘."""
388 if normalize:
389 cm = cm.astype(’float’) / cm.sum(axis=1)[:, np.newaxis]
390 #print("Normalized confusion matrix")
391 else:
392 print(’Confusion matrix, without normalization’)
393
394 #print(cm)
395
396 plt.imshow(cm, interpolation=’nearest’, cmap=cmap)
397 plt.title(title,fontsize=fontsize)
398 #plt.colorbar()
399 tick_marks = np.arange(len(classes))
400 plt.xticks(tick_marks, classes)
401 plt.yticks(tick_marks, classes)
402
403 fmt = ’.2f’ if normalize else ’d’
404 thresh = cm.max() / 2.
405 for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
406 plt.text(j, i, format(cm[i, j], fmt),
407 horizontalalignment="center",
408 color="white" if cm[i, j] > thresh else "black",
409 fontsize=fontsize)
410
411 plt.tight_layout()
412 plt.ylabel(’True label’,fontsize=fontsize)
413 plt.xlabel(’Predicted label’,fontsize=fontsize)
414 ############################################################################
415 def MetricS(tree,X,y):
416 y_pred = tree.predict(X) # Prediction Values
417 cm = confusion_matrix(y,y_pred) # Confusion Matrix
418 cm = cm.astype(’float’) / cm.sum(axis=1)[:, np.newaxis]
419 cm_mean = cm.diagonal().mean() # Mean Failure detected
420 cm_min = cm.diagonal().min() # Worst Failure detected
421 sts = tree.score(X, y) # Accuracy
422 return sts, cm_mean, cm_min, cm
423 ############################################################################
424 def TrainValTest(Data,i_v,i_t):
425 X_va = Data[i_v][’data’]; y_va = Data[i_v][’target’]
426 X_te = Data[i_t][’data’]; y_te = Data[i_t][’target’]
427 l = Data[i_t][’data’].shape[1]
428 I = list(Data.keys()); I.remove(i_t); I.remove(i_v)
429 X_tr = np.empty([0,l]); y_tr = np.empty([0,])
430 for i in I:
431 X_tr = np.r_[X_tr,Data[i][’data’]]
432 y_tr = np.r_[y_tr,Data[i][’target’]]
433 X = {’Train’: X_tr, ’Val’:X_va, ’Test’:X_te}
434 y = {’Train’: y_tr, ’Val’:y_va, ’Test’:y_te}
435 return X, y
436
437 ############################################################################
438 # Functions to Filter ######################################################
439 ############################################################################
440 def mean_movil(Vector,Window): # Mean Movil Filter ########
441 Vector_new = []
442 for i in range(len(Vector)):
443 if i<Window:
444 m = np.mean(Vector[:Window])
105

445 else:
446 m = np.mean(Vector[i-Window:i])
447 Vector_new.append(m)
448 Vector_new = np.array(Vector_new)
449 return Vector_new
450 ############################################################################
451 def gradient_movil(Vector,t,Window): # Mean Movil Gradient ######
452 grad = []
453 for i in range(len(Vector)):
454 if i<Window:
455 m = np.mean(np.gradient(Vector[:Window],t[:Window]))
456 else:
457 m = np.mean(np.gradient(Vector[i-Window:i],t[i-Window:i]))
458 grad.append(m)
459 grad = np.array(grad)
460 return grad
461 ############################################################################
462 def integer_movil(Vector,t,Window): # Mean Movil Gradient ######
463 integer = lambda V,t: np.array([0.5*(V[i]+V[i-1])*(t[i]-t[i-1])
464 if i!= 0 else 0 for i in range(len(V))])
465 inte = []
466 for i in range(len(Vector)):
467 if i<Window:
468 m = integer(Vector[:Window],t[:Window]).sum() \
469 - Vector[i]*(t[i]-t[i-Window])
470 else:
471 m = integer(Vector[i-Window:i],t[i-Window:i]).sum() \
472 - Vector[i]*(t[i]-t[i-Window])
473 inte.append(m)
474 inte = np.array(inte)
475 return inte
476 ############################################################################
477 def index_data(Samples,MonBif,m,Fault,f): # filter data in list ######
478 ’’’Samples = List where have to be search the coincidences.
479 MonBif = \"Mon\" or \"Bif\" m = 1
480 MonBif = \"Mo2\" or \"Bi2\" m = 3
481 Fault = \’GasCha\’, \’ChoClo\’, \’ChoOpe\’, \’GasCha\’, \’PreDec\’,
482 \’PreInc’, ’RpmCha’, \’Static\’, \’Unclasf\’ or \’VisInc\’
483 f = 2
484 Fault = \’0.0\’, \’1.0\’, \’2.0\’, \’3.0\’, \’4.0\’, \’5.0\’, \’6.0\’,
485 \’7.0\’, \’8.0\’ or \’9.0\’
486 f = 4’’’
487 if MonBif == "": # Samples Index where MonBif is anyone
488 if Fault == "": # Samp. Ind. Where MonBif and Fault is anyone
489 Index = np.arange(0,Samples.shape[0])
490 else: # Samp. Ind. where have Fault and MonBif is anyone
491 Index = np.where(Samples[:,f] == Fault)[0]
492 else: # Samples Index where Fault is anyone
493 Index_MB = np.where(Samples[:,m] == MonBif)[0]
494 if Fault == "": # Samp. Ind. where have MonBif and Fault is anyone
495 Index = Index_MB
496 else: # Samp. Ind. where have MonBif and Fault both
497 Samples_MB = Samples[Index_MB]
498 Index_F = np.where(Samples_MB[:,f] == Fault)[0]
499 Index = Index_MB[Index_F]
500 return Index
501
502 ############################################################################
503 # Plots ####################################################################
106

504 ############################################################################
505 def Plot(t,t_s,x,x_s,x_c,x_t,sec,sec_s,sec_c,Axes,Yticks,Ylim,
506 fontsize=’xx-large’, labelsize=’large’,labelrotation=0., markersize=10,
507 markerevery=0, linewidth=1):
508 ’’’t = numpy vector of time, t_s = str to t (horizontal axis)
509 x = list of numpy arrays in left vertical axis,
510 x_s = list str or x
511 x_c = list of color for x, x_t = list of styles of x.
512 Sec = list of numpy arrays in right vertical axis,
513 sec_s = list strings or x, sec_c = list of styles of sec.
514 Axes = could be "Equal" to the same scale of x variables or "Diff"
515 to different scale to x variables.
516 Yticks= ticks to right axis if Yticks == 0 ticks default.
517 Ylim = limits to right axis if Ylim == 0 ticks default.’’’
518 fig, ax = plt.subplots(1,1, figsize=(15,7.5))
519 me = (int(len(t)/20) if len(t)>=20 else 1) \
520 if markerevery==0 else markerevery
521 ms = markersize; lw=linewidth
522 # Mean #################################################################
523 ax.minorticks_on() # Major and Minor Ticks
524 ax.grid(which=’major’, linestyle=’-’, linewidth=0.5, color=(0.8,0.8,0.8))
525 ax.grid(which=’minor’, linestyle=’:’, linewidth=0.5, color=(0.9,0.9,0.9))
526 ax.set_xlabel(t_s, fontsize=fontsize)
527 if Axes == "Equal": # Same Scales
528 for i in range(0,len(x)): # Plot Every Variable
529 ax.plot(t, x[i], x_t[i], color=x_c[i], label=x_s[i], \
530 markersize=ms, markevery=me, linewidth=lw, markeredgewidth=lw
531 )# Mean Axes Plot
532 ax.legend(loc=(0.0,1.0), fontsize=fontsize, ncol=5)
533 xmax = np.max(x); xmin = np.min(x)
534 dx = xmax - xmin # Limits Y Axis
535 ax.set_ylim( (xmin - 0.05*dx, xmax + 0.05*dx) )
536 ax.tick_params(axis=’both’,labelsize=labelsize)
537 ax.tick_params(axis=’y’,labelrotation=labelrotation)
538 else: # Diferent Scales
539 lns = ax.plot(t,x[0], x_t[0], color=x_c[0], label=x_s[0],
540 markevery=me, markersize=ms, linewidth=lw,
541 markeredgewidth=lw)
542 ax.set_ylabel(x_s[0], fontsize=fontsize)#, color=x_c[0])
543 #ax.tick_params(’y’, colors=x_c[0]) # Mean Axis Plot firs Variable
544 xmax = np.max(x[0]); xmin = np.min(x[0]);
545 dx = xmax - xmin # Limits Y Axis
546 ax.set_ylim( (xmin - 0.05*dx, xmax + 0.05*dx) )
547 ax.tick_params(axis=’both’,labelsize=labelsize)
548 ax.tick_params(axis=’y’,labelrotation=labelrotation)
549 #ax.yaxis.set_major_formatter(mtick.FormatStrFormatter(’%.1e’))
550 #ax.yaxis.set_major_locator(ticker.AutoLocator())
551 #ax.yaxis.set_minor_locator(ticker.AutoMinorLocator())
552 #ax.yaxis.set_major_formatter(
553 # ticker.ScalarFormatter(useMathText=True))
554 ax1 = [plt.plot(0,0)]*(len(x)-1); lnm = [plt.plot(0,0)]*(len(x)-1)
555 k = 0 # Initial Value Legend & Axis
556 for i in range(0,len(ax1)): # Plot Every Other Variable
557 k -= 0.09 # Space Between Axis
558 ax1[i], lnm[i] = plot_secondary(ax,t,x[i+1],x_s[i+1],x_c[i+1], \
559 x_t[i+1] ,0,0,"left",me,ms,k,
560 fontsize,lw) # Get Axis and Legend
561 lns = lns + lnm[i] # Concatenate Legend
562 xmax = np.max(x[i+1]); xmin = np.min(x[i+1]);
107

563 dx = xmax - xmin # Limits Y Axis


564 ax1[i].set_ylim( (xmin - 0.05*dx, xmax + 0.05*dx) )
565 ax1[i].tick_params(axis=’both’,labelsize=labelsize)
566 ax1[i].tick_params(axis=’y’,labelrotation=labelrotation)
567 #ax1[i].yaxis.set_major_formatter(
568 # mtick.FormatStrFormatter(’%.1e’))
569 #ax1[i].xaxis.set_major_locator(ticker.AutoLocator())
570 #ax1[i].xaxis.set_minor_locator(ticker.AutoMinorLocator())
571 #ax1[i].xaxis.set_major_formatter(
572 # ticker.ScalarFormatter(useMathText=True))
573 labs = [l.get_label() for l in lns] # Get and Plot Legend
574 ax.legend(lns, labs, loc=(0.0,1.0), fontsize=fontsize,ncol=i+2)
575 #plt.subplots_adjust(left=-k)
576
577 # Secondary ############################################################
578 if sec != 0: # If There are Secondary axys
579 string = ’$-\!\!\!-\!\!\!\!-$ ’ + sec_s[0]
580 axs = plot_secondary(ax,t,sec[0],string, sec_c[0], ’-’, Ylim,
581 Yticks, "right", me, ms, 1,fontsize,lw
582 ) # Plot Secondary axis 1
583 if len(sec) == 1: # Set label y
584 axs.set_ylabel(sec_s[0], color=sec_c[0], fontsize=fontsize)
585 axs.tick_params(axis=’both’,labelsize=labelsize)
586 axs.tick_params(axis=’y’,labelrotation=0.)
587 elif len(sec) == 2: # Plot Secondary axis 2
588 axs.plot(t, sec[1], ’--’, color=sec_c[1], label=sec_s[1],
linewidth=lw)
589 axs = axs_text(axs,sec_s[0],sec_c[0],’top’,fontsize)
590 axs = axs_text(axs,sec_s[1],sec_c[1],’bottom’,fontsize)
591 axs.tick_params(axis=’both’,labelsize=labelsize)
592 axs.tick_params(axis=’y’,labelrotation=0.)
593 else: # More than 2 axis
594 print("Warnnig: maximum of two lines on secondary axis")
595 plt.tight_layout(pad=1.08)
596 plt.subplots_adjust(top=0.91)
597 return fig
598 ############################################################################
599 def axs_text(axs,sec_s,sec_c,topbottom,fontsize
600 ): # Text to secondary axis #######
601 strtex = ’$-\!\!\!-\!\!\!\!-$ ’ + sec_s if topbottom == ’top’ \
602 else ’ ----- ’ + sec_s
603 axs.text(0.995, 0.5, strtex ,horizontalalignment=’right’,
604 transform=axs.transAxes, verticalalignment=topbottom,
605 rotation=’vertical’, color=sec_c,fontsize=fontsize)
606 return axs
607 ############################################################################
608 def plot_secondary(ax,t,x,x_s,x_c,x_t,Ylim,Yticks,Loc,me,ms,k,fontsize,lw
609 ): # Sec ######
610 axs = ax.twinx(); #
611 if Ylim != 0: axs.set_ylim(Ylim[0], Ylim[1])
612 if Yticks != 0: axs.set_yticks(Yticks)
613 #axs.tick_params(’y’, colors=x_c)
614 lns = axs.plot(t, x, x_t, color=x_c, label=x_s, markevery=me, \
615 markersize=ms, linewidth=lw, markeredgewidth=lw)
616 axs.spines[Loc].set_position(("axes", k))
617 if Loc == "right":
618 return axs
619 else: # "left"
620 axs.set_ylabel(x_s, fontsize=fontsize) #color=x_c,
108

621 axs.yaxis.set_label_position(Loc)
622 axs.yaxis.tick_left()
623 return axs, lns
624
625 ############################################################################
626 # Propierties of Liquid ####################################################
627 ############################################################################
628 def Mul(T):
629 a = 14.06646543; b = -586161.2888; c = 491531.6781
630 d = -170278.8512; e = 31562.04855; f = -3391.691042
631 g = 214.5231787; h = -102.6877725
632 mu = a*(math.e**((b + (c*T) + d*(T**2) + e*(T**3) + f*(T**4) \
633 + g*(T**5))/(T**6)))+ h
634 return mu #[Cp]
635
636 def Mug(T):
637 a = 14.06646543; b = -586161.2888; c = 491531.6781
638 d = -170278.8512; e = 31562.04855; f = -3391.691042
639 g = 214.5231787; h = -102.6877725
640 mu = a*(math.e**((b + (c*T) + d*(T**2) + e*(T**3) + f*(T**4) \
641 + g*(T**5))/(T**6)))+ h
642 return mu #[Cp]
643
644 def Rhol(T):
645 rho = -0.637*T + 961.95
646 return rho # [kg/m^3]
647
648 def Rhog(T,P):
649 R_n2 = 2968 # R (N_2) [J/Kg-C]
650 rho = P / (R_n2*(T + 273.15))
651 return rho # [kg/m^3]

Você também pode gostar