As doenças cardiovasculares hoje são a maior causadora de mortes no mundo, estimado que 31% das mortes no mundo estão relacionadas a doenças cardiovasculares. Essas doenças causam diretamente a falha do coração que levam a morte do individuo.

A maioria das doenças cardiovasculares podem ser evitadas com pequenos cuidados, porém é dificil saber se algum individuo irá possuir uma doença cardiovascular, dessa forma Machine Learning é de grande utilidade para auxiliar na prevenção dessas doenças.

O objetivo desse projeto é a previsão se o paciente irá ser levado a uma falha cardiovascular pelo desenvolvimento de alguma doença.

 -- Objetivos

  É esperado um Recall minimo de 75% para a classe 0 (DEATH_EVENT não ocorreu). Já para a classe 1 (DEATH_EVENT ocorreu) é esperado um Recall de 85%. 

  A escolha dos objetivos é baseado em algumas analises iniciais, sabendo que o nosso dataset não possui muitas observa-ções e esta desbalanceado. Dessa forma irá precisar de uma modelagem mais cuidadosa para atingir um modelo ideal. 

  Também foi escolhido que iremos priorizar que o algoritmo acerte quem irá MORRER. Dessa forma poderia ser iniciado um tratamento para o paciente antecipadamente.

Dataset: https://www.kaggle.com/andrewmvd/heart-failure-clinical-data

Variaveis

Explicação dada pelo autor no tópico: https://www.kaggle.com/andrewmvd/heart-failure-clinical-data/discussion/193109

Feature Explanation Measurement Range
Age Age of the patient Years [40,…, 95]
Anaemia Decrease of red blood cells or hemoglobin Boolean 0, 1
High blood pressure If a patient has hypertension Boolean 0, 1
Creatinine phosphokinase (CPK) Level of the CPK enzyme in the blood mcg/L [23,…, 7861]
Diabetes If the patient has diabetes Boolean 0, 1
Ejection fraction Percentage of blood leaving Percentage [14,…, 80]
Sex Woman or man Binary 0, 1
Platelets Platelets in the blood kiloplatelets/mL [25.01,…, 850.00]
Serum creatinine Level of creatinine in the blood mg/dL [0.50,…, 9.40]
Serum sodium Level of sodium in the blood mEq/L [114,…, 148]
Smoking If the patient smokes Boolean 0, 1
Time Follow-up period Days [4,…,285]
(target) death event If the patient died during the follow-up period Boolean 0, 1
    * Sex - Gender of patient Male = 1, Female =0
    * Diabetes - 0 = No, 1 = Yes
    * Anaemia - 0 = No, 1 = Yes
    * High_blood_pressure - 0 = No, 1 = Yes
    * Smoking - 0 = No, 1 = Yes
    * DEATH_EVENT - 0 = No, 1 = Yes

Imports

Ambiente

Coleta dos Dados

1. Analise Exploratoria

É verificado que possuimos apenas 299 registros, o que significa que possuimos poucos dados para trabalhar. Assim, temos que tomar cuidado com a manipulação nos dados e tentar evitar qualquer remoção de registro. É perceptivel que o dataset é composto por pessoas acima de 40 anos, e com uma média de 60 anos, levando a uma população mais velha.

É verificado que a variavel 'Age' esta classificada como float, o que pode ser um erro e iremos converter para inteiro. Já em relação as outras variaveis não tem nada errado, algumas variaveis que poderiam ser boolean estão como inteiro, mas isso não causa nenhum problema para o algoritmo.

Também é verificado que nenhuma informação é perdida com essa transformação.

Para uma melhor compreensão iremos separar o dataset em variaveis categoricas e continuas, assim podemos utilizar de tecnicas especificas para cada tipo.

Verificando o boxplot abaixo das variaveis continuas, é notavel que a variavel 'creatinine_phosphokinase', 'serum_creatinine' e 'platelets' possuem um auto numero de outliers, principalmente as duas primeiras. Esses outliers estão concentrados acima do Q3.

Para uma melhor visualização iremos tentar transformar as variaveis continuas para log.

A transformação nos levou a alguns insights, como que a variavel 'time' pode possuir outliers se convertido em log, já outras variaveis como 'creatinine_phosphokinase' passam a não ter presença significativa de outliers.

É notado que as variaveis continuas possuem uma tendência para inversamente proporcional, porém essa tendencia é fraca, mostrando valores quase que nulos para a correlação. É notado que a variavel 'creatinine_phosphokinase' e 'platelets' não aparentam possuir correlação com a variavel target.

É perceptivel que Time, esta altamente correlacionado com a variavel target, pois é uma variavel que não pode pertencer ao dataset, visto que indica o tempo em meses até a falha cardiovascular do paciente depois da consulta ao medico, visto que essa variavel não seria capturada em um cenario real deve ser removida do dataset.

É verificado que o nosso dataset possui um desbalaneamento notavel, visto que aproximadamente 66% das variaveis é da classe 0 (não ocorreu falha cardiovascular) e 33% da classe 1 (ocorreu falha cardiovascular).

Para alguns insights iremos comparar a relação por um stacked barplot entre as variaveis categoricas e target. Para os graficos abaixo a grande surpresa fica no ultimo, 'smoking' onde é percebido que os não fumantes, classe 0, morrem mais que os fumantes, classe 1. Claro, isso é uma analise de somente uma métrica, para se ter certeza teriamos que analisar mais metricas.

1.1 Distribuição dos Dados

Iremos verificar se os nossos dados possuem uma distribuição Gaussiana ou não. Dessa forma iremos entender quais metodos estatisticos utilizar. Distribuições Gaussianas utilizam de métodos estatisticos paramétricos. Já o contrário utiliza de métodos estatisticos não paramétricos. É importante entender qual método utilizar para não termos uma vissão errada sobre os dados.

Analisando as variaveis abaixo:

Age: Aparenta ser uma variavel com o comportamento Gaussiano, possui alguns pontos fora da linha mas nada muito grave.

creatinine_phosphokinase: Não apresenta comportamento Gaussiano, possui muitos pontos constantes e esta fora da linha de dados Gaussianos.

ejection_fraction: Possui um leve comportamento Gaussiano, os pontos tendem a seguir a reta, porém muitos pontos estão saindo da linha.

platelets: Possui forte comportamento Gaussiano, possui alguns pontos fora da linha mas nada grave.

serum_creatinine: Não apresenta comportamento Gaussiano, possui muitos pontos constantes e esta fora da linha de dados Gaussianos. Apesar disso parece seguir levemente a linha.

serum_sodium: Possui forte comportamento Gaussiano, possui alguns pontos fora da linha mas nada grave.

time: Apresenta fortes indicios de comportamento Gaussiano, porém os dados estão constantemente cruzando a reta.

Abaixo iremos utilizar 3 metodos estatisticos baseado em Hipotese para avalidar os nossos dados, onde:

p <= alfa: Rejeita H0, dados não são Gaussianos.

p > alfa: Falha ao rejeitar H0, dados são Gaussianos.

1.1.1 Tesde de Shapiro Wilk

O teste de Shapiro Wilk é ideal para avaliar amostras ou conjuntos menores de dados, avaliando a probabilidade de que os dados tenham sido extraidos de uma distribuição Gaussiana.

1.1.2 Teste normal de D'Agostino

O teste Normal de D'Agostino avalia se os dados são Gaussianos utilizando estatisticas resumidas como: Curtose e Skew.