Skip to content

PedroHCAlmeida/Projeto_final_bootcamp

Repository files navigation

Prevendo a necessidade de internação para pacientes com COVID-19

Made withJupyter GitHub license

Alt

Sumário

Apresentação

Olá, meu nome é Pedro Henrique, e esse é meu repositório referente ao projeto final do Bootcamp de Data Science Aplicada promovido pela Alura.

Resumo 📜

Esse projeto teve como objetivo criar um modelo capaz de prever se um paciente com suspeita de COVID-19 precisará ou não ser internado na UTI levando em consideração apenas os dados obtidos até as duas primeiras horas que o mesmo chega ao local. Para isso foi utilizada uma base de dados disponibilizada pelo Hospital Sírio-Libanês, essa base de dados pode ser encontrada no kaggle.

Os impactos esperados com a criação desse modelo são de um lado conseguir melhorar a logística de recursos do hospital, e o mais importante prever quais são aqueles pacientes que mais necessitam dessa internação, dando a prioridade para quem mais precisará, uma vez que cada leito vago pode significar uma vida salva.

curva_covid

Contexto 🦠

O ano de 2020 começou de uma maneira completamente inesperada, o mundo foi atingido por uma das maiores crises sanitárias da história contemporânea, e uma palavra tomou conta das notícias nos jornais e mídias sociais brasileiras, "Leito", a superlotação dos hopitais e a falta de leitos se tornou normal em todo o Brasil, nos anos de 2020 e 2021. Diante de uma doença desconhecida, encontrar como identificar seus perigos e as alterações corporais se tornou um desafio para medicina moderna.

Partindo desse problema o projeto teve como ponto de partida analisar dados acerca de resultados de exames de sangue, sinais vitais, gases sanguíneos, grupos de doenças apresentadas pelo paciente, além de informações demográficas do mesmo. A partir disso foi procurado quais as relações de cada variável com a necessidade de um leito, para no final sermos capazes de prever com a maior certeza quem são aqueles que mais necessitam dessa internação.

Estrutura do projeto 🧱

Neste diretório se encontram os dados utilizados no projeto, esses dados estão dividos em duas pastas:

Este diretório foi destinado as funções utilizadas no projeto, essas foram divididas em 4 arquivos .py dependendo do objetivo das mesmas, são eles:

  • preprocessing : funções relacionadas ao pré-processamento dos dados
  • feature : funções relacionadas a seleção de variáveis(feature selection)
  • my_plot : funções relacionadas a geração de gráficos
  • my_classifier : classe utilizada para criação dos modelos de machine learning

Aqui foram criados os notebooks onde foram realizadas as análises e criação dos modelos de Machine Learning, foram divididos em dois arquivos .ipynb, são eles:

  • Analise_exploratoria: notebook desenvolvido no jupyter lab onde foi realizado o pré-processamento dos dados brutos e toda a parte de Análise exploratória.
  • Previsoes : notebook destinado aos modelos de Machine Learning a partir dos dados pré-processados

Neste repositório estão os objetos criados dentro do notebook e salvos em arquivos para serem carregados em outros locais,estes foram organizados em duas pastas:

  • SearchCV_salvo : possui o arquivo onde salvo do objeto que foi utilizado na otimização dos hyperparâmetros. Optei por salvá-lo, uma vez que é um processo computacionalmente custoso e demorado, dessa forma é possível carregá-lo em outros ambientes.
  • Modelo_Salvo : aqui está salvo o modelo final que obteve as melhores métricas de acordo com o previsto no início do projeto. Esse modelo, no final, foi treinado com todos os dados e salvo em um aquivo .joblib nesta pasta .

Diretório com todas as imagens utilizadas no projeto.

Neste diretório experimentei testar diferentes funcionalidades que é possível entre o Rstudio e python. Para isso criei um projeto de um website dentro do Rstudio, e transformei os arquivos .ipynb em .Rmd, após isso configurei o Rstudio para utilizar o mesmo ambiente do anaconda que foi desenvolvido os notebooks originais.

Por fim fiz pequenas mudanças em relação as leituras de dados e importações de funções locais e utilizei o arquivo SearchCV_salvo/random_searchcv para não realizar o processo de otimização de hyperparâmetros novamente.

  • Comando utilizado para utilizar o python no Rstudio no mesmo ambiente que foi desenvolvido os notebooks pelo jupyter lab

  • Comando utilizado para gerar uma cópia dos notebooks no formato .Rmd

  • Obs: esses comandos só foram realizados uma vez na hora de iniciar a sessão, depois foram retirados

  • O resultado final do site pode ser conferido aqui

Modelos

Após realizar o pré-processamento dos dados e a análise exploratória, foram testados diferentes modelos de Machine Learning, foram eles:

Modelo Pacote Método
LogisticRegression sklearn.linear_model Regressão Logística
DecisionTreeClassifier sklearn.tree Árvore de decisão
RandomForestClassifier sklearn.ensemble Ensemble
ExtraTreesClassifier sklearn.ensemble Ensemble
XGBClassifier pacote xgboost Ensemble
LGBMClassifier pacote lightgbm Ensemble

Entre os modelos testados, os dois com as melhores métricas de ROC AUC foram escolhidos para realizar uma otimização dos hyperparâmetros. Foi levado em conta a média das métricas obtidas em uma validação cruzada pelo método RepeatedStratifiedKFold, realizando 10 validações cruzadas diferentes com 5 divisões no dataset.

Além disso, foram realizadas técnicas de reamostragem e de seleção de variáveis a partir de outro modelo. Os resultados obtidos do modelo final foram:

Vamos listar todos os resultados do nosso modelo final:

Métrica Média
ROC AUC 0.946
ACURÁCIA 0.882
PRECISÃO 0.885
F1-SCORE 0.882
RECALL 0.882

Bibliotecas utilizadas 💻

Esse projeto foi realizado utilizando a linguagem Python versão 3.9.6, e os notebooks foram desenvolvidos através da ferramenta jupyter lab dentro de um ambiente criado pela plataforma anaconda, as principais bibliotecas usadas foram:

  • Pandas versão 1.3.1 : biblioteca rápida e poderosa usada para manipulação de dados
  • Matplotlib versão 3.4.2 : biblioteca usada para visualização de dados
  • Seaborn versão 0.11.1 : biblioteca baseada no Matplotlib para visualização de gráficos estatísticos mais complexos
  • Numpy versão 1.19.5 : biblioteca utilizada para computação matemática
  • Scikit-learn versão 0.24.2 : biblioteca utilizada na criação de modelos de Machine Learning
  • Todas as bibliotecas e versões podem ser encontradas no arquivo requirements.txt

Agradecimentos 😀

Gostaria de deixar o meu agradecimento a Alura por essa oportunidade incrível de participar do bootcamp de Data Science Aplicada, aos instrutores Thiago Santos, Guilherme Silveira, Allan Spadini e Karoline Penteado, que nos acompanharam durante todo o bootcamp. Ao Paulo Vasconcellos, que sempre participou das lives nesse período e trouxe dicas valiosas para melhorar os projetos. Além disso, queria agradecer a todo pessoal do discord e do Scuba team que sempre ajudou quando foi preciso.

Referências 📚

https://medium.com/data-hackers/como-selecionar-as-melhores-features-para-seu-modelo-de-machine-learning-faf74e357913
https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc_crossval.html
https://machinelearningmastery.com/k-fold-cross-validation/
https://machinelearningmastery.com/repeated-k-fold-cross-validation-with-python/
https://towardsdatascience.com/5-reasons-why-you-should-use-cross-validation-in-your-data-science-project-8163311a1e79
https://g1.globo.com/sp/sao-paulo/noticia/2020/11/18/pacientes-e-medicos-relatam-falta-de-leitos-de-uti-em-ao-menos-tres-grandes-hospitais-particulares-da-cidade-de-sp.ghtml
https://caiquecoelho.medium.com/um-guia-completo-para-o-pr%C3%A9-processamento-de-dados-em-machine-learning-f860fbadabe1
https://searchsoftwarequality.techtarget.com/definition/garbage-in-garbage-out#:~:text=George%20Fuechsel%2C%20an%20early%20IBM,processes%20what%20it%20is%20given
https://machinelearningmastery.com/k-fold-cross-validation/#:~:text=Cross%2Dvalidation%20is%20a%20resampling,k%2Dfold%20cross%2Dvalidation
https://numpy.org/doc/stable/index.html
https://pandas.pydata.org/docs/index.html
https://scikit-learn.org/stable/index.html
https://matplotlib.org/
https://seaborn.pydata.org/

Contato ☎️



About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors