Prevendo a Admissão de Pacientes de Covid-19 na UTI com Machine Learning 🤖

Carolina Dias
8 min readAug 8, 2021

--

Será que utilizar Machine Learning pode Auxiliar no Trabalho dos Profissionais da Saúde?

Aqui você encontra o repositório do projeto no Github (em inglês)

Com qual problema estamos lidando? ⁉️

A pandemia de Covid-19: infelizmente todos nós já estamos habituados a ela. Já sabemos a grande e triste quantidade de pessoas que morreram pela doença e a esperançosa quantidade de pessoas que vão sendo cada vez mais imunizadas (em alguns países).

E como o número de pessoas contaminadas só cresce e cresce, precisamos de maneiras mais eficientes de conseguir alocar esses pacientes, para que os sistemas de saúde não fiquem superlotados pelo mundo afora.

Nesse contexto, o Hospital Sírio-Libânes publicou um conjunto de dados no Kaggle que contém diversos dados sobre hospitalizações de pacientes por Covid-19. E temos as seguintes tarefas propostas:

  • Tarefa 01: Prever a admissão de pacientes com Covid-19 na UTI;
  • Tarefa 02: Prever a NÃO admissão de pacientes com Covid-19 na UTI;

O que temos nesses dados? 📂

Acesso os dados aqui diretamente no Kaggle ou no Github

Na descrição do problema no Kaggle temos que:

O conjunto de dados contém dados anonimizados do Hospital Sírio-Libânes, São Paulo e Brasília. […] Os dados foram limpos e escalonados entre -1 e 1 utilizando o MinMaxScaler.

Já nas colunas, temos:

  • Informações Demográficas (03 colunas)
  • Doenças Preexistentes Agrupadas (09 colunas)
  • Resultados de Exames Sanguíneos (35 colunas)
  • Sinais Vitais (06 colunas)

Além dessas, temos a variável que queremos prever, a ICU (ou UTI, em português). Se o valor for 0, o paciente não foi pra UTI e se for 1 o paciente foi pra UTI.

Por último, temos uma coluna Window (ou janela) que representa o período de tempo no qual o paciente foi admitido na UTI e ela está definida da seguinte maneira:

Descrição da coluna “Window”

Como foi feita essa análise? 🤔

Temos três etapas principais nesse projeto:

  • Limpeza dos Dados
  • Análise dos Dados
  • Modelagem em Machine Learning

Seguimos os seguintes passos em cada etapa:

Passos da Limpeza dos Dados
Passos da Análise de Dados
Passos da parte de Machine Learning

Após limparmos os dados, com a checagem dos valores faltantes, substituição desses valores pelos valores seguintes ou anteriores, partimos para a preparação da coluna “Window”: utilizamos apenas os dados de 0 a 2 horas de admissão na UTI, como é recomendado pelo próprio Hospital Sírio-Libânes na descrição do problema no Kaggle.

Por fim, agrupamos as linhas por pacientes, pois antes cada paciente ocupada 5 linhas da tabela. Faltou apenas removermos as variáveis altamente correlacionadas. Terminamos a limpeza dos dados com:

  • 352 linhas, uma para cada paciente,
  • 98 variáveis e
  • 1 variável que queremos prever, a coluna ICU (UTI).

Quais os principais resultados das análises? 📊

Para as colunas com informações demográficas dos pacientes, vamos observar os principais resultados obtidos.

  1. A coluna “UTI” tá bem distribuída?
Distribuição da coluna “UTI”

Não existe um valor exato para quando podemos considerar uma variável como sendo desbalanceada, mas algumas fontes indicam que podemos começar a pensar que nossas variáveis estão desbalanceadas se a diferença entre elas for de mais de 20%. Aqui no nosso caso a diferença é de apenas 7.4%, então vamos considerar que nossa variável está balanceada.

2. Qual a distribuição por gênero?

Admissão na UTI por gênero

Aqui fica evidente alguns fatos sobre a diferença entre a admissão na UTI por gênero: homens precisam mais de terapia intensiva do que mulheres, quando pacientes de Covid-19.

Esse fenômeno já vem sendo bem estudado e bem documentado: Male sex identified by global COVID-19 meta-analysis as a risk factor for death and ITU admission

3. E a idade, será que afeta na admissão de pacientes na UTI?

Admissão na UTI por idade

Aqui, vemos rapidamente que pessoas acima de 70 anos de idade são mais suscetíveis a precisarem de terapia intensiva do que os mais jovens. Esse fato também já vem sendo amplamente estudado e todos nós já estamos habituados a saber como a idade é um grande fator de risco para a severidade da Covid-19.

4. O quão doenças preexistentes afetam na necessidade de UTI?

Admissão na UTI separada por doenças preexistentes

É fácil ver como certos grupos de doenças impactam diretamente na necessidade de UTI por pacientes com Covid-19. Em quase todos os grupos de doenças, pacientes com tais doenças preexistente são realmente fatores de risco para o agravamento da Covid-19.

5. E os sinais vitais, será que diferem de quem foi pra UTI contra quem não foi?

Sinais Vitais: Admissão na UTI vs. Não Admissão na UTI

Primeiramente, como vimos acima, todos os dados foram escalonados para uma escala de -1 a 1 para manter as informações anônimas, então não temos os valores exatos de cada informação, mas mesmo assim conseguimos alguns insights desses dados.

Em pacientes que foram pra UTI, BLOODPRESSURE_DIASTOLIC é um pouco menor e BLOODPRESSURE_SISTOLIC é um pouco maior do que nos paciente que não foram pra UTI. A frequência cardíaca é um pouco mais baixa em pacientes na UTI, mas com outliers em ambos os grupos.

Outros sinais vital muito relevantes, a saturação de oxigênio e a frequência respiratória, também são diferentes em pacientes que precisaram de terapia intensiva.

Foi útil essa análise de dados?

Sim, extremamente! Agora podemos facilmente ver que muitas variáveis influenciam na ida de um paciente de Covid-19 na UTI. Idade, gênero, sinais vitais e resultados de exames de sangue podem ser (e serão) muitíssimo relevantes para a parte a seguir: previsão.

Conseguimos ter boas previsões? 🔮

Agora chegamos na parte preferida por muitos: Machine Learning! Com os dados limpos obtidos das partes anteriores, vamos ver se a modelagem nos ajuda a resolver essa tarefa.

Após a separação entre treino e teste e a definição de qual métrica usaremos (spoiler: é a F1-score), fizemos um modelo “ingênuo” para termos como base para os próximos modelos. Após isso, utilizamos a biblioteca “Lazy Predict” que roda diversos modelos de uma vez, com os parâmetros “de fábrica”, para termos um norte pra escolha dos seguintes modelos. Através dessa biblioteca escolhi os modelos:

  • RandomForestClassifier
  • LGBMClassifer
  • AdaBoostClassifier

Além disso, escolhi mais dois modelos bem relevantes quando o assunto é classificação binária (como é o nosso caso): o Logistic Regression e o XGBoostClassifier.

Após rodarmos e modificarmos um pouco os hiperparâmetros desses modelos, obtemos os seguintes resultados:

Resultado das Métricas dos Modelos

Assim, o modelo escolhido para realizar as previsões foi o LGBMClassifier, por apresentar um melhor valor em F1-score 1.

Quais variáveis esse modelo achou mais relevantes para a previsão? ✅

Pelo gráfico abaixo conseguimos enxergar bem a importância das variáveis.

Importância das Variáveis para o Modelo LGBMClassifier

A primeira variável, HEMATOCRITE , também conhecida como HTC. já vem sendo estudada e resultados mostram que ela aparece reduzida em pacientes com Covid-19.

A variável PCR também é uma das principais analisadas em casos de Covid-19.

Finalmente, vamos prever o que viemos prever:

Após a escolha do modelo LGBMClassifier, fomos capazes de obter uma previsão para a admissão ou não de paciente na UTI. Acabamos com a seguinte matriz de confusão:

Matriz de Confusão da Nossa Previsão

O que essa matriz representa?

Temos 41 pacientes que realmente foram para a UTI, e desses, conseguimos prever corretamente a ida de 29 deles para a UTI. Dos 47 que não precisavam ir para a UTI, erroneamente nosso modelo indica que 10 deles precisam ir.

O que concluímos desse projeto? 🔎

A Covid-19 foi responsável por lotar os sistemas de saúde em todo o globo. Profissionais da saúde estão sobrecarregados e isso traz à tona a necessidade de uma mão amiga. Isso poderia vir na forma de um modelo de machine learning que ajude a prever a admissão de pacientes na UTI.

Mas antes de comemorarmos, essa ferramente nunca deve ser utilizada sozinha, principalmente com os resultados que temos agora que estão longe de 100% de acerto. É necessário que sempre esteja presente um profissional de saúde para validar essas informações fornecidas pelo modelo, para termos uma melhor qualidade no tratamento de todos os pacientes.

Alguma ideia de melhoria? 💡

  • Para próximos projetos, um melhor ajuste dos hiperparâmetros pode levar a melhores resultados do que os atuais.
  • Também poderíamos estender essas análises para o uso em outras doenças ou em outros contexto na saúde.
  • Uma ideia interessante pode ser também a implementação desse modelo em um aplicativo web (até mesmo com o Streamlit, por exemplo), que recebe as informações relevantes de um paciente (ou de um conjunto de pacientes) e devolve uma previsão sobre a necessidade de terapia intensiva para aquele paciente. Também poderíamos oferecer um valor de confiança para essa previsão, para que os profissionais da saúde tenham mais atenção com os pacientes nos quais o modelo tem menos confiança.

Mais alguma coisa? 🚀

Esse foi o projeto final do Bootcamp Data Science Aplicada da Alura. Ao longo de 12 semanas tivemos momentos intensos de aprendizado. Agradecimento especial aos instrutores Thiago Gonçalves, Guilherme Silveira, Allan Spadini e por último, mas não menos importante, Karoline Penteado.

Enormes agradecimentos também aos meus amigos Valquíria Alencar e Júnior Torres, sempre trazendo alegrias aos projetos de virar noite.

Quer saber quais referências foram utilizadas? 📜

Encontre-as aqui no repositório do projeto!

Alguma dúvida, dica ou sugestão? 👋

Pode me achar no Linkedin ou no Github!

Até a próxima!

É hora de dar tchau!

--

--

Carolina Dias

A machine learning engineer learning how machines learn and a mathematician bad at math