Skip to content

gustavoribolla/fatores_risco_avc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Fatores de risco de AVC

Introdução

Neste projeto, foram usados classificadores para identificar quais são os fatores de risco para o acidente vascular cerebral (AVC). Um AVC (stroke) é um dano cerebral causado pela interrupção de seu fluxo sanguíneo.

Implementação

  1. Certifique-se de ter o python instalado em seu computador;
  2. Clone esse repositório para algum lugar de sua máquina, utilizando o comando https://github.com/insper-classroom/241-alglin-aps6-ribollarafa.git;
  3. Instale as bibliotecas necessárias contidas no arquivo requirements.txt, através do comando: pip install -r requirements.txt.

Organização

  1. Criação do arquivo demo.py para demonstração;
  2. Adição de comentários de explicação ao decorrer do código;
  3. Criação do requirements.txt para instalação de bibliotecas;
  4. Arquivo .gitignore com pasta "archive" incluída.

Arquivo Demo

  1. Rode o arquivo demo.py;
  2. O arquivo gerará o resultado da acurácia.

Tratamento de Dados

Os dados para treinamento do nosso sistema foram baixados do site Kaggle - The Movies Dataset e armazenados no arquivo archive/healthcare-dataset-stroke-data.csv, arquivo que foi incluído no .gitignore e consequentemente não está nesse repositório dado seu tamanho.

Os dados recebidos eram descritos em linguagem natural, por exemplo, o dataframe possuia a coluna "gender" que podia ter como resposta "male", "female" e "other". Esse tipo de descrição facilita o entendimento dos dados por pessoas, mas para o computador isso não é facilmente interpretado. Asssim utilizamos a função get_dummies da biblioteca pandas para reorganizar os dados de forma que facilitaria a interpretação pelo computador. Além disso, na coluna onde o "bmi" era representando para alguns o dado não existia assim prenchemos estas linhas com a média do bmi do dataframe.

Após esse tratamento incial separamos o dataframe original em dois, o primeiro o df_features que não contém as colunas de "id" e "stroke", ou seja, possuiem os atributos que afetam a predição de saber se a pessoa tem chance de ter um AVC ou não, o segundo dataframe df_target possuí somente a coluna de stroke, sendo que 1 representa uma pessoa que teve um AVC e -1 uma que não teve.

Regressão Linear

O primeiro método utilizado foi o da regressão linear. Para isso primeiramente transformamos nossos dois dataframes df_features e df_target em numpy arrays, e então usamos a função train_test_split da biblioteca sklearn para divir nossos arrays em um conjuto de teste e um de treino.

Então criamos a função loss que contém a função que será usado pelo gradiente. Ela recebe um array com o pesos das features, o vies, as features de treino e o alvo de treino. Apartir desta função calculamos o seu gradiente, multiplicamos por alpha e atualizamos a o vies e os pesoss e calculamos novamente. Fazemos esse processo 10000, com um alpha de $10^{-5}$. Ou seja, vamos nos aproximando aos poucos do nosso valor mínimo do EQM, que é quando nosso modelo erra menos.

Por último depois de chegarmos no valor ideal para nossos pesos e viés, podemos fazer nossa predição de se uma pessoa teria um AVC ou não usando o conjunto teste.

Árvore de Decisão

Para fazer a predição utilizando a Árvore de Decisão, primeiro separamos nossos dados em dois conjuntos um de treino e um de teste. Então utilizando a função DecisionTreeClassifier da biblioteca sklearn uma árvore de decisão é gerado. Esta árvore é baseada em que features do nosso conjunto de treino possuem um valor de entropia maior, ou seja, quais features são mais decisivas na predição de se uma pessoa terá AVC ou não.

Acurária e Hipótese Nula

Para calcular a acurácia de ambas as técnicas de predição foi utilizado a função accuracy(y_test, y_est) nela comparamos o sinal do resultado da predição e da informação correta se estes forem iguais então o modelo acertou. E então retornamos a média dos acertos. Nossa acurácia para o modelo que utilizava a regressão linear obteve entorno de 0.75 na média, já para a árvore de decisão a média da nossa acurácia foi de entorno de 0.88.

Apesar das acurácias aparentarem serem boas em uma primeira análise, elas não são melhores que a hipótese nula, ou seja, se nosso modelo simplesmente dissesse que todos não teram AVC, teriamos uma acurácia mais alta dado que somente aproximadamente 0.04 das pessoas do banco de dados tiveram AVC. Isso demonstra que nosso modelo poderia ser melhorado.

Fatores ligados ao AVC

Para analisarmos os fatores ligados ao Acidente Vascular Cerebral (AVC) escolhemos três formas para encontrarmos: Correlação, Regressão Linear e Árvore de Decisão. Para a correlação calculamos através do .corr(), para a regressão linear utilizamos a transposta da nossa matriz de coeficientes de peso e para a árvore de decisão, usamos o método feature_importances_, abaixo estão representados os 10 mais relevantes de cada um:

Ordem Correlação Regressão Linear Árvore de Decisão
1 Idade Gênero Outro Criança
2 Doença do Coração Doença do Coração Nível de Glicose
3 Nível de Glicose Nunca Fumou Idade
4 Hipertensão Já Casado Índice de Massa Corporal
5 Já Casado Ex Fumante Fumante
6 Status Fumante Residente Urbano Trabalhador Privado
7 Índice de Massa Corporal Fumante Doença do Coração
8 Residente Urbano Residente Rural Não Fumante
9 Trabalhador Privado Nível de Glicose Status de Fumante Desconhecido
10 Gênero Masculino Gênero Masculino Trabalhador do Governo

Dentre os resultados gerados, percebemos que: idade, doença do coração, hipertensão, status de fumante, nível de glicose e tipo de residência foram os mais relevantes e após encontramos estudos que citam essas características:

1- Idade:

2- Doença do Coração:

3- Hipertensão:

4- Status de Fumante:

5- Nível de Glicose:

6- Tipo de Residência:

Referências

  1. Código desenvolvido com o auxílio do Notebook realizado pelo professor Marcio Fernando Stabile Junior;
  2. Auxílio do ChatGPT para saciar dúvidas relacionadas ao projeto.

Desenvolvedores

Projeto desenvolvido por Gustavo Colombi Ribolla e Rafaela Afférri de Oliveira.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published